摄像机模型
最近在做双目测距,之前看过摄像机模型的内容但是后来发现自己一直没搞清楚,这两天又仔细看了Learning OpenCV以及网上的一些资料才算理解的清楚一些。如果有什么错误还麻烦指出,感谢~
摄像机模型的介绍是为了了解摄像机获取图像产生图片的过程。实质上是一种坐标变换关系。这种关系可以由一个从三维空间到二维空间的映射关系来表示。
坐标系系统
要详细地研究三维空间点的信息到二维空间的转换,就有必要规范建立一些坐标系系统。
世界坐标系:描述了摄像机的位置以及空间物体位置的坐标系,一般使用的是三维直角坐标系。这个坐标系的选定没有特殊的要求。
相机坐标系:使用三维直角坐标系,摄像机镜头光心作为原点
图像像素坐标系:使用直角坐标系,以图像的左上角作为坐标原点,两条坐标轴分别指示行数和列数,使用图像像素作为衡量单位。
图像物理坐标系:使用直角坐标系,一般以图像的中心作为坐标系原点,两条轴分别与图像像素坐标系的平行,使用毫米作为衡量单位。
图像像素坐标系描述的是产生的图片,图像物理坐标系描述的是成像平面。
投影变换
将坐标为
- 齐次坐标:齐次坐标就是一个
最简单的摄像机模型:针孔模型
对于假想的*,从针孔到屏幕的距离视作焦距。f是摄像机焦距,Z是摄像机到物体的距离,X是物体长度,则
左边的平面为成像平面,右边的平面为针孔平面,optical axis为光轴。
针孔中心的点被理解为投影中心。
光轴与成像平面的交点被称为主点。
假设世界坐标系原点在光心,即和相机坐标系重合,然后将成像平面放到光心的前方进行理想化,这样方便计算。
此时,给一个世界坐标系中的点
如果用齐次坐标表示,可以表示成
再假设图像像素坐标系的原点在图像中心,即和图像物理坐标系重合。
若
即
则有
摄像机的内参——从摄像机坐标系到图像像素坐标系的变换
在上面我们考虑的是世界坐标系和摄像机坐标系完全重合以及图像物理坐标系和图像像素坐标系完全重合的情况,这种理想情况下,
其中
但是实际情况下,图像物理坐标系不和图像像素坐标系重合,且成像中心也不能在主点上(工艺原因)。此时理想情况下图像物理坐标系的原点,即主点和实际情况下图像物理坐标系的原点之间有偏移,实际情况下的图像物理坐标系的原点和实际情况下的图像像素坐标系的原点之间有偏移。这两个偏移算到一起有一个偏移量
考虑这个偏移量,有
摄像机内参数矩阵就变成了
又由于工艺,CCD不是一个严格的矩阵,可能是一个平行四边形,此时产生的图像像素坐标系的横纵轴就不是严格的垂直(假设它们之间的夹角为
不考虑CCD的倾斜的话,摄像机的内参由四个参数决定
摄像机的外参——从世界坐标系到摄像机坐标系的变换
世界坐标系与相机坐标系之间的关系可以用旋转矩阵和平移向量来描述。
假设世界坐标系中的点为
旋转矩阵
通常,任何维的旋转可以表述为坐标向量与合适尺寸的方阵的乘积。最终一个旋转等价于在另一个不同坐标系下对点位置的重新描述。坐标系旋转角度
下图显示用矩阵乘法对二维矩阵的描述。
把点旋转
在三维空间中,旋转可以分解为绕各自坐标轴的二维旋转,其中旋转轴线的度量保持不变。如果依次绕
因此
平移向量
平移向量表示怎样将一个坐标系的原点移动到另一个坐标系的原点,或者说,平移向量是第一个坐标是原点与第二个坐标系原点的偏移量。
因此,从以目标中心为原点的坐标系移动到以摄像机光心为原点的另一个坐标系,相应的平移向量为
把世界坐标系中的
矩阵
透镜畸变
采用理想针孔,我们有了一个对视觉中的三维几何有用的模型。但由于只有少量的光线通过针孔,导致了实际情况下因曝光不足使得图像生成得很慢。对要快速生成图像的摄像机而言,必须利用大面积且弯曲的透镜,让足够多的光线能够收敛聚焦到投影点上。为了实现该目的,我们使用透镜。透镜可以聚焦足够多的光线到某个点上,使得图像的生成更加迅速。其代价就是引入了畸变。
- 曝光:不同的明暗光线使人,景,物的影像在银盐胶片上曝光生成潜影或使得CCD得到清晰的图像。
理论上讲是可能定义一种透镜而不引入任何畸变的。然而事实上很难制造出一个数学上理想的透镜,并且从机械方面也很难把透镜和成像仪保持平行。这里我们主要讨论两种主要的透镜畸变并且为它们建模。
在图像系统中还有许多其他类型的畸变,不过都没有径向畸变和切向畸变显著。因此OpenCV不打算处理它们。
径向畸变——来自于透镜性质
实际摄像机的透镜总是在成像仪的边缘产生显著的畸变(就是一个正方形物体经过镜头在图像平面上显示的是一个边呈弧形的四边形)。对某些透镜,光线在远离透镜中心的地方比靠近中心的地方更加弯曲。对常用的普通透镜来说,这种现象更加严重。桶形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。
对径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。实际情况中,这种畸变比较小,而且可以用
切向畸变——来自于整个摄像机的组装过程
这种畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的(就相当于物体经过透镜的光线不是垂直射到图像平面上的,而是以一定的角度,理想状态下应该是垂直射到图像平面上的)。
切向畸变可以用两个额外的参数
因此总共有五个我们所需要的畸变参数。由于在OpenCV程序中五个参数都是必需的,所以它们被放置到一个畸变向量中,这是一个