针孔相机模型
1 什么是针孔相机模型?
相机成像模型是一组数学方程,用于表达相机如何将三维世界的场景转换为二维图像的过程。在多种相机成像模型中,针孔模型(Pinhole camera model)
是最简单且广泛使用的一种,它假设相机的成像过程类似于针孔相机,其中三维场景通过一个针孔投影到二维平面上。除了针孔模型之外,还有透视模型和鱼眼模型等其他类型的相机成像模型。针孔模型由于其简单性和普适性,常作为更复杂成像模型的基础,并且在本文中是三维重建的核心知识之一。
针孔相机模型下图所示,在针孔相机模型中假设在物体 P P P 与相机像平面 U − V U-V U−V 之间有一个小孔 O C O_C OC(针孔),这意味着物体 P P P 反射的光线通过一个非常小的点 O C O_C OC(针孔)进入相机,并在像平面上形成一个倒立的图像。相机平面是指相机坐标系所在的平面,根据针孔相机的成像原理,真实世界的物体的成像是映射在相机平面后侧的像平面内,为了符合人们对图像的认知,而在相机平面的前方定义一个虚拟像平面来说明物体在各坐标系之间的关系。假设从三维空间中的任意一点到图像平面的投影是直线的,且都经过针孔点,并且假设模型不存在光学畸变,如径向和切向畸变。
2 坐标系变换关系推导
在上图中存在 4 个坐标系,分别是世界坐标系、相机坐标系、图像物理坐标系和图像像素坐标系。研究针孔相机主要就是研究这几个坐标系之间的变换关系,下面对 4 个坐标系之间的变换关系进行理论推导。
2.1 由图像物理坐标系到图像像素坐标系
上图展示的图像像素坐标系采用单位像素作为基本单位,该坐标系以图像平面上成像画面的左上角作为起始点(坐标原点),并采用 U − V U-V U−V 作为坐标轴,这是数字图像存储和表示中最普遍使用的坐标系统,在本文中标记为 U − V U-V U−V,物理坐标系则是依据像素的实际物理大小来定义的,与像素坐标系处于同一平面上,在物理坐标系中,图像的原点是相机坐标系与成像平面在深度方向( Z Z Z 轴)上的交点,图像的物理坐标系与像素坐标系的坐标轴保持相同的方向,彼此平行。图像物理坐标系与图像像素坐标系的关系如下图所示。
P P P 为世界坐标系上一点,假设其在图像物理坐标系上对应点的坐标为 ( x , y ) (x,y) (x,y),在图像像素坐标系上对应点的坐标为 ( u , ν ) (u,ν) (u,ν)。假设在图像物理坐标系中单位像素在 x − y x-y x−y 轴对应的实际物理尺寸分别为 d x d_x dx 和 d y d_y dy, O i O_i Oi 是像平面(虚拟像平面)上的中心点,同时也是图像物理坐标系的坐标原点,假设其在图像像素坐标系上的坐标为 ( u 0 , v 0 ) (u_0,v_0) (u0,v0),可以得到图像物理坐标系与图像像素坐标系的转换关系:
u = x d x + u 0 u=\frac{x}{dx}+u_{0} u=dxx+u0
v = y d y + v 0 v=\frac{y}{dy}+v_{0} v=dyy+v0
整理成齐次坐标格式为:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y ν 0 0 0 1 ] [ x y 1 ] \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_0\\\\0&\frac{1}{dy}&\nu_0\\\\0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix} uv1 = dx1000dy10u0ν01 xy1
2.2 由相机坐标系到图像物理坐标系
相机坐标系的坐标原点为 O C O_C OC,该点同时也是相机的光心,相机坐标系的横轴 X C X_C XC 平行于图像物理坐标系横轴 x x x,相机坐标系的纵轴 Y C Y_C YC 平行于图像物理坐标系纵轴 y y y,相机坐标系的 Z C Z_C ZC 轴平行于光轴,单位是实际物理尺寸。相机坐标系与图像物理坐标系的关系如下图所示。
根据初中学习的小孔成像知识可知相机坐标系原点 O C O_C OC 与图像物理坐标系原点 O i O_i Oi 之间的距离为 f f f,即焦距。假设 P P P 在相机坐标系中的坐标为 ( X C , Y C , Z C ) (X_C,Y_C,Z_C) (XC,YC,ZC),在图像物理坐标系中的坐标为 ( x , y ) (x,y) (x,y),根据相似三角形原理可知 P P P 在物理坐标系与相机坐标系下存在 f / Z C f/Z_C f/ZC的比例关系,可以得到相机坐标系与图像物理坐标系的转换关系:
[ x y 1 ] = 1 Z C [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X C Y C Z C 1 ] \begin{bmatrix}x\\y\\1\end{bmatrix}=\frac{1}{Z_C}\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}X_C\\Y_C\\Z_C\\1\end{bmatrix} xy1 =ZC1 f000f0001000 XCYCZC1
2.3 由世界坐标系到相机坐标系
在真实世界中物体的位置是以真实空间中的某一点作为坐标原点以实际物理尺寸为单位建立的世界坐标系下的坐标。 P ( X W , Y W , Z W ) P(X_W,Y_W,Z_W) P(XW,YW,ZW) 为真实世界中的一点,世界坐标系中的点 P P P 可以通过旋转矩阵 R R R 和平移矩阵 t t t 转换到相机坐标系中去。其中 R R R 是一个 3 × 3 3×3 3×3 的单位正交矩阵,反映了世界坐标系到相机坐标系的旋转量,通过这个旋转矩阵可以使世界坐标系在旋转之后坐标轴与相机坐标系坐标轴平行。 t t t 是一个 3 × 1 3×1 3×1 的矩阵,反映了世界坐标系到相机坐标系原点的偏移量,通过这个平移矩阵可以使世界坐标系在平移之后坐标原点与相机坐标系坐标原点重合。可以得到世界坐标系与相机坐标系的转换关系:
[ X C Y C Z C 1 ] = [ R t 0 T 1 ] [ X W Y W Z W 1 ] \begin{bmatrix}X_C\\Y_C\\Z_C\\1\end{bmatrix}=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix} XCYCZC1 =[R0Tt1] XWYWZW1
2.4 由世界坐标系到图像像素坐标系
联立前面所有公式可以推导出世界坐标系下一点 P ( X W , Y W , Z W ) P(X_W,Y_W,Z_W) P(XW,YW,ZW) 到图像像素坐标系下一点 ( u , ν ) (u,ν) (u,ν) 的转换公式为:
[ u ν 1 ] = 1 Z C [ 1 d x 0 u 0 0 1 d y ν 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X W Y W Z W 1 ] = K T Z C [ X W Y W Z W 1 ] \begin{bmatrix}u\\\nu\\1\end{bmatrix}=\frac{1}{Z_C}\begin{bmatrix}\frac{1}{dx}&0&u_0\\0&\frac{1}{dy}&\nu_0\\0&0&1\end{bmatrix}\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix}=\frac{KT}{Z_C}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix} uν1 =ZC1 dx1000dy10u0ν01 f000f0001000 [R0Tt1] XWYWZW1 =ZCKT XWYWZW1
其中:
K = [ 1 d x 0 u 0 0 1 d y ν 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] , T = [ R t 0 T 1 ] K=\begin{bmatrix}\frac{1}{dx}&0&u_0\\0&\frac{1}{dy}&\nu_0\\0&0&1\end{bmatrix}\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}, T=\begin{bmatrix}R&t\\0^T&1\end{bmatrix} K= dx1000dy10u0ν01 f000f0001000 ,T=[R0Tt1]
K K K 是相机的内参矩阵,只与相机内部的参数有关,一般在相机出厂的时候已经设定。 T T T 是相机的外参矩阵,一般记作 T = [ R ∣ t ] T=[R∣t] T=[R∣t],其中 R R R 为前面说的 3 × 3 3×3 3×3 的旋转矩阵, t t t 为前面说的 3 × 1 3×1 3×1 的平移矩阵。
根据上面的坐标变换,可以知道从世界坐标系到图像像素坐标系的转换关系如下图所示。
可知世界坐标系中的三维点可以通过外参矩阵 T T T 转换成相机坐标系中的三维点,相机坐标系中的三维点可以通过内参矩阵 K K K 转换成图像像素坐标系中的二维点。世界坐标系中三维点转换到图像像素坐标系中二维点的过程可以用一个矩阵 P P P 来表示:
P = K [ R ∣ t ] P=K[R\mid t] P=K[R∣t]
一般称 P P P 为投影矩阵,也成为摄像机矩阵。投影矩阵其实就是相机内参矩阵与相机外参矩阵的乘积,物理意义表示从三维空间点到二维空间点的映射。