From 3517be757be028aec849b747b45385d5d6e39224 Mon Sep 17 00:00:00 2001
From: Ilya Lysenkov <no@email>
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 7f84eabd5..495cc8c10 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 );
     }