From 3517be757be028aec849b747b45385d5d6e39224 Mon Sep 17 00:00:00 2001 From: Ilya Lysenkov Date: Mon, 26 Mar 2012 13:07:21 +0000 Subject: [PATCH] Added checking whether aspect ratio is valid or not --- modules/calib3d/src/calibration.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/calib3d/src/calibration.cpp b/modules/calib3d/src/calibration.cpp index 7f84eab..495cc8c 100644 --- a/modules/calib3d/src/calibration.cpp +++ b/modules/calib3d/src/calibration.cpp @@ -1548,6 +1548,8 @@ CV_IMPL double cvCalibrateCamera2( const CvMat* objectPoints, flags |= CV_CALIB_FIX_K3; flags |= CV_CALIB_FIX_K4 | CV_CALIB_FIX_K5 | CV_CALIB_FIX_K6; } + const double minValidAspectRatio = 0.01; + const double maxValidAspectRatio = 100.0; // 1. initialize intrinsic parameters & LM solver if( flags & CV_CALIB_USE_INTRINSIC_GUESS ) @@ -1568,7 +1570,13 @@ CV_IMPL double cvCalibrateCamera2( const CvMat* objectPoints, A[8] = 1.; if( flags & CV_CALIB_FIX_ASPECT_RATIO ) + { aspectRatio = A[0]/A[4]; + + if( aspectRatio < minValidAspectRatio || aspectRatio > maxValidAspectRatio ) + CV_Error( CV_StsOutOfRange, + "The specified aspect ratio (= cameraMatrix[0][0] / cameraMatrix[1][1]) is incorrect" ); + } cvConvert( distCoeffs, &_k ); } else @@ -1585,9 +1593,9 @@ CV_IMPL double cvCalibrateCamera2( const CvMat* objectPoints, { aspectRatio = cvmGet(cameraMatrix,0,0); aspectRatio /= cvmGet(cameraMatrix,1,1); - if( aspectRatio < 0.01 || aspectRatio > 100 ) + if( aspectRatio < minValidAspectRatio || aspectRatio > maxValidAspectRatio ) CV_Error( CV_StsOutOfRange, - "The specified aspect ratio (=A[0][0]/A[1][1]) is incorrect" ); + "The specified aspect ratio (= cameraMatrix[0][0] / cameraMatrix[1][1]) is incorrect" ); } cvInitIntrinsicParams2D( matM, _m, npoints, imageSize, &matA, aspectRatio ); } -- 2.7.4