fisheye::undistortPoints: sanitize theta values

the current camera model is only valid up to 180° FOV for larger FOV the
undistort loop does not converge.
Clip values so we still get plausible results for super fisheye images >
180°.
This commit is contained in:
Pavel Rojtberg 2016-12-06 14:16:37 +01:00
parent 37cbcf024c
commit 2bfcbe1459

View File

@ -377,6 +377,12 @@ void cv::fisheye::undistortPoints( InputArray distorted, OutputArray undistorted
double scale = 1.0;
double theta_d = sqrt(pw[0]*pw[0] + pw[1]*pw[1]);
// the current camera model is only valid up to 180° FOV
// for larger FOV the loop below does not converge
// clip values so we still get plausible results for super fisheye images > 180°
theta_d = min(max(-CV_PI/2., theta_d), CV_PI/2.);
if (theta_d > 1e-8)
{
// compensate distortion iteratively