• [二维成像与三维重建]系列(5) 相机标定怎么搞


    关键词:相机标定 棋盘格标定板 张氏标定法 标定的核心原理 作者:李二 日期:01/04/2020 - 03/04/2020

    如往常一样,若本文有任何不足或不正确之处,烦请各位大佬批评指正。

    前面花了很大的力气讲成像几何(重点是内外参数)以及图像畸变(重点是畸变参数),其实这些都是三维空间点投影到二维像元点这一变换(专业术语是射影变换)或其逆变换--由二维像元恢复三维点中的重要参数。

    嗨,这么说吧,只要是知道了这些参数的值,二维三维、畸变无畸变,想怎么玩就怎么玩,想干点啥就能干点啥。千言万语不及一图:

    相机标定的用途,包括但不限于这些
    相机标定的用途,包括但不限于这些

    咱们继续回到讲故事模式!自今年新型冠状病毒(coronavirus-2019)爆发以来,咱们政府以百度超级会员下载速度之势在全国范围内执行了公共卫生干预措施,要求大家居家减少外出。李二当然极力拥护这一英明决策,于是便天天窝在家里阳台上,干一些无聊的事,此处暂且不表。

    1. 什么是相机标定

    某日,李二接到他一朋友吴脑的电话,吴脑开了一家名为“达沙冒”的小型公司,也不哪里淘换了很多廉价相机或摄像头(三无产品:无焦距规格,无传感器尺寸规格、无专业生产厂家,哈哈),说要专门给人做一些三维重建的工作,但是发现图像畸变很厉害,想让李二帮忙指导一下具体怎么去图像畸变,弄好之后请吃“长安葫芦鸡”。

    (推荐长安大排档著名小吃:长安葫芦鸡)

    李二正愁闲的无聊,又一听有鸡吃,顿时来了精神头:好没问题,不过只能远程指导啦。你这些破相机镜头太差,又是三无产品,必须好好做一番相机标定。

    (诸位看官,其实很多好相机也需要做相机标定,只不过需求没有那么迫切。不过对于视场角比较大的相机,需求也是迫切的哦)

    有志做机器视觉、机器人、甚至任何图像处理方向(包括咱们地面-近地面-航空遥感哦,卫星的成像传感器类型不同,暂且不表)的同仁们,要仔细看看喽,这是实操部分。
    

    吴脑问道:啥是相机标定?我读书少,你可得给我讲清楚点!

    李二悠然道:我就喜欢给比我读书少的人讲。

    相机标定 camera calibration就是求解成像参数(包括内参、外参、畸变参数)的过程。说白了就是相机参数的求解。这些参数在李二的阳台博客前几期中讲的很清楚了,吴脑你回头仔细看看就行了。不过我先强调一下:相机标定是关键环节(那是相...当...的关键),标定结果的精度及算法的稳定性直接影响用该相机产生结果的准确性。

    虽然说相机标定是求解内参、外参、畸变参数,但是你想一下,求解出来的外参是不是没啥用? 外参是相机的位姿参数(位置 和姿态 ),你整天拿着相机瞎晃荡,外参一直变呀,所以即使求解出来,也没有用;除非相机固定死在某个位置,不再动它了,这是求解的外参还是有用的。因此,我们虽说通过标定过程可以同时将内外参和畸变参数都求解出来,但是一般只使用内参、畸变参数:

    你随便拿一个相机,我一步一步远程指挥你操作吧。

    2. 相机标定的核心原理

    诸位看官,说实话,我也不懂相机标定的具体数学求解方法,毕竟不是专业做这个的,个人觉得仅知道数学流程和实际操作即可。
    

    虽说李二不打算跟吴脑讲原理,但是我觉得还是有必要让诸位看官了解一下。

    我们把上一期讲到的畸变公式和上上一期讲到的总体变换矩阵联合起来,即构建三维空间到到二维畸变图像像元点的变换: 这里的 代表了畸变图像和消畸变图像之间的变换(顺便提一句,上一期所讲畸变公式,其实是所谓的Brown畸变校正模型)

    如果我们能够找出非常多具有对应关系的三维物点 畸变后像点 ,就通过某种优化方法求解出以上公式包含的内参、外参、畸变参数,就完成了相机标定。

    因此解决相机标定问题的要素在于三点:

      1. 如何建立物点与像点的一一对应关系?即需要找到物点对应的像点,考虑到关键点相对容易识别,因此需要一个关键点检测算法
      1. 如何表示物点的位置?三维空间的坐标系各种各样,有没有最方便的方法表示物点的位置,因此需要下一节介绍的标定板,构成标定板坐标系
      1. 如何实现标定参数的求解?即优化问题,解决优化问题有非常多方法,诸如最小二乘,极大似然估计等。

    那么实现以上1-2点的最方便的方式是,标定板!!!

    用相机拍摄标定板,并构建物点与像点关系的示意图(看这个图,去理解上式)
    用相机拍摄标定板,并构建物点与像点关系的示意图(看这个图,去理解上式)

    3. 如何进行相机标定

    李二提高了嗓门:吴脑,你需要准备的材料有:(1)待标定相机、(2)电脑、(3)标定图片(电脑)或标定板、(4)直尺。

    吴脑一看东西这么少,非常高兴:行。那我准备出来之后,就先走了,我还要接孩子去。

    李二被气的不轻:F**k,你走了?你不在,谁操作呀。真不愧你这名字。

    吴脑慌忙辩解道:哎呀,你说只需要准备那四样材料的。

    我们继续看一下标定方法的大名,以后告诉客户你用的**方法,客户听不懂,好忽悠他们呀。

    方法的大名:张正友相机标定法

    张正友博士于1998年提出的基于单平面棋盘格的相机标定方法。传统标定法(如Tsai法)的标定板为三维的,且要求非常精确(垂直)。张正友博士的方法克服了传统标定法需要的高精度标定物的缺点,仅需一个打印出来或显示在显示器上的棋盘格就可以。因此张氏标定法被广泛应用于相机的标定中。

    不过,张氏标定法有个缺憾,即只考虑了径向畸变,没有考虑切向畸变

    棋盘格示例
    棋盘格示例

    吴脑突然不糊涂起来,便问:这个标定板目的标定相机,但是怎么发挥作用呢?而且为什么标定板长这样?

    李二:超级好问题!

    • 标定板为什么长这样:这是因为要考虑透视不变性。标定板中设置了拓扑结构(了解拓扑),广泛应用的是棋盘格圆点格,这两种之所以成为主流,不仅是因为它们的拓扑结构明确且均匀,更重要的是检测其拓扑结构的算法简单且有效
    • 棋盘格检测的是角点,只需要对拍摄到的棋盘格图像在横纵两个方向计算梯度就可获得;
    • 圆点格检测的是质心,只需要对拍摄到的圆点格图样计算质心即可。 据说圆点格的效果应该是好于棋盘格,因为圆点质心的透视不变性要比棋盘格的角点稳定的多。但是但是圆点格的检测似乎是Halcon的专利(存疑),因此OpenCV和Matlab标定工具箱用的是棋盘格。援引知乎许翔翔的学习笔记
    • 标定板怎么发挥作用:非常容易地确定物点和像点的对应性。标定板本身可以形成一个局部三维空间坐标系,只不过始终为0。标定板中每个角点的坐标在标定板坐标系下都很容易知道,假设是吧。像点的坐标则可以由角点(棋盘格)或质心(圆点格)检测算法准确得到,这样就构建了三维空间点与二维像元点之间的对应关系,就可以根据第二节中的公式求解参数了。

    (诸位看官,以上两条请重点理解一下)

    吴脑此时有点懵之痴痴(改自氓之蚩蚩)的样子:我就随便一问,你看你讲了一大堆,直接说具体怎么做吧。

    李二一看表,哎呀,一会得出去买菜去,便立刻加快了语速:

    1. 你下载好棋盘格图片之后,在电脑上全屏显示出来。相机在不同位置、不同角度、不同姿态下拍摄这个显示出来的棋盘格图片,最少需要拍3张,最好拍10~20张。

    注意:(1)拍摄时每幅图像要全部包含整个棋盘格图片;(2)用直尺量取棋盘格图片中单个格子的尺寸,如35mm。

    1. 电脑上装MATLAB,这一软件适用于“傻瓜型选手”(比如吴脑)。在Apps中的image process and computer vision模块中选择camera calibrator工具并打开,然后点击add images加载所有拍摄的棋盘格图像,并在checkerboard square size窗口输入棋盘格每格尺寸大小(如35mm)
    2. 显示已检测出的棋盘格,可在distortion coefficients栏中选择校正参数数量与类型。点击Calibrate,开始标定。 4.很快就自动得到了标定结果。可点击export camera parameters导出标定参数。同时我们也可以输出畸变校正好之后的图像了。

    (MATLAB操作最为简单,只是安装需要liciense且麻烦,建议搞遥感的人直接用MATLAB就行)

    李二本就着急,这是吴脑又来问题了问题:确实挺简单的,不过我的相机虽说廉价,但是也有变焦镜头,有的也能改变光圈大小。要是我把某个相机在某个焦距下标定好,换个焦距还需要重新标定吗?或者在某个光圈大小下标定好,换个光圈大小需要重新标定吗?

    必须需要!李二急忙答到。

    • 焦距变了,相机的内参数就变了,同时畸变参数也会有变化(参考上一期讲解);
    • 光圈变了,虽然内参数不变,但是畸变参数有变换(参考上一期讲解)。

    就是这样,这其实也是所有的内容了。不聊了,着急买菜去了。


    标定方法的补充 李二买完菜后突然想起来,目前相机标定也不一定非得用以上介绍的棋盘格标定板方式进行标定。因为在第二节中提到了,只要得到大量的一一对应的物点和像点就行,只不过一般情况下,物点的三维空间坐标往往不好获取罢了。

    因此,只要有办法容易获取大量的一一对应的物点和像点,就能实现标定。大家目前可能会采用一些基于图像的三维重建软件诸如Agisoft PhotoScan,可以通过图像序列重建出三维点云(方法为运动恢复结构 structure-from motion (SfM)具体方法我们会在本系列的第二部分介绍,这里先用一下),通过SfM算法获取的三维点云可以实现物点与像点的一一对应,因此其实在SfM过程中,也对相机的标定参数进行了求解。

    具体方法是:三维稀疏点云重建完成后,选择File中的Export中的Undistort Photos...,即可导出畸变校正后的影像。另外,打开Tools中的Camera Calibration,可以在Adjusted状态栏中查看内参和畸变参数。

    4. 相机标定vs相机定标

    专门开辟一小节,给植被遥感的看官们,以表达对各位的偏爱哦。
    

    定量遥感中,我们往往会出现一个词,叫相机定标,这很容易与本文的主题相机标定搞混,在此区别一下:

    • 相机标定:严格上说叫相机几何标定 geometric camera calibration (camera resectioning),指的是求解相机的内参和畸变参数。
    • 相机定标:严格上说叫相机辐射定标 radiometric calibration,指的是将相机图像的DN值校正到辐亮度反射率。具体方法,我会在以后的无人机定量遥感系列博客中介绍(先挖个大坑,慢慢填)。

    5. 拓展参考文献

    对于相机标定异常有兴趣的同学们,可以参考下面的文献,摘自MATLAB帮助手册(点击)。反正我不是专门研究这个的,咱也没看,估计咱这智商,也看不懂这文献啦。

    (哈哈,其实也没那么难,我大体能看懂张正友博士的文章,中文的话,可移步至知乎Encoder的回答

    • Zhang, Z. “A Flexible New Technique for Camera Calibration.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 22, No. 11, 2000, pp. 1330–1334.

    • Heikkila, J., and O. Silven. “A Four-step Camera Calibration Procedure with Implicit Image Correction.” IEEE International Conference on Computer Vision and Pattern Recognition.1997.

    • Bouguet, J. Y. “Camera Calibration Toolbox for Matlab.” Computational Vision at the California Institute of Technology. Camera Calibration Toolbox for MATLAB.

    • 图像畸变校正的知识与opencv中的流程(点击)

    6. 后记

    行文至此,本系列中的第一部分-二维成像的基本理论和实操就全部讲完了。第二部分-三维重建重头戏,李二需要花极大的经历确保掌握每个知识点,然后尽力通俗的讲给各位看官们。正好比“沉舟侧畔千帆过,好了伤疤忘了疼”!

    邻近毕业,毕业论文修改与答辩的压力比较大,李二的写作速度估计比较慢,望各位见谅。
    

    d

  • 相关阅读:
    P1903 [国家集训队]数颜色 / 维护队列 莫对算法
    P1016 旅行家的预算 模拟 贪心
    P3948 数据结构 差分数组
    乘法逆元 模板
    二分法 最大化平均值
    HDU5213 Lucky 莫队算法 容斥定理
    P1083 借教室 差分数组
    发布订阅、redis的配置文件、redis的主从、redis的持久化、
    nosql、redis、性能测试、命令相关、redis的数据类型string、list、hash、set、zset、
    nginx的日志、禁止访问、反向代理、权重、nginx location匹配规则、location分离、WSGI、
  • 原文地址:https://www.cnblogs.com/ludwig1860/p/12626245.html
Copyright © 2020-2023  润新知