立体视觉入门指南:坐标系与相机参数
Posted 李迎松~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立体视觉入门指南:坐标系与相机参数相关的知识,希望对你有一定的参考价值。
亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间。而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感知能力,并希望在速度和精度上超越人类,比如自动驾驶导航中的定位导航,无人机的自动避障,测量仪中的三维扫描等,都是高智机器智能技术在3D视觉上的具体实现。
立体视觉是三维重建领域的重要方向,它模拟人眼结构用双相机模拟双目,以透视投影、三角测量为基础,通过逻辑复杂的同名点搜索算法,恢复场景中的三维信息。它的应用十分之广泛,自动驾驶、导航避障、文物重建、人脸识别等诸多高科技应用都有它关键的身影。
本课程将带大家由浅入深的了解立体视觉的理论与实践知识。我们会从坐标系讲到相机标定,从被动式立体讲到主动式立体,甚至可能从深度恢复讲到网格构建与处理,感兴趣的同学们,来和我一起探索立体视觉的魅力吧!
本课程是电子资源,所以行文并不会有太多条条框框的约束,但会以逻辑清晰、浅显易懂为目标,水平有限,若有不足之处,还请不吝赐教!
个人微信:EthanYs6,加我申请进技术交流群 StereoV3D,一起技术畅聊。
CSDN搜索 :Ethan Li 李迎松,查看网页版课程。
随课代码,将上传至github上,地址:StereoV3DCode:https://github.com/ethan-li-coding/StereoV3DCode
文章目录
针孔模型Pinhole mode
在科学研究中,一个现象内部的过程总是复杂而难以清晰看透,而聪明的学者们总会用最简单的模型去做初始描述,提出一个相对简单的模型。成像过程亦不例外,他们将三维世界中的坐标点映射到二维图像平面的过程用一个几何模型进行描述,这个模型有很多种,其中最简单的称为针孔模型。
针孔成像的原理大家都学过,现实世界中源于某个物体的光线穿过针孔,会在底板上投影成一幅倒立的图像。如图1所示:
将针孔模型对应到成像过程中,现实世界的物体即为三维空间的成像目标,针孔为摄像机中心,倒影成像平面则为二维影像平面。如图二(左)所示,我们用简单的线条来绘制这样的关系,摄像机中心到成像平面之间的距离我们称之为焦距 f f f。但是倒立的成像总感觉别扭,因此转换一下,将成像平面拿到相机前方来,保持焦距为 f f f,由成像过程可知,图像此时不再是倒立的了,解放了大家的脖子,见图2(右)所示。
|
|
从针孔模型中,我们可以找到一个特征,那就是现实世界的任一点、其在成像平面上的投影点、相机中心在一条直线上,这种特征称为中心投影或者透视投影,也是做成像分析的基础。透视投影将三维空间投影到二维平面上,是一种降秩空间透射变换(三维空间降成了二维空间)。
坐标系简介
通过针孔模型,我们了解了成像过程,似乎非常简单,但它此时只是一张图片,给你感官上的理解,要基于它完成复杂的3D测量,必须借用那一连串噼里啪啦让人又爱又恨的数学公式,而公式建立的基础,就是一个个坐标系,具体来说,是一个个笛卡尔坐标系。如果你不知道什么是笛卡尔坐标系,我想你也不会点开我的博客看到这里,所以介绍就此略过。
我认为你们已经掌握了一个前提知识:立体视觉的三个关键坐标系是影像坐标系、相机坐标系、世界坐标系。如果没有,那我就强塞给你这个概念。
影像坐标系
影像坐标系是一个二维坐标系,是在影像内建立的坐标系,描述像素点在影像中的位置,分为以像素为单位的 ( u , v ) (u,v) (u,v)坐标系以及以物理尺寸为单位的 ( x , y ) (x,y) (x,y)坐标系。在计算机视觉中, ( u , v ) (u,v) (u,v)坐标系以左上角位置为原点, u u u轴和 v v v轴分别平行于图像平面的两条垂直边( u u u轴朝右, v v v轴朝下),如图3左所示; ( x , y ) (x,y) (x,y)坐标系以像主点 ( u 0 , v 0 ) (u_0,v_0) (u0,v0)为原点, x x x轴和 y y y轴分别与 u u u轴和 v v v轴平行且方向一致,如图3右所示。
|
|
上面提到像主点,特别说明一下,它是摄影中心到成像平面的垂点,它是一个非常重要的点位。
如果我们知道像素到物理尺寸的转换关系,即一个像素的物理尺寸,也就是像元尺寸为
d
x
∗
d
y
dx*dy
dx∗dy(
x
x
x方向尺寸为
d
x
dx
dx,
y
y
y方向尺寸为
d
y
dy
dy),就可以在两类坐标系之间相互转换:
u
−
u
0
=
x
/
d
x
v
−
v
0
=
y
/
d
y
\\beginaligned u-u_0&=x / d_x\\\\ v-v_0&=y / d_y \\endaligned
u−u0v−v0=x/dx=y/dy
为了便于矩阵运算,我们会写成矩阵形式:
[
u
v
1
]
=
[
1
d
x
0
u
0
0
1
d
y
v
0
0
0
1
]
[
x
y
1
]
\\left[\\beginmatrixu\\\\v\\\\1\\endmatrix\\right]=\\left[\\beginmatrix\\frac 1 d_x& 0&u_0\\\\ 0& \\frac 1 d_y&v_0\\\\0&0&1\\endmatrix\\right]\\left[\\beginmatrixx\\\\y\\\\1\\endmatrix\\right]
⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⎣⎡xy1⎦⎤
公式两边的三维矢量是一种齐次表达方式,即把第三维设置为1来用三维矢量表示二维矢量,这样做的好处是可以用矩阵运算的方式完成三维到二维的变换。为什么要做这个转换呢?是因为 x y xy xy坐标系和相机坐标系的紧密联系,同学们往后看。
相机坐标系
相机坐标系是一个三维空间坐标系,是非常关键的一个坐标系,它承担着建立影像坐标系和世界坐标系之间联系的重任。所以前人们在建立相机坐标系时,有一个很关键的考量是如何能更好的把影像坐标系和世界坐标系之间联系起来。
两个三维坐标系(相机和世界)之间的转换用旋转和平移就可以方便表达,重点是三维的相机坐标系和二维的影像坐标系之间如何更好转换。方案是这样的:相机坐标系的原点在相机中心, X Y XY XY轴和影像 x y xy xy坐标系的 x y xy xy轴平行, Z Z Z轴垂直于像平面且朝向像平面, Z Z Z轴和像平面的交点正是影像 x y xy xy坐标系的原点(像主点)。如图4所示。
在此方案下,像平面上的所有像素点在相机坐标系下的 Z Z Z坐标等于焦距 f f f, X Y XY XY坐标和影像 x y xy xy坐标系下的值相等,即若像素点 p p p在影像 x y xy xy坐标系下的坐标为 ( x , y ) (x,y) (x,y),则其在相机坐标系下的坐标为 ( x , y , f ) (x,y,f) (x,y,f)。
根据中心投影的特征,假设像素点 p p p是空间点 P P P的投影点,那么如何建立两兄弟之间的坐标关系呢?
我们假设像素
p
p
p对应的空间点在相机坐标系下的坐标为
(
X
c
,
Y
c
,
Z
c
)
(X_c,Y_c,Z_c)
(Xc,Yc,Zc)(下标c是camera的意思)。若两点位于从坐标系原点发出的同一条直线上,那么他们的坐标有什么关系?答案是等比例关系。即
x
X
c
=
y
Y
c
=
f
Z
c
\\frac x X_c=\\frac y Y_c=\\frac f Z_c
Xcx=Ycy=Zcf
为了便于矩阵运算,我们会写成矩阵形式:
[
x
y
1
]
=
[
f
Z
c
0
0
0
f
Z
c
0
0
0
1
Z
c
]
[
X
c
Y
c
Z
c
]
\\left[\\beginmatrixx\\\\y\\\\1\\endmatrix\\right]=\\left[\\beginmatrix\\frac f Z_c& 0&0\\\\ 0& \\frac f Z_c&0\\\\0&0&\\frac 1 Z_c\\endmatrix\\right]\\left[\\beginmatrixX_c\\\\Y_c\\\\Z_c\\endmatrix\\right]
⎣⎡xy1⎦⎤=⎣⎢⎡以上是关于立体视觉入门指南:坐标系与相机参数的主要内容,如果未能解决你的问题,请参考以下文章