光学课堂 首页 资讯 查看内容

单目相机模型

2021-8-3 23:30| 发布者:optkt| 查看:309| 评论:0|原作者: 小小光08


相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程能够用一个几何模型进行描述。这类模型有很多种,其中最简单的称为针孔模型针孔模型是很常用,而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系。同时,由于相机镜头上的透镜的存在,会使得光线投影到成像平面的过程中会产生畸变因此,我们使用针孔和畸变两个模型来描述整个投影过程。这两个模型能够把外部的三维点投影到相机内部成像平面,构成了相机的内参数
 
1.针孔相机模型
在初中物理课堂上,我们可能都见过一个蜡烛投影实验:在一个暗箱的前方放着一支点燃的蜡烛,蜡烛的光透过暗箱上的一个小孔投影在暗箱的后方平面上,并在这个平面上形成了一个倒立的蜡烛图像。在这个过程中,小孔模型能够把三维世界中的蜡烛投影到个二维成像平面。
同理,我们可以用这个简单的模型来解释相机的成像过程。

现在来对这个简单的针孔模型进行几何建模。设O-x-y-z为相机坐标系,我们习惯让z轴指向相机前方,x向右,y向下,O为摄像机的光心,也是针孔模型中的针孔。
现实世界的空间点P,经过小孔O投影之后,落在物理成像平面O′-x′-y′上,成像点为P′,设P的坐标为[X,Y,Z]T,P′为[X′,Y′,Z′]T,并且设物理成像平面到小孔的距离为f(焦距)。那么,根据三角形相似关系,有

式(1)中负号表示成的像是倒立的。
为了简化模型,我们把可以成像平面对称到相机前方,和三维空间点一起放在摄像机坐标系的同一侧,这样做可以把公式中的负号去掉,使公式更加简洁:

为什么我们可以看似随意地把成像平面挪到前方呢?这只是我们处理真实世界与相机投影的数学手段,并且,大多数相机输出的图像并不是倒像,相机自身的软件会帮你翻转这张图像,所以你看到的一般是正着的像,也就是对称的成像平面上的像。所以,尽管从物理原理来说,小孔成像应该是倒像,但由于我们对图像作了预处理,所以理解成在对称平面上的像,并不会带来什么坏处。
整理后得到:

式(3)描述了点P和它的像P′之间的空间关系。不过,在相机中,我们最终获得的是一个个的像素,这需要在成像平面上对像进行采样和量化。为了描述传感器将感受到的光线转换成图像像素的过程,我们设在物理成像平面上固定着一个像素平面o-u-v。我们在像素平面得到了P′的像素坐标:[u,v]T
像素坐标系通常的定义方式是:原点o′位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移
我们设像素坐标在u轴上缩放了α倍,在υ轴上缩放了β倍。同时,原点平移了[cx,cy]T。那么,P′的坐标与像素坐标[u,v]T的关系为

把αf合并为fx,把βf合并为fy,得:

其中,f的单位为米,α、β的单位为像素/米,所以fx、fy的单位为像素。
可以把式(5)写成矩阵形式:

我们按照传统习惯,把Z移到左侧:

注:等号上面有一个三角形在数学中表示为:“记作”、“定义为”、“等价于”。
该式中,我们把中间的量组成的矩阵称为相机的内参数矩阵(Camera Intrinsics)K
通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化。有的相机生产厂商会告诉你相机的内参,而有时需要你自己确定相机的内参,也就是标定。目前标定算法已经很成熟了。
除了内参之外,还有相对的外参。考虑到在式(6)中,我们使用的是P在相机坐标系下的坐标。
由于相机在运动,所以P的相机坐标应该是它的世界坐标(记为Pω),根据相机的当前位姿,变换到相机坐标系下的结果。相机的位姿由它的旋转矩阵R和平移向量t来描述。那么有

注意后一个式子隐含了一次齐次坐标到非齐次坐标的转换。它描述了P的世界坐标到像素坐标的投影关系。其中,相机的位姿R,t又称为相机的外参数( Camera Extrinsic)。相比于不变的内参,外参会随着相机运动发生改变。
我们还是提一下隐含着的齐次到非齐次的变换吧。右侧的TPω表示把一个世界坐标系下的齐次坐标,变换到相机坐标系下。为了使它与K相乘,需要取它的前三维组成向量——因为TPω最后一维为1。此时,对于这个三维向量,我们还可以按照齐次坐标的方式,把最后一维进行归一化处理,得到了P在相机归一化平面上的投影。

