Ask Your Question

Revision history [back]

There is at least a problem with your intrinsic calibration. Two of your entries are exactly zero which looks suspicious. The problem here is the flag you pass to calibrateCamera. You pass 'CALIB_CB_FAST_CHECK' which is a flag for the checkerboard detection. It's value is 8 (http://docs.opencv.org/trunk/d9/d0c/group__calib3d.html#gsc.tab=0). calibrateCamera however only expects values that are listed here: http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

In the list we find

cv::CALIB_ZERO_TANGENT_DIST = 0x00008, which forces your tangential distortion (the second and third entry (your zeros)) to zero.

Could you rerun the intrinsic calibration without this flag? This should decrease the calibration's RMSE and maybe also improve your final result.

BTW: It's great that you put that much information into the question! This helps a lot to find such a subtle bug.

There is at least a problem with your intrinsic calibration. Two of your entries are exactly zero which looks suspicious. The problem here is the flag you pass to calibrateCamera. You pass 'CALIB_CB_FAST_CHECK' which is a flag for the checkerboard detection. It's value is 8 (http://docs.opencv.org/trunk/d9/d0c/group__calib3d.html#gsc.tab=0). calibrateCamera however only expects values that are listed here: http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

In the list we find

cv::CALIB_ZERO_TANGENT_DIST = 0x00008, 0x00008,

which forces your tangential distortion (the second and third entry (your zeros)) to zero.

Could you rerun the intrinsic calibration without this flag? This should decrease the calibration's RMSE and maybe also improve your final result.

BTW: It's great that you put that much information into the question! This helps a lot to find such a subtle bug.

There is at least a problem with your intrinsic calibration. Two of your entries are exactly zero which looks suspicious. The problem here is the flag you pass to calibrateCamera. You pass 'CALIB_CB_FAST_CHECK' which is a flag for the checkerboard detection. It's value is 8 (http://docs.opencv.org/trunk/d9/d0c/group__calib3d.html#gsc.tab=0). calibrateCamera however only expects values that are listed here: http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

In the list we find

cv::CALIB_ZERO_TANGENT_DIST = 0x00008,

which forces your tangential distortion (the second and third entry (your zeros)) to zero.

Could you rerun the intrinsic calibration without this flag? This should decrease the calibration's RMSE and maybe also improve your final result.

BTW: It's great that you put that much information into the question! This helps a lot to find such a subtle bug.

You should also have a look at your stereoCalibrate-Flags. You again pass only 'CV_CALIB_FIX_INTRINSIC' so that you re-estimate your intrinsic calibration (I assume that you use cv::stereoCalibrate). As you already know your intrinsic calibration, just pass 'CV_CALIB_FIX_INTRINSIC' to only estimate relative pose of the cameras. I guess you use a lot less images for that so that your estimate for the intrinsics are really bad.