Python计算机视觉编程
照相机模型与增强现实
本章中,主要尝试对照相机进行建模,并有效地使用这些模型。为了处理三维图像和平面图像之间 的映射,我们需要在映射中加入部分照相机产生图像过程的投影特性。下面讲述如何确定照相机的参数,以及在具体应用中,如增强现实,如何使用图像间的投影变换。
(一)针孔照相机模型
在计算机视觉中,利用所拍摄的图像来计算出三维空间中被测物体的几何参数。图像是空间物体通过成像系统在像平面上的反映,即空间物体在像平面上的投影。
图像上每一个像素点的灰度反映了空间物体表面某点的反射光的强度,而该点在图像上的位置则与空间物体表面对应点的几何位置有关。这些位置的相互关系,由摄像机成像系统的几何投影模型所决定。
计算机视觉研究中,三维空间中的物体到像平面的投影关系即为成像模型,理想的投影成像模型是光学中的中心投影,也称为针孔模型。
针孔模型
- 假设物体表面的反射光都经过一个针孔而投影到像平面上,即满足光的直线传播条件。
- 针孔模型主要由光心(投影中心)、成像面和光轴组成。
- 小孔成像由于透光量太小,因此需要很长的曝光时间,并且很难得到清晰的图像。实际摄像系统通常都由透镜或者透镜组成。
- 两种模型具有相同的成像关系,即像点是物点和光心的连线与图像平面的交点。因此,可以用针孔模型作为照相机成像模型。
针孔照相机
针孔照相机模型(有时称为射影照相机模型)是计算机视觉中广泛使用的照相机模型。对于大多数应用来说,针孔照相机模型简单,并且具有足够的精确度。
空间点0是投影中心,它到平面π的距离是f。空间点M在平面π上的投影(或像)m是以点0为端点并经过点M的射线与平面π的交点。
平面π:摄像机的像平面
点0:摄像机中心(光心)
f:摄像机的焦距
以点0为端点且垂直于像平面的射线称为光轴或主轴,主轴与像平面的交点p称为摄像机的主点。
常用坐标系及其关系:
图像坐标系:
以图像左上角为原点建立以像素为单位的直接坐标系u-v。像素的横坐标u与纵坐标v分别是在其图像数组中所在的列数与所在行数。(在OpenCV中u对应x,v对应y)
由于(u,v)只代表像素的列数与行数,而像素在图像中的位置并没有用物理单位表示出来,所以,我们还要建立以物理单位(如毫米)表示的图像坐标系x-y。将相机光轴与图像平面的交点(一般位于图像平面的中心处,也称为图像的主点(principal point)定义为该坐标系的原点O1,且x轴与u轴平行,y轴与v轴平行,假设(u0,v0)代表O1在u-v坐标系下的坐标,dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系:
其中,我们假设物理坐标系中的单位为毫米,那么dx的的单位为:毫米/像素。那么x/dx的单位就是像素了,即和u的单位一样都是像素。为了使用方便,可将上式用齐次坐标与矩阵形式表示为:
相机坐标系:
相机成像的几何关系可由图2表示。其中O点为摄像机光心(投影中心),Xc轴和Yc轴与成像平面坐标系的x轴和y轴平行,Zc轴为相机的光轴,和图像平面垂直。光轴与图像平面的交点为图像的主点O1,由点O与Xc,Yc,Zc轴组成的直角坐标系称为摄像机的坐标系。OO1为相机的焦距。
世界坐标系:也称真实或现实世界坐标系,或全局坐标系。世界坐标系是为了描述相机的位置而被引入的,如图2.2中坐标系OwXwYwZw即为世界坐标系。
世界坐标与相机坐标之间的转换关系:
平移向量t和旋转矩阵R可以用来表示相机坐标系与世界坐标系的关系。所以,假设空间点P在世界坐标系下的齐次坐标是(Xw,Yw,Zw,1)T,(这里T是上标转置),在相机坐标下的齐次坐标是(Xc,Yc,Zc,1)T,则存在如下的关系:
其中,
- R是3×3的正交单位矩阵(也称为旋转矩阵)
满足约束条件:
- T是三维的平移向量,矢量 ,是世界坐标系原点在照相机坐标系中的坐标。
- M1是4×4矩阵。
- 矩阵R实际上只含有三个独立变量 R x R_x Rx , R y R_y Ry, R z R_z Rz,再加上 t x t_x tx , t y t_y ty, t z t_z tz,总共六个参数决定了照相机光轴在世界坐标系的坐标,因此这六个参数称为照相机的外部参数。
图像坐标系与相机坐标系变换关系:
照相机坐标系中的一点P在图像物理坐标系中像点P坐标为:
齐次坐标表示为: