相机标定
概念介绍
相机标定一方面是为了确定相机内参(主要是焦距和光心偏移大小),另一方面就是为了最大程度减小成像畸变带来的影响。另外,由于镜头安装的时候无法保证机械位置完全对齐,这都是标定需要考虑的问题。
对于小孔成像模型,影响最显著的两种畸变是桶形畸变和切向畸变,由于透镜制作工艺不能保证边缘的光线平行进光轴进入后仍然射向焦点,因此产生桶形畸变
径向畸变以某一个中心往外延伸,距离此位置越远,畸变越大两者呈复杂的非线性关系
与之对应的是凹透镜成像的时候出现的枕形畸变,三种图像拍摄棋盘格得到的图像如下(完美透镜 - 桶形畸变 - 枕形畸变):
眼镜和相机镜头里会有“非球面镜”,这种技术就是通过改变镜片边缘材料的折射率或通过特殊的光学造型减少离光心较远的位置的畸变。对于凹透镜就是上图中的枕形畸变
切向畸变则指的是下面这种情况,由于贴装工艺问题,感光芯片在封装时可能无法和镜头平行放置,导致成像畸变的发生
这种畸变就导致图像上的不同处与真实物体无法满足简单的投影关系,而将与CMOS贴装的倾斜程度有关
最后,由于安装误差,可能导致镜头的光心和CMOS的中心点没有对齐,因此还需要确定两者偏移的距离。相机安装时的歪斜统一计入前述的切向畸变中。
提示
鱼眼相机、360°相机还有一些特殊相机的成像模型不如小孔那么简单,在全向感知模块上可能会使用这些相机。当然现在也有大量的投影模型被提出用于标定,不作具体介绍
标定的目的
虽然上面提到的这些畸变对人眼查看图像影响不大,但是对于计算机视觉任务来说,直线不直、距离不准等情况会导致非常大的误差,所以要通过相机标定这一流程使图片尽量接近完美透镜成像的效果,以提高计算结果的精度
说明
哪怕同款相机镜头,由于装配过程中必定有个体误差,所以都要单独进行标定。而且由于各种原因镜片可能有微小移动或形变,同一个相机、镜头的参数也会变化
操作流程
可以使用OpenCV的例程来完成这一步骤,参见:OpenCV相机标定完全指南
说明
文中作者说链接后续补充,但是过了两年多还没有更新……所以这里给出获取方式:
使用git直接clonehttps://gitee.com/opencv/opencv.git
这个仓库到合适的目录
文中提到的samples/cpp/example_cmake/CMakeLists.txt
和samples/cpp/tutorial_code/calib3d/camera_calibration
都在这里
任务
拓展
如果想要了解更多关于标定的内容,如鱼眼相机标定、双目相机标定、多传感器联合标定等,可以参考这篇文章