《Learning OpenCV3》ch18:相机模型与标定

省赛期间用到双目视觉的时候,只是很粗浅地调用了下API,毕竟初学而且时间紧迫。最近打算跟一个硕士生再做一个相关项目,而且也想用Stereo Vision作为毕业设计,所以很有必要了解一下其中的原理。最近也在看《学习OpenCV3》这本书,里面对一些原理的阐述简明易懂,实为神书。虽然不算深入,不过也足够理解算法里面的主要思想了。所以也算是做个读书笔记吧。废话不说,开车!


封面

相机模型

针孔摄像机模型是一种简单而有用的模型,能够一定程度解释光线从物体发射到视网膜或图像采集器的几何过程。其中焦距 f 在针孔摄像机模型中,是指针孔到图像平面的距离(这里指的并不是摄像头中2.0mm,2.5mm这样的表示透镜属性的“焦距”)。Z是物体到投影中心(针孔)的距离,X是物体的长度,x是图像平面上物体的长度。由相似三角形可以得到这样的结论。

公式

针孔摄像机模型

真实的针孔由于不能快速曝光收集足够的光线,所以并不是一个得到图像的好办法。这也是为什么眼睛和相机都要使用透镜这样的结构来收集光线。

我们可以简化这个模型。将图像平面放在针孔前面,针孔被理解为投影中心。光轴(Optical axis)与图像平面的较为称为主点(principal point)。这样的话图像的大小不变,而且映射的图像不会反转(回忆一下高中物理和大学物理),公式中的符号去掉了。


简化模型

当然这是一个很理想的模型。实际上的模型由于工艺的影响,应该写成这样的形式

理想是美好的,现实是残酷的

其中受到了两方面的影响:

  • 成像装置(CMOS芯片)的中心通常不在光轴上,所以有了cx和cy两个参数,对投影屏幕坐标中心可能的偏移进行建模

  • 透镜物理焦距的偏差,导致像素是矩形的而不是正方形的。fx 实际上是指透镜在x轴上的物理焦距和成像装置每个尺寸单元 sx 的乘积。

射影几何

将物理世界中的坐标映射到投影平面上的点的过程成为“射影变换”。这样可以用齐次坐标来表示投影平面上的二维点。将相机的参数组成一个矩阵,称为“内参矩阵”。于是有以下的形式:

M为内参矩阵,q为二维点的齐次坐标形式

实际的x’ = x/w,y‘类似。Q为物理世界坐标

前面讲到,针孔摄像机不能收集到足够的光线。为了能快速地生成图像,我们使用了透镜,让光线弯曲到一个点上,但代价就是带来了畸变。

Rodrigues变换

在三维空间操作时,一般使用旋转矩阵来表示空间的旋转。关于旋转矩阵更多的内容下文会给出。将矩阵乘以一个向量,就相当于将向量以某种方式旋转,但旋转矩阵的缺点就是很难直观理解各个轴旋转的角度。所以Rodrigues提出了以下公式来进行转换,这里不加推导地给出来

设旋转向量为


旋转向量,模设为θ

那么旋转向量到旋转矩阵的变换为


r->R

反之则有
R->r

透镜畸变

畸变分为两种,径向畸变切向畸变。径向畸变是指成像装置边缘附近的畸变,远离透镜中心的光纤比透镜中心的光线更加弯曲,如图所示。

径向畸变

边缘部分畸变程度比较大

对于径向畸变,可以使用光学中心附近(即r=0)的泰勒级数的前几项来描述。一般使用前两项,鱼眼透镜则可以使用三个径向畸变项。

x轴方向
y轴方向

切向畸变则是由于制造上的缺陷使透镜不与成像平面平行而产生的,如图


切向畸变

这里不加推导地给出下面的公式,具体参考“铅锤”模型

矫正公式

旋转矩阵和平移向量

可以用旋转和平移来描述物体相对于相机坐标系统的相对姿态


旋转+平移

任何维数的旋转都可以描述为坐标向量和适当尺寸的方阵的乘积。将坐标系统旋转θ相当于将目标点绕原来的坐标轴反方向旋转θ。其中,三维物体的旋转可以分解为围绕每个轴的二维旋转。将三位物体按照某个轴旋转的旋转矩阵如下


依次绕xyz轴旋转ψ 、φ、θ

那么相乘就有
三维的旋转矩阵

平移向量用来表示如何将一个坐标系统移动到另一个坐标系统。换句话说,平移向量是第一个坐标系统的远点到第二个坐标系统的偏移量。


平移向量

那么物体坐标系映射到相机坐标系中的坐标的公式为
R就是上面的旋转矩阵

标定板

没啥好说的,略


标定板

单应性

之前在做全景图像拼接的时候用到过单应矩阵,可以参考这里。单应性定义为从一个平面到另一个平面的投影映射,比如说物体平面到图像平面的映射。如果我们定义

观察点Q映射到成像装置的点q

那么定义单应矩阵H

s是从H分解出来的比例因子

定义一个这样的矩阵

旋转矩阵和平移向量

那么运用一些几何和线代知识,可以知道

M就是内参矩阵,回忆一下

看上去可以推出单应矩阵了,但实际上向量Q包含了三维信息,我们只需要它在它的坐标平面上的信息。那么,我们定义一个物体平面,使它Z=0(标定板是一个平面,所以上面的点的Z可以是一样的且为0)。那么可以简化成这样的形式

简化

顺理成章地


单应矩阵H

那么单应矩阵H可以用这样的方程将图像平面和目标图像平面的点相关联


关联

之前的文章提到,至少要用四个点来求解H。

相机标定

知道如何用数学来描述相机的内在参数和畸变特性之后,接下来一个很自然的问题就是如何使用OpenCV来进行计算。算法的调用可以看我之前写的文章,这里只记录一些原理性的东西。

回顾一下,我们需要求出四个内在参数


焦距和偏移

五个或更多的畸变参数

径向畸变参数
切向畸变参数

OpenCV中的,用于求取焦距和偏移的算法基于Zhang,畸变参数基于Brown。求解过程比较繁琐,懒得说了→_→,网上有篇博客讲的不错。

得到内参矩阵后,可以得到物理坐标到图像坐标的映射关系

映射

得到畸变参数之后,就能对图像进行矫正

没有畸变的结果

理论上只需要两个定位到角点的棋盘图像,但实际上需要10个以上才能得到比较好的结果。

得到这些参数之后,可以用OpenCV中的一些函数得到映射用的矩阵用于矫正

可以看到校正后线条没有弯曲

总结

这一章,我们干了这些事情:

  • 引入针孔摄像机模型,并引入透镜畸变的概念,建立起数学模型。

  • 旋转矩阵和Rodrigues变换。

  • 引入了单应性的概念,并用于相机的标定。

下一章我们会讲到双目标定和立体重建的话题。

References:
学习opencv3(中文版) —— Adrian Kaehler & Gary Bradski
三维坐标变换——旋转矩阵与旋转向量
张正友标定算法原理详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341