摄像机模型

最近在做双目测距,之前看过摄像机模型的内容但是后来发现自己一直没搞清楚,这两天又仔细看了Learning OpenCV以及网上的一些资料才算理解的清楚一些。如果有什么错误还麻烦指出,感谢~

摄像机模型的介绍是为了了解摄像机获取图像产生图片的过程。实质上是一种坐标变换关系。这种关系可以由一个从三维空间到二维空间的映射关系来表示。

坐标系系统

要详细地研究三维空间点的信息到二维空间的转换,就有必要规范建立一些坐标系系统。
世界坐标系:描述了摄像机的位置以及空间物体位置的坐标系,一般使用的是三维直角坐标系。这个坐标系的选定没有特殊的要求。
相机坐标系:使用三维直角坐标系,摄像机镜头光心作为原点 O z 轴方向指向投影屏幕,与摄像机镜头垂直, xy 平面平行于投影屏幕,且 x 轴、y 轴分别与图像像素坐标系的 x 轴、y 轴平行。
图像像素坐标系:使用直角坐标系,以图像的左上角作为坐标原点,两条坐标轴分别指示行数和列数,使用图像像素作为衡量单位。
图像物理坐标系:使用直角坐标系,一般以图像的中心作为坐标系原点,两条轴分别与图像像素坐标系的平行,使用毫米作为衡量单位。

图像像素坐标系描述的是产生的图片,图像物理坐标系描述的是成像平面。
这里写图片描述

投影变换

将坐标为 (Xi,Yi,Zi) 的物理点 Qi 映射到投影平面上坐标为 (xi,yi) 的点的过程叫投影变换。采用这种变换,可以使用齐次坐标。
- 齐次坐标:齐次坐标就是一个 n 维向量的 n+1 维矢量表示。其集合意义可理解为三维空间中第三维为常数的一平面的二维向量。

最简单的摄像机模型:针孔模型

对于假想的针孔摄像机,从针孔到屏幕的距离视作焦距f摄像机焦距Z摄像机到物体的距离X物体长度,则 x=fX/Z

这里写图片描述
左边的平面为成像平面,右边的平面为针孔平面optical axis光轴
针孔中心的点被理解为投影中心
光轴与成像平面的交点被称为主点

假设世界坐标系原点在光心,即和相机坐标系重合,然后将成像平面放到光心的前方进行理想化,这样方便计算。
这里写图片描述

此时,给一个世界坐标系中的点 M(x,y,z) (单位是mm)则由于假设,该点在相机坐标系下坐标也是 M(x,y,z) ,它经过投影变换产生的成像平面上的点的坐标为 m(u,v) (单位是mm)(注意是成像平面上的点的坐标,位于图像物理坐标系下,不是图像平面的点的坐标因为图像平面上点的坐标涉及到mm和像素的转换,下面讨论),易得以下关系:

u=f×xzv=f×yz

如果用齐次坐标表示,可以表示成
m=PM,m=uv1,P=f000f0001,M=xyz

再假设图像像素坐标系的原点在图像中心,即和图像物理坐标系重合。
m(u,v) (单位是mm)对应的图片上的像素的点为 m~(u~,v~) (单位是像素)(位于图像像素坐标系下),由成像平面到图像平面是CCD在起作用。由于CCD像素的横纵往往不同,所以用 sx 表示CCD横向每毫米多少像素,即单位是像素/mm,用 sy 表示CCD纵向每毫米多少像素,即单位是像素/mm。则有

u~=u×sxv~=v×sy

u~=sx×f×xz=fx×xzv~=sy×f×yz=fy×yzfmmfxfy

则有
m~=P~M,m~=u~v~1,P~=fx000fy0001,M=xyz

摄像机的内参——从摄像机坐标系到图像像素坐标系的变换

在上面我们考虑的是世界坐标系和摄像机坐标系完全重合以及图像物理坐标系和图像像素坐标系完全重合的情况,这种理想情况下,

m~=P~M,m~=u~v~1,P~=fx000fy0001,M=xyz

其中 P~ 矩阵就是摄像机内参数矩阵。

但是实际情况下,图像物理坐标系不和图像像素坐标系重合,且成像中心也不能在主点上(工艺原因)。此时理想情况下图像物理坐标系的原点,即主点和实际情况下图像物理坐标系的原点之间有偏移,实际情况下的图像物理坐标系的原点和实际情况下的图像像素坐标系的原点之间有偏移。这两个偏移算到一起有一个偏移量 (cx,cy) (单位已经是像素)。
考虑这个偏移量,有

u~=fx×xz+cxv~=fy×yz+cy

摄像机内参数矩阵就变成了
P~=fx000fy0cxcy1

又由于工艺,CCD不是一个严格的矩阵,可能是一个平行四边形,此时产生的图像像素坐标系的横纵轴就不是严格的垂直(假设它们之间的夹角为 θ )。这个暂时不考虑,这一部分好多东西没看懂。
这里写图片描述

不考虑CCD的倾斜的话,摄像机的内参由四个参数决定 fx,fy,cx,cy ,这些参数可以通过摄像机标定获得。

