用matlab标定相机参数,并应用于opencv以提高精度
opencv的相机标定,每张图片的误差显示不出来,但是matlab比较清晰,有每张图片的矫正结果、误差、相机位姿等显式的结果,而且结果往往比opencv的例程更可靠一点,因此,如果需要提高精度,可以选择用matlab进行标定,并将参数转换为opencv能用的格式(intrinsics.yml,extrinsics.yml),下面比较matlab和opencv的立体相机参数。
left和right情况
matlab标定情况
opencv标定情况
Stereo_calib_and_depth-master/stereo_depth/build/imgCalib/merge$ ../../stereo_calib -w=9 -h=6 -s=45 ./stereo_calib.xml
....................................................................................................................................62 pairs have been successfully detected.
Running stereo calibration ...
done with RMS error=2.54013
average epipolar err = 0.980864
接下来一个一个比较。
相机1内参焦距偏移,不用变
相机1内参畸变,两者之间参考意义不大
相机2内参焦距偏移,不用变
相机2内参畸变,两者之间参考意义不大
相机的外参:旋转矩阵不用转置,平移不用加负号。
以下是left和right相反的情况。
我用同样的62对图片校正后的结果,opencv误差2个像素,matlab误差0.02个像素。
Stereo_calib_and_depth-master/stereo_depth/build/data1$ ../stereo_calib -w=9 -h=6 -s=45 ./stereo_calib.xml
...................................................................................................................................62 pairs have been successfully detected.
Running stereo calibration ...
done with RMS error=2.54797
average epipolar err = 0.9931
相机1的内参:下两图证明焦距偏移不用转置,畸变随意
相机1的内参:畸变很不一样,不能相互借鉴。
相机2的内参:下两图证明焦距偏移不用转置,畸变随意
相机2的内参:畸变很不一样,不能相互借鉴。
相机的外参:旋转矩阵不用转置,平移不用加负号。
总结就是啥都不同变。参数交换效果不好就是matlab和opencv的计算逻辑不一样,选一个一直用就行,不要交叉。