返回

一文图解单目相机标定算法

发布时间:2022-10-09 09:36:34 360
# 技术# 设备# 软件# 软件

有一天,蟹老板找底下的员工川建国同学:

 

一文图解单目相机标定算法_相机标定

一文图解单目相机标定算法_3d_02

一文图解单目相机标定算法_相机标定_03

一文图解单目相机标定算法_世界坐标系_04

一文图解单目相机标定算法_世界坐标系_05

一文图解单目相机标定算法_世界坐标系_06

等蟹老板走后,然后转头问旁边的学霸李雷同学:

一文图解单目相机标定算法_世界坐标系_07

一文图解单目相机标定算法_世界坐标系_08

一文图解单目相机标定算法_世界坐标系_09

李雷同学整理了下情绪:

一文图解单目相机标定算法_3d_10

 

 

有人反映哦,有时候我们发出来的技术贴太硬了,不方便去理解,于是,就有了上面这个尝试,在开始正课之前,我们先讲一段故事。如果大家觉得OK,后面我们将继续用这种方式来讲课,如果不OK,请大家在我们评论区提供您宝贵的意见。

 

这次单目相机标定教程,预计有三期,第一期讲单目相机成像过程,第二期讲MATALAB和OpenCV的单目相机标定实践,第三期则讲张正友标定法的原理。这里是3D视觉工坊嘉宾,Atlas博士生计算机视觉大讲堂,致力于把计算机视觉知识讲得不那么无趣!

 

01 什么是相机标定?

一文图解单目相机标定算法_3d_11

说到相机标定,就要先说什么是传感器的标定。我们知道,任何传感器,它都是存在有误差的,那么狭义上说,标定就是去校正这部分误差,让传感器尽量准确一点。我们来看相机标定前后输出图像的差别:

一文图解单目相机标定算法_相机标定_12

图1 相机标定前后输出图像的差别

有人说了,那为什么相机出厂前,它不提前做好标定呢?

一文图解单目相机标定算法_相机标定_13

李雷同学又鄙夷了一次建国同学:

一文图解单目相机标定算法_相机标定_14

一文图解单目相机标定算法_世界坐标系_15

出厂前相机标定,厂家想做(谁不想自己的传感器准一点呢),但这个真还不是厂家懒,它真做不了。因为相机要标定的参数,跟相机实际的光圈、焦距大小有关,而这两个参数,在一般的工业相机中都是可调节的,所以只能你自己来标定。

一文图解单目相机标定算法_世界坐标系_16

常见单目相机标定方法是张正友标定法,这在很多软件,比如说MATLAB、或者库OpenCV中都有相应的实现。至于相机标定,要标定哪些参数,先让我来和你说一下单目相机的成像模型。

一文图解单目相机标定算法_世界坐标系_17

哦,对了,要补充一点,我们常说的标定可不光光指纠正传感器的误差,当涉及到两个或者多个传感器的标定的时候,往往还包括计算出这些传感器间的相互位置关系。比如说在机器人系统里,我们经常需要在不同坐标系下转换位置关系,那么我们所说的一些标定还包括标定出这些关节、传感器之间的相互位置关系。再比如说我们双目相机的标定,就包括左相机、右相机的传感器误差标定,还包括它们之间相互位置关系的这么一个标定。

 

 

概括一下,常说的标定包括两部分内容:传感器误差的校正、传感器相互之间的位置关系。

 

一文图解单目相机标定算法_世界坐标系_18

而单目相机的标定主要指前者,传感器误差的校正,常用的方法是张正友标定法

一文图解单目相机标定算法_相机标定_19

一文图解单目相机标定算法_3d_20

 

02 理想单目相机成像模型

一文图解单目相机标定算法_3d_11

 

一文图解单目相机标定算法_世界坐标系_22

实际上,小孔成像的模型其实可以看作是针孔相机模型的基础:

一文图解单目相机标定算法_相机标定_23

图2 小孔成像模型

 

进一步地,针孔相机模型可以简化为下面这个模型:

一文图解单目相机标定算法_相机标定_24

图3 针孔相机模型(未翻转)

图中,P是物点, 是前者在CCD上成像的像点,而是相机的光心,则为成像平面到光心的距离,我们称之为焦距。

 

 

实际上,焦距的定义会更复杂,是所有平行光透过透镜汇聚一点,那一点到透镜光心的距离,它就涉及到摄影里非常专业的概念最小弥散圆了,我们之后会讲一期相机光圈、焦距、景深、视场大小、最佳成像距离的专栏。

 

 

这里先把模型简化一下吧,下面我们来讲整个成像过程,在相机成像模型中,主要有四大坐标系:世界坐标系相机坐标系图像坐标系像素坐标系。

