【AI数学】相机成像之外参数

在一个多视点计算机视觉系统里,系统输入除了多个视角的图像外,一般还需要输入对应视角下相机的内外参数。其中,相机内参数决定了图像坐标系和相机三维坐标系的映射关系,而相机外参数则决定了相机三维坐标系和世界坐标系的对应关系。这两组对应关系描述了多视几何的数学基础。

先明确三个概念:1. 图像坐标:像素值的坐标x,y,最多附带一个原点平移(左上角–>图像中心);2. 相机三维坐标系:以图像二维坐标系扩到三维,其中垂直图像外面向外的为z轴,通常以光心作为原点;3. 世界坐标系:每个视点都有自己的独立坐标系,需要投射到同一个坐标系,即世界坐标系。

我们可以通过“小孔成像”原理轻松求解出利用相机内参数求解图像坐标和相机三维坐标系的映射关系,详情可戳《【AI数学】相机成像之内参数》。本文主要讲解相机外参数的作用,即相机坐标系对世界坐标系对映射关系。
【AI数学】相机成像之外参数_第1张图片
图片来自(https://ftp.cs.toronto.edu/pub/psala/VM/camera-parameters.pdf)

现在有两个坐标系 A A A B B B,空间上有一个点 P P P P P P在坐标系 A A A和坐标系 B B B上都有一个坐标。假如 P P P在坐标系 A A A中点的坐标为 P A = ( x A , y A , z A ) \bold{P_A}=(x_A,y_A,z_A) PA=(xA,yA,zA),在坐标系 B B B中的坐标为 P B = ( x B , y B , z B ) \bold{P_B}=(x_B,y_B,z_B) PB=(xB,yB,zB)。那么 P A \bold{P_A} PA P B \bold{P_B} PB满足什么关系呢?

所谓坐标系,无非就是一组正交基。假如坐标系 A A A的单位正交基为 ( a 1 ⃗ , a 2 ⃗ , a 3 ⃗ ) (\vec{a_1}, \vec{a_2}, \vec{a_3}) (a1 ,a2 ,a3 ),坐标系 B B B的单位正交基为 ( b 1 ⃗ , b 2 ⃗ , b 3 ⃗ ) (\vec{b_1}, \vec{b_2}, \vec{b_3}) (b1 ,b2 ,b3 )。这些单位正交基,都可以在同一个坐标系表示出来,只需选定一个确切的坐标系即可,我们无论选坐标系 A A A、坐标系 B B B或者其他坐标系都是可以的,被选定的坐标系我们通常称为“世界坐标系”。由此,我们可以发现,我们选来表示其他坐标系的单位正交基的公用坐标系就是世界坐标系

那么,空间中一点 P P P向量可以表示为:
[ a 1 ⃗ , a 2 ⃗ , a 3 ⃗ ] ⋅ [ x A y A z A ] \begin{bmatrix} \vec{a_1} , \vec{a_2} , \vec{a_3} \end{bmatrix} \cdot {\begin{bmatrix} x_A \\ y_A \\ z_A \end{bmatrix}} [a1 ,a2 ,a3 ] xAyAzA
也可以表示为:
[ b 1 ⃗ , b 2 ⃗ , b 3 ⃗ ] ⋅ [ x B y B z B ] \begin{bmatrix} \vec{b_1} , \vec{b_2} , \vec{b_3} \end{bmatrix} \cdot {\begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix}} [b1 ,b2 ,b3 ] xByBzB
二者有相等(假设两个坐标系原点重合)关系。
[ a 1 ⃗ , a 2 ⃗ , a 3 ⃗ ] ⋅ [ x A y A z A ] = [ b 1 ⃗ , b 2 ⃗ , b 3 ⃗ ] ⋅ [ x B y B z B ] (1) \begin{bmatrix} \vec{a_1} , \vec{a_2} , \vec{a_3} \end{bmatrix} \cdot {\begin{bmatrix} x_A \\ y_A \\ z_A \end{bmatrix}}=\begin{bmatrix} \vec{b_1} , \vec{b_2} , \vec{b_3} \end{bmatrix} \cdot {\begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix}}\tag{1} [a1 ,a2 ,a3 ] xAyAzA =[b1 ,b2 ,b3 ] xByBzB (1)
对公示(1)两边同时左乘 [ a 1 T ⃗ a 2 T ⃗ a 3 T ⃗ ] \begin{bmatrix} \vec{a^T_1} \\ \vec{a^T_2} \\ \vec{a^T_3} \end{bmatrix} a1T a2T a3T ,则可以将左边的系数化为单位矩阵,变换可得:
[ x A y A z A ] = [ a 1 T ⃗ b 1 ⃗ a 1 T ⃗ b 2 ⃗ a 1 T ⃗ b 3 ⃗ a 2 T ⃗ b 1 ⃗ a 2 T ⃗ b 2 ⃗ a 2 T ⃗ b 3 ⃗ a 3 T ⃗ b 1 ⃗ a 3 T ⃗ b 2 ⃗ a 3 T ⃗ b 3 ⃗ ] [ x B y B z B ] (2) \begin{bmatrix} x_A \\ y_A \\ z_A \end{bmatrix}=\begin{bmatrix} \vec{a^T_1}\vec{b_1} & \vec{a^T_1}\vec{b_2} & \vec{a^T_1}\vec{b_3} \\ \vec{a^T_2}\vec{b_1} & \vec{a^T_2}\vec{b_2} & \vec{a^T_2}\vec{b_3} \\ \vec{a^T_3}\vec{b_1} & \vec{a^T_3}\vec{b_2} & \vec{a^T_3}\vec{b_3} \end{bmatrix} \begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix}\tag{2} xAyAzA = a1T b1 a2T b1 a3T b1 a1T b2 a2T b2 a3T b2 a1T b3 a2T b3 a3T b3 xByBzB (2)
我们用字母来代替公式(2),可得:
P A = R P B (3) \bold{P_A}=\bold{R}\bold{P_B}\tag{3} PA=RPB(3)
公式(3)中的 R \bold{R} R被称为旋转矩阵。旋转矩阵 R \bold{R} R是一个行列式为1的正交矩阵,满足 R − 1 = R T \bold{R^{-1}}=\bold{R^T} R1=RT。所以有
P B = R − 1 P A = R T P A (4) \bold{P_B}=\bold{R^{-1}}\bold{P_A}=\bold{R^T}\bold{P_A}\tag{4} PB=R1PA=RTPA(4)
R \bold{R} R只定义了旋转,公式(3)满足两个坐标系原点相同的情况下的坐标换算。假设两个坐标系的原点并不重合,我们则需要对其进行平移。加一个三维的平移矩阵 T \bold{T} T即可:
P B = R T P A + T (5) \bold{P_B}=\bold{R^T}\bold{P_A}+\bold{T}\tag{5} PB=RTPA+T(5)
公式(5)完成的是,两个坐标系( A A A B B B)换算,我们称为相对位姿换算。如果把任意坐标系转换为世界坐标系,我们就称为绝对位姿换算。我们不难推出绝对位姿的换算方法,首先,我们把世界坐标系原点平移到相机坐标系:
P w ^ = P w − C (6) \bold{\hat{P_w}=P_w -C}\tag{6} Pw^=PwC(6)
其中, C \bold{C} C为两个坐标系原点的偏移量。根据公式(3)我们可以得到:
P c a m = R P w ^ = R ( P w − C ) = R P w − R C = R P w + T (7) \bold{P_{cam}} = \bold{R\hat{P_w}}=\bold{R(P_w - C)}=\bold{RP_w}-\bold{RC}=\bold{RP_w}+\bold{T}\tag{7} Pcam=RPw^=R(PwC)=RPwRC=RPw+T(7)
公式(7)就是本文的精髓:从世界坐标系中算出相机坐标系的坐标。其中
T = − R C (8) \bold{T}=-\bold{R}\bold{C}\tag{8} T=RC(8)
C = − R T T (9) \bold{C}=-\bold{R^TT}\tag{9} C=RTT(9)
通过公式(7),我们就可以将相机坐标系中的点换算到世界坐标系了。这里的 R \bold{R} R T \bold{T} T就是我们的相机外参数了。通常表示为一个 3 × 4 3\times4 3×4的矩阵:
E = ( R   T ) (10) \bold{E}=(\bold{R} \ \bold{T})\tag{10} E=(R T)(10)
如果需要从相机坐标系换算出世界坐标系,可依照
P w = R T ( P c a m − T ) (11) \bold{P_w=R^T(P_{cam}-T)}\tag{11} Pw=RT(PcamT)(11)
本文全部公式为皆为手动推理,若有疑问或指教可留言交流~

你可能感兴趣的:(三维重建,AI数学,计算机视觉,多视几何,多目立体,相机参数,外参数)