ORB_SLAM2中标定数据的问题
在使用ORB_SLAM2的过程中,我使用Kinect
v2作为摄像机,而在使用之前需要对Kinect进行标定的工作。幸好iai_kinect2这个驱动提供了标定的工具1。按照说明操作,获得了标定的数据,如calib_color.yaml
文件中包含了摄像机的内参和畸变等参数:
1 | %YAML:1.0 |
然后根据下式,提取上面的数据,填到ORB_SLAM2定义的校正参数yaml文件中2:
cameraMatrix:
\[\left[ {\begin{array}{*{20}{c}} {f_x}&0&{c_x}\\ 0&{f_y}&{c_y}\\ 0&0&1 \end{array}} \right]\]
distortionCoefficients:
\[\left[ {\begin{array}{*{20}{c}} {k_1}&{k_2}&{p_1}&{p_2}&{k_3} \end{array}} \right]\]
然后yaml文件内容如下:
1 | %YAML:1.0 |
在解决了双重标定的问题后3,我使用qhd质量(960x540)的图片跑ORB_SLAM2程序,发现无论是单目模式还是RGBD模式的结果都不堪理想。经过排查后,发现还是标定数据的问题。
在iai_kinect2的标定程序中,使用的FullHD(1920x1080)分辨率图片,所以得到的计算机内参数据是针对1920x1080这个分辨率的;而我在ORB_SLAM2中,使用的是QHD(960x540)分辨率的图片。为了使用标定数据与使用照片对应,需要对1920x1080下的标定数据作出处理,对内参数据根据分辨率按比例进行缩减4,在这里,需要对\(f_x\), \(f_y\), \(c_x\), \(c_y\)的值乘以一个0.5。
最终yaml文件内容如下:
1 | %YAML:1.0 |
重新运行ORB_SLAM2,问题解决。
https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration↩︎
http://www.jianshu.com/p/c3e8c88edb64↩︎
http://luohanjie.com/2017-03-30/dual-calibration-problem-in-orb-slam2-and-iai-kinect2.html↩︎
http://dsp.stackexchange.com/questions/6055/how-does-resizing-an-image-affect-the-intrinsic-camera-matrix/6057#6057↩︎