一文图解单目相机标定算法_相机标定_25

图4 四大坐标系

其中:

 

 

世界坐标系(3D)世界坐标系就是以外界某个参考点建立的坐标系,单位为mm,或者m。

相机坐标系(3D):以光心建立相机坐标系,其中轴指向相机的正前方。

图像坐标系(2D):光心在成像平面的投影,也就是点建立另一坐标系,称为图像坐标系,单位为mm

像素坐标系(2D):像素坐标系是我们最终用户所看到的,也就是坐标系的原点在图像左上角,单位为像素。

 

 

那么这中间,我们怎么建立实际物理点(世界坐标系)到图像上点(像素坐标系)的一一映射呢?需要三步转换,也就是:

 

 

世界-> 相机 -> 图像 -> 像素

 

这中间,这些坐标系有什么差别,它们是怎么转换的?请看下面的文章。

2.1世界坐标系 -> 相机坐标系

我们知道,世界坐标系就是以外界某个参考点建立的坐标系,而相机坐标系则是以相机的光心作为坐标原点,光轴的正方向作为Z轴建立的坐标系,两者属于刚体变换,只需要进行旋转和平移,如下所示:

一文图解单目相机标定算法_相机标定_26

图5 世界坐标系到相机坐标系的转换

一文图解单目相机标定算法_相机标定_27

 

 

为了统一旋转和平移,我们将其写为齐次形式,至于为什么要用齐次,我们之后的栏目里也会说,总而言之是这样的。

 

2.2 相机坐标系 -> 图像坐标系

在完成了世界坐标系 -> 相机坐标系的转换后,我们再从相机坐标系 -> 图像坐标系。为了方便描述,我们将针孔相机模型对称翻转过来,如下图所示,从数学的角度,它们是等价的:

 

 

想不明白没关系,这里就算是不等价的,我们就假设相机的电子设备已经帮我们做好了这样一个翻转

 

一文图解单目相机标定算法_相机标定_28

图6 针孔相机模型(翻转)

先回顾一下前面所说的,如我们之前所说:P是物点、P’是像点,现在我们将它翻转过来了,记作小写的p。其中:

一文图解单目相机标定算法_世界坐标系_29

 

一文图解单目相机标定算法_相机标定_30

 

一文图解单目相机标定算法_相机标定_31

跟之前的公式统一一下,写为齐次形式:

一文图解单目相机标定算法_3d_32

 

  2.3 图像坐标系 -> 像素坐标系

 

图像坐标系中,坐标的原点在图像中间,而我们平时处理图像时用的坐标系,称为像素坐标系,坐标系的原点在图像的左上角,此外它们的度量单位也不同,前者的单位是mm,而后者的单位是像素。如下图所示,两个坐标系之间的差别:

一文图解单目相机标定算法_3d_33

一文图解单目相机标定算法_3d_34

图7 图像坐标系和像素坐标系的差别

 

一文图解单目相机标定算法_相机标定_35

 

 

CCD并不是一个正方形,dx、dy的大小是有所差别的

 

一文图解单目相机标定算法_3d_36

其进行移项,并写为齐次的形式,有:

一文图解单目相机标定算法_世界坐标系_37

2.4 汇总

总结一下之前所说的四大坐标系的关系:

一文图解单目相机标定算法_世界坐标系_38

图8 四大坐标系间关系

它们的公式如下:

1.世界坐标系->相机坐标系

 

一文图解单目相机标定算法_世界坐标系_39

2.相机坐标系->图像坐标系

一文图解单目相机标定算法_3d_40

3.图像坐标系->像素坐标系

一文图解单目相机标定算法_相机标定_41

那么将这些式子联立,最终得(你可以尝试自己去推导一下,就是几个式子代换一下):

一文图解单目相机标定算法_相机标定_42

进一步化简:

一文图解单目相机标定算法_世界坐标系_43

这个公式就是整个单目相机在理想情况下的成像公式,可以建立世界坐标系到像素坐标系的一一映射。

再补充一个知识点,归一化平面:

 

 

归一化平面,其实际是图像坐标系的等比缩放,也就是当f=1的情况,主要是便于公式推导,它与图像坐标系是等比缩放关系,只需要乘以f即可完成相互转换。

 

 

一文图解单目相机标定算法_相机标定_44

图9 图像坐标系与归一化平面关系

 

03 相机畸变

一文图解单目相机标定算法_3d_11

一文图解单目相机标定算法_世界坐标系_46

一文图解单目相机标定算法_3d_47

一文图解单目相机标定算法_世界坐标系_48

