一直在使用ROS的camera_calibration进行単目和双目的相机标定,但是从来没有关心过具体实现,我所知到的仅限于camera_calibration后端也是使用的OpenCV进行的标定运算。今日直接使用OpenCV进行相机标定时,发生了一些奇怪的现象,但是这些现象在使用camera_calibration时从未遇见过,看来其鲁棒性是不错的,所以今天打算阅读一下源码学习一下。
以下是我个人的笔记,并不最求全面,而是针对我个人的经验而记录的。主要记录源码中和我平时的用法不同或者我个人感觉源码处理恰当的部分。
源码
源码从ROS image_pipeline的git repo获取。我指定的是melodic branch. Commit hash 是 71900fa。
入口:/nodes/cameracalibrator.py
main()
函数中明确指定当distortion标定的参数数量超过3个时,也就是出现k3及以上需要标定的参数时,需要明确指定cv2.CALIB_RATIONAL_MODEL
. 有关OpenCV所用的distortion model,参考这里(当然这个是OpenCV2.4的documentation,但是基本定义在新版本应该是没有变化的)。
默认使用cv2.CALIB_CB_FAST_CHECK
。