I´m doing my camera calibration using the Caltech Toolbox http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html and I´m not quite sure about the quality of my results. I had around 40 images in the beginning and dropped around 10 during the calibration due to large reprojection errors. I mounted the camera on a tripod and placed the checkerboard somewhere to avoid motion blur. I fixed the focal length to max.
The reprojection error looks fine I guess, but the uncertainties in the focal length, principal point and distortion are giving me a headache. Although the uncertainties given should refer to 3 times the standard deviation and therefore cover possible deviations with 99% (assuming a normal distribution), my results vary more than that. Here is what I get from the calibration:
1st attempt:
Focal Length: fc = [ 952.67300 952.58901 ] ± [ 3.18678 3.24121 ]
Principal point: cc = [ 641.33128 339.39042 ] ± [ 2.07428 2.53779 ]
kc = [ 0.16627 -0.28830 -0.00118 -0.00074 0.00000 ] ± [ 0.00554 0.00979 0.00093 0.00076 0.00000 ]
2nd attempt:
Focal Length: fc_left = [ 949.92127 946.43747 ] ± [ 4.75903 4.44547 ]
Principal point: cc_left = [ 642.39817 345.69787 ] ± [ 2.95598 4.19728 ]
kc = [ 0.13925 -0.23895 0.00141 -0.00062 0.00000 ] ± [ 0.00319 0.00490 0.00054 0.00041 0.00000 ]
3rd attempt:
Focal Length: fc = [ 949.55376 948.31960 ] ± [ 1.87647 1.73045 ]
Principal point: cc = [ 644.32264 342.15631 ± [ 1.19304 1.89943 ]
Distortion
kc = [ 0.15587 -0.26060 -0.00010 0.00018 0.00000 ] ± [ 0.00350 0.00612 0.00061 0.00044 0.00000 ]
The pixel error was for all three attempt roughly the same:
err = [ 0.24621 0.18013 ] (unfortunately I didn´t save the results)
My questions are:
What can I do to improve my results?
What is in general the best I can expect from the calibration (What should be the maximum uncertainty/reprojection error for a good calibration)?
Thanks!
I think your calibration looks good. It is normal that the focal length varies.
You can try to set the tangential distortion to zero. This is the usual case in contemporary cameras. There is even a calibration flag for that case CV_CALIB_ZERO_TANGENT_DIST.
In case you have a high-end camera and optics, you can place the principle point at the very center. For that you can use the flag CV_CALIB_FIX_PRINCIPAL_POINT. If I remember right, it's values are taken from the passed intrinsic parameters matrix.
In general, you get more accurate results when using a 3D calibration object instead of the planar checkerboard.