calibrationMatrixValues: consider principalPoint in FOV computation

The FOV depends on the principal point location. Use formula of
viz::Camera.
This commit is contained in:
Pavel Rojtberg 2016-04-27 14:47:52 +02:00
parent 86959310f9
commit 8ed1945ccd
2 changed files with 6 additions and 4 deletions

View File

@ -3356,8 +3356,10 @@ void cv::calibrationMatrixValues( InputArray _cameraMatrix, Size imageSize,
}
/* Calculate fovx and fovy. */
fovx = 2 * atan(imageSize.width / (2 * K(0, 0))) * 180.0 / CV_PI;
fovy = 2 * atan(imageSize.height / (2 * K(1, 1))) * 180.0 / CV_PI;
fovx = atan2(K(0, 2), K(0, 0)) + atan2(imageSize.width - K(0, 2), K(0, 0));
fovy = atan2(K(1, 2), K(1, 1)) + atan2(imageSize.height - K(1, 2), K(1, 1));
fovx *= 180.0 / CV_PI;
fovy *= 180.0 / CV_PI;
/* Calculate focal length. */
focalLength = K(0, 0) / mx;

View File

@ -875,8 +875,8 @@ void CV_CalibrationMatrixValuesTest::run(int)
ny = goodAspectRatio;
}
goodFovx = 2 * atan( imageSize.width / (2 * fx)) * 180.0 / CV_PI;
goodFovy = 2 * atan( imageSize.height / (2 * fy)) * 180.0 / CV_PI;
goodFovx = (atan2(cx, fx) + atan2(imageSize.width - cx, fx)) * 180.0 / CV_PI;
goodFovy = (atan2(cy, fy) + atan2(imageSize.height - cy, fy)) * 180.0 / CV_PI;
goodFocalLength = fx / nx;