摄像机的外参——从世界坐标系到摄像机坐标系的变换

世界坐标系与相机坐标系之间的关系可以用旋转矩阵平移向量来描述。
这里写图片描述
假设世界坐标系中的点为 M(x,y,z) ,对应的相机坐标系中的点为 M~(x~,y~,z~) ,那么存在着一个旋转矩阵 R 和一个平移向量 T ,使得

M~=RM+TM~=x~y~z~,M=xyz

旋转矩阵

通常,任何维的旋转可以表述为坐标向量合适尺寸的方阵的乘积。最终一个旋转等价于在另一个不同坐标系下对点位置的重新描述。坐标系旋转角度 θ 则等同于将目标点围绕坐标原点反方向旋转同样的角度 θ

下图显示用矩阵乘法对二维矩阵的描述。
这里写图片描述

把点旋转 θ (这里是绕 z 轴)等价于坐标轴反向旋转θ。通过简单的三角计算,我们可以看出旋转如何改变点的坐标。

在三维空间中,旋转可以分解为绕各自坐标轴的二维旋转,其中旋转轴线的度量保持不变。如果依次绕 x,yz 轴旋转角度 ψ,φθ ,那么总的旋转矩阵 R 是三个矩阵Rx(ψ),Ry(φ)Rz(θ)的乘积,其中:

Rx(ψ)1000cosψsinψ0sinψcosψRy(φ)cosφ0sinφ010sinφ0cosφRz(θ)cosθsinθ0sinθcosθ0001

因此 R=Rz(θ)Ry(φ)Rx(ψ) 。旋转矩阵 R 的特性是它的逆阵就是它的转置阵(我们只需要转回来)。因此有RTR=RRT=I,其中 I 是对角元素为1,其余为0的单位矩阵。

平移向量

平移向量表示怎样将一个坐标系的原点移动到另一个坐标系的原点,或者说,平移向量是第一个坐标是原点与第二个坐标系原点的偏移量。

因此,从以目标中心为原点的坐标系移动到以摄像机光心为原点的另一个坐标系,相应的平移向量为 T=。如旋转矩阵与平移向量标题下面的那个图片,点在世界坐标系中的坐标 P0 到在摄像机坐标系中的坐标 Pc

Pc=RP0+T

把世界坐标系中的 M 变成四维向量 M(x,y,z,1),则有

M~=[RT]MM~=x~y~z~,M=xyz1

矩阵 [RT] 被称为摄像机的外参数矩阵。

透镜畸变

采用理想针孔,我们有了一个对视觉中的三维几何有用的模型。但由于只有少量的光线通过针孔,导致了实际情况下因曝光不足使得图像生成得很慢。对要快速生成图像的摄像机而言,必须利用大面积且弯曲的透镜,让足够多的光线能够收敛聚焦到投影点上。为了实现该目的,我们使用透镜。透镜可以聚焦足够多的光线到某个点上,使得图像的生成更加迅速。其代价就是引入了畸变。
- 曝光:不同的明暗光线使人,景,物的影像在银盐胶片上曝光生成潜影或使得CCD得到清晰的图像。

理论上讲是可能定义一种透镜而不引入任何畸变的。然而事实上很难制造出一个数学上理想的透镜,并且从机械方面也很难把透镜和成像仪保持平行。这里我们主要讨论两种主要的透镜畸变并且为它们建模。

在图像系统中还有许多其他类型的畸变,不过都没有径向畸变和切向畸变显著。因此OpenCV不打算处理它们。

径向畸变——来自于透镜性质

实际摄像机的透镜总是在成像仪的边缘产生显著的畸变(就是一个正方形物体经过镜头在图像平面上显示的是一个边呈弧形的四边形)。对某些透镜,光线在远离透镜中心的地方比靠近中心的地方更加弯曲。对常用的普通透镜来说,这种现象更加严重。桶形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。

对径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。实际情况中,这种畸变比较小,而且可以用 r=0 位置周围的泰勒级数展开的前几项来定量描述。对便宜的网络摄像机,我们通常使用前两项,其中第一项通常为 k1 ,而第二项为 k2 。对畸变很大的摄像机,比如鱼眼透镜,我们可以使用第三径向畸变项 k3 。通常,成像仪某点的径向位置按下式调节:

xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6)
这里 (x,y) 是畸变点在成像仪上的原始位置, (xcorrected,ycorrected) 是校正后的新位置。

切向畸变——来自于整个摄像机的组装过程

这种畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的(就相当于物体经过透镜的光线不是垂直射到图像平面上的,而是以一定的角度,理想状态下应该是垂直射到图像平面上的)。

切向畸变可以用两个额外的参数 p1 p2 来描述,如下:

xcorrected=x+[2p1y+p2(r2+2x2)]ycorrected=y+[p1(r2+2y2)+2p2x]

因此总共有五个我们所需要的畸变参数。由于在OpenCV程序中五个参数都是必需的,所以它们被放置到一个畸变向量中,这是一个 5×1 的矩阵,按顺序依次包含 k1 k2 p1 p2 k3

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值