以上是理想情况下世界坐标系到像素坐标系的转换。而由于相机制造工艺的原因,其成像过程中难免存在着畸变,在后续构建精确的三维重建算法前,我们要对相机的畸变进行矫正,以提高算法重建的精度,这一步骤才称为相机标定。

一文图解单目相机标定算法_世界坐标系_49

一文图解单目相机标定算法_相机标定_50

3.1径向畸变

 

 

径向畸变原因:在相机制造过程中,很难保证镜头的厚度完全均匀,由于制造工艺的原因,通常为这种情况为中间厚、边缘薄,因而光线在远离透镜中心的地方,会发生更大程度的扭曲,这种现象在鱼眼相机(桶形畸变)中尤为明显。

 

径向畸变主要有两种类型:枕型畸变桶型畸变,示意图如下:

一文图解单目相机标定算法_3d_51

图10 相机径向畸变

 

一文图解单目相机标定算法_相机标定_52

一文图解单目相机标定算法_3d_53

 

 

需要注意的是,这里校正,并不是用的系数越多,整个矫正结果越精确,我们应该考虑相机的实际情况,选择合适的参数数量。

 

3.2切向畸变

 

 

切向畸变原因:切向畸变产生的原因在于相机在制造过程中,成像平面与透镜平面不平行,产生了透视变换。

 

一文图解单目相机标定算法_世界坐标系_54

图11 切向畸变

这种畸变可以由以下公式描述,它也与距离图像中心的距离半径有关:

一文图解单目相机标定算法_世界坐标系_55

一文图解单目相机标定算法_3d_56

3.3合并考虑

将径向畸变和切向畸变合并,只需要将两个畸变矫正直接加起来即可,公式如下:

一文图解单目相机标定算法_相机标定_57

一文图解单目相机标定算法_3d_58

 

 

合并考虑畸变原因:其实也很简单,两种畸变是同时发生在成像过程中的,发生的原因也是相互独立的,而且也都是关于距离的表达式,你似乎也找不到更好的方式来综合考虑这两种误差,实践证明,这种合并考虑畸变的情况效果还不错。

 

04 成像过程总结

一文图解单目相机标定算法_3d_11

我已经把所有需要记住的知识点汇聚在一张图片上了,请大家对照着前面的文章去理解:

一文图解单目相机标定算法_相机标定_25

一文图解单目相机标定算法_世界坐标系_38

一文图解单目相机标定算法_相机标定_62

 

05 思考问题

一文图解单目相机标定算法_3d_11

 

当看完这次推文之后,请大家在脑海里梳理以下几个概念:

  1. 世界坐标系、相机坐标系、图像坐标系、像素坐标系、归一化坐标系,它们之间的差别是什么,怎么进行相互转换?
  2. 径向畸变、切向畸变、它们的主要因素、以及如何去校正?
  3. 最好的话,你自己去画这个图,去推导一遍公式。虽然你后面公式会忘,但相信我,3D视觉领域好多公式,我不需要你记住它,但你要有个直觉印象,去推导一遍有助于你真正理解这个公式。

当明白了这些以后,下节课我们讲,怎么通过张正友标定法去获得要标定的参数,标定得来的参数怎么用,用MATALAB跟OpenCV分别去实践,不过在此之前,你要自己思考以下这些问题:

  1. 相机标定,我们究竟要标定那些参数?
  2. 相机畸变发生在四大坐标系转换的哪一过程?
  3. 假设我们拿到了这些参数怎么用?
  4. 对于每个物点,在像素坐标系下都有唯一像点与之对应,那么反过来是否成立?
  5. 怎么去评判标定的好不好?

大家还想要我们讲什么呢?请踊跃留言!高能预警,下节课我们将以视频的形式来讲解。不过,如果你没有好好看这个相机成像过程的文章,下节课我讲的再有趣也是白扯~这里是3D视觉工坊嘉宾,Atlas博士计算机视觉大讲堂,致力于把计算机视觉知识讲得不那么无趣!

 

准确说,Atlas今年博一,应该讲博士生~

当然啊,之后包括多个传感器的时间戳同步、怎么去做融合,这些在我们后续的教程中都会讲,请关注我们的公众号《3D视觉工坊》。我相信,未来视觉领域,一定是3D视觉的世界,如果你可以从头到尾完整地跟完我们整个课程,并且掌握的话,在硕士期间,再尽量去找一些实习,如果你打算从事3D视觉领域,我相信一定会收到一份不错的offer的。

本文仅做学术分享,如有侵权,请联系删文。

 

一文图解单目相机标定算法_3d_64

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
php截取字符串中的一部分 2022-10-09 09:26:08