双目标定(三)标定流程(含矫正)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Kevin_cc98/article/details/80335508

1.原理

参见单目标定基本原理

2.采集

2.1标定板的制作
  • 大小:应当使得标定板在图像中占比尽可能大一些。占图像长度比例应当超过1/3;如果实在无法保证标定板占图像比例比较大如果占比比较小,则需要尽可能多采集一些图像。
  • 平:标定板应当尽可能使理想平面。如果要求不是非常严格(比如重投影误差0.3即可),也可以用纸板(一般的标定板厂商做得即为此类);如果标定精度要求比较高,则需要用硬度较高的材料做标定板,在该标定板上打印涂层形成标定板)
  • 其他:matlab工具箱的标定板要求是横纵格点数目一奇一偶。需要注意的是,“上下左右黑白相交”点才算格点,也就是最外侧的一条与标定板白色背景相交的那一条线上的点不算格点。
2.2标定图像数目

如果标定板占图像的长度比例大于1/2,则标定图像数目在10-20张为宜。否则,如果标定板在图像中比较小(比如双目基线超过1米时),则应继续增加标定图像张数到20张以上,以免标定板。

2.3标定板的位置
  • 条件1
    如果以后需要采集数据的物体在相机前5米左右,那么标定板也放在5米是最好的。如果相机本身比较好/贵,则相机在消除畸变等方面做得很好,则可以不用太在意这一条
  • 条件2:应该让标定板处在图像中不同位置,包括上下坐下,以及四角都有一定程度涵盖,最后所有标定板叠加,结果看起来整幅图主要部分都被标定板覆盖了,而不能仅仅覆盖图像左侧或右侧,或者看重左上部分而忽略右下部分。这样主要避免主点偏向一侧时,该侧没有足够数据支持相机畸变模型。
  • 条件3:拍照时应当让标定板完全静止,避免图片放大后细节处有模糊,或左右相机因为没有硬件同步而导致所采图像不一致。
标定板的摆放朝向

各个标定板采集图像应该代表不同平面,比如在一个位置时可以左右偏航,上下俯仰;保持标定板平面与相机成像平面有一定一定倾斜夹角,但不要超过45度,以免角点检测失败。

2.4采集环境

为了精确定位标定板的格点,采集现场不能过曝过暗。光线以柔和为主、避免阳光直射,避免光照角度单一造成标定板上形成镜面反射。

3.标定过程

相机模型以针孔相机模型为主,如果镜头焦距很小,如鱼眼相机或球面相机,则可以用球面相机模型(也可用opencv fisheye来进行标定)
以下以针孔相机模型举例:

3.1 opencv 标定

对于opencv,应该先进行左右相机的calibrateCamera单目标定,然后再进行stereoCalibrate双目标定;

3.2 matlab标定工具箱

matlab 2014以后集成了一个标定工具箱(并非某论文作者自己开发的matlab标定代码),兼有单目标定、双目标定、立体矫正的功能。
注意使用时,打开skew,切向畸变的开关。
此外,应该先进行左右相机的单目标定,得到各自内参值,并将该内参值作为双目标定的初始值传入。

将双目标定完成后,
应该进行检查

  • 重投影误差,这主要是单目标定情况
  • 矫正结果,比如应该水平的线条是否水平,以及标定板对应位置是否在同一水平线上。
  • 检查外参,特别是基线长度是否和重投影的一致

4.矫正

采集代码示例可参照opencv的sample,包含普通相机和鱼眼相机两种矫正模型(注意opencv 鱼眼相机标定函数有一定问题,在Ubuntu14.04上OpenCV2.4.11和3.4上测试得到的结果都是错的)。
经过双目矫正后,左右视图的内参数都为一样的,新的矫正左右视图的图像需要采用统一的内参数,即opencv stereoRectify()得到的P2的左上角的3x3矩阵。同时,如果矫正是水平对齐,则baseline数值是P2的右上角的数值(fxbaselinefx \cdot baseline)除以fx。(ORBSLAM等直接使用P2右上角的fx*baseline.

阅读更多

没有更多推荐了,返回首页