matlab和opencv在双目标定参数之间的关系,不用转置和加负号
用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的计算逻辑不一样,选一个一直用就行,不要交叉。