这时Pc可以看成一个二维的齐次坐标,称为归一化坐标。它位于相机前方z=1处的平面上。该平面称为归一化平面。由于Pc经过内参之后就得到了像素坐标,所以我们可以把像素坐标[u,v]T,看成对归一化平面上的点进行量化测量的结果。
 
2.畸变模型
为了获得好的成像效果,我们在相机的前方加了透镜。透镜的加入对成像过程中光线的传播会产生新的影响:一是透镜自身的形状对光线传播的影响,二是在机械组装过程中,透镜和成像平面不可能完全平行,这也会使得光线穿过透镜投影到成像面时的位置发生变化。

由透镜形状引起的畸变称之为径向畸变。在针孔模型中,一条直线投影到像素平面上还是一条直线。可是,在实际拍摄的照片中,摄像机的透镜往往使得真实环境中的一条直线在图片中变成了曲线。越靠近图像的边缘,这种现象越明显。由于实际加工制作的透镜往往是中心对称的,这使得不规则的畸变通常径向对称。它们主要分为两大类,桶形畸变和枕形畸变。
桶形畸变是由于图像放大率随着离光轴的距离增加而减小,而枕形畸变却恰好相反。
在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
除了透镜的形状会引入径向畸变外,在相机的组装过程中由于不能使得透镜和成像面严格平行也会引入切向畸变。

为更好地理解径向畸变和切向畸变,可以用更严格的数学形式对两者进行描述。我们知道平面上的任意一点p可以用笛卡尔坐标表示为[x,y]T,也可以把它写成极坐标的形式[r,θ]T,其中r表示点p离坐标系原点的距离,θ表示和水平轴的夹角。径向畸变可看成,坐标点沿着长度方向发生了变化δr,也就是其距离原点的长度发生了变化。切向畸变可以看成坐标点沿着切线方向发生了变化,也就是水平夹角发生了变化δθ。
对于径向畸变,无论是桶形畸变还是枕形畸变,由于它们都是随着离中心的距离增加而增加。我们可以用一个多项式函数来描述畸变前后的坐标变化:这类畸变可以用和距中心距离有关的二次及高次多项式函数进行纠正:
其中[x,y]T是未纠正的点的坐标,[xcorrected,ycorrected]T是纠正后的点的坐标,注意它们都是归一化平面上的点,而不是像素平面上的点。
在式(11)描述的纠正模型中,对于畸变较小的图像中心区域,畸变纠正主要是k1起作用。而对于畸变较大的边缘区域主要是k2起作用。普通摄像头用这两个系数就能很好的纠正径向畸变。对畸变很大的摄像头,比如鱼眼镜头,可以加入k3畸变项对畸变进行纠正。
另一方面,对于切向畸变,可以使用另外的两个参数p1,p2来进行纠正:

因此,联合式(10)和式(11),对于相机坐标系中的一点P(X,Y,Z),我们能够通过五个畸变系数找到这个点在像素平面上的正确位置:

(1)将三维空间点投影到归一化图像平面。设它的归一化坐标为[x,y]T
(2)对归一化平面上的点进行径向畸变和切向畸变纠正。

(3)将纠正后的点通过内参数矩阵投影到像素平面,得到该点在图像上的正确位置。

在上面的纠正畸变的过程中,我们使用了五个畸变项。实际应用中,可以灵活选择纠正模型,比如只选择k1,p1,p2这三项等。
 
3.小结
以上,我们对相机的成像过程使用针孔模型进行了建模,也对透镜引起的径向畸变和切向畸变进行了描述。
实际的图像系统中,学者们提出了有很多其他的模型,比如相机的仿射模型和透视模型等,同时也存在很多其他类型的畸变。
对于普通的摄像头,针孔模型以及径向畸变和切向畸变模型已经足够了。
值得一提的是,存在两种去畸变的处理做法。一种是先对整张图像进行去畸变,得到去畸变后的图像,然后讨论此图像上的点的空间位置。另一种是先考虑图像中的某个点,然后按照去畸变方程,讨论它去畸变后的空间位置。二者都是可行的,不过前者更常见一些,当一个图像去畸变之后,我们就可以直接用针孔模型建立投影关系,而不用考虑畸变了。
 



 


路过

雷人

握手

鲜花

鸡蛋

最新评论

联系客服 关注微信 访问手机版 返回顶部