计算机视觉系列(四):单应矩阵

单应矩阵

单应矩阵约束了同一3D空间点在两个像素平面上的2D坐标,本质上是射影平面上的可逆齐次线性变换。对于特征点对\(p_1,p_2\),用单应矩阵\(H21\)描述特征点对之间的变换关系,有:

\[\begin{equation} p_2=H_{21}*p_1 \tag{1} \end{equation}\]

其中\(H_{21}\)中的“21”表示从1到2的单应矩阵,也就是指“把坐标系2中的向量变换到坐标系1中”。下称矩阵形式,有

\[ \begin{equation} \begin{bmatrix} u_2\\v_2\\1 \end{bmatrix}= \begin{bmatrix} h_1&h_2&h_3\\h_4&h_5&h_6\\h_7&h_8&h_9 \end{bmatrix} \begin{bmatrix} u_1\\v_1\\1 \end{bmatrix} \tag{2} \end{equation} \]

两边左侧叉乘\(p_2\),则等式左侧为0,右侧向量叉乘转换为反对称矩阵,得到下式

\[ \begin{equation} \begin{bmatrix} 0&-1&v_2\\1&0&-u_2\\-v_2&u_2&0 \end{bmatrix} \begin{bmatrix} h_1&h_2&h_3\\h_4&h_5&h_6\\h_7&h_8&h_9 \end{bmatrix} \begin{bmatrix} u_1\\v_1\\1 \end{bmatrix}=0 \tag{3} \end{equation} \]

展开计算,有

\[ u_2=(h_1*u_1+h_2*v_1+h_3)/(h_7*u_1+h_8*v_1+h_9) \] \[ \begin{equation} v_2=(h_4*u_1+h_5*v_1+h_6)/(h_7*u_1+h_8*v_1+h_9) \tag{4} \end{equation} \]

两边乘分母,得到

\[ h_1*u_1+h_2*v_1+h_3-(h_7*u_1*u_2+h_8*v_1*u_2+h_9*u_2)=0 \] \[ \begin{equation} -(h_4*u_1+h_5*v_1+h_6)+(h_7*u_1*v_2+h_8*v_1*v_2+h_9*v_2)=0 \tag{5} \end{equation} \]

转化为矩阵形式,有

\[ \begin{equation} \begin{bmatrix} u_1&v_1&1&0&0&0&-u_1*u_2&-v_1*u_2&-u_2\\0&0&0&-u_1&-v_1&-1&u_1*v_2&v_1*v_2&v_2 \end{bmatrix} \begin{bmatrix} h_1\\h_2\\h_3\\h_4\\h_5\\h_6\\h_7\\h_8\\h_9 \end{bmatrix}=0 \tag{6} \end{equation} \]

令第一项为\(A\),第二项为\(X\),则有

\[ \begin{equation} AX=0 \tag{7} \end{equation} \]

这样,每对特征点提供两个约束,\(H\)共有9个元素,由于变换是齐次的,所以同一个单应矩阵\(H\)可以相差一个非零常数因子,因此一个单应矩阵有8个自由度,理论上提供四对点形成8个约束方程就可以求解。

通过单应矩阵恢复位姿\(R,t\)

从定义出发,单应矩阵通常描述处于共同平面的一些点在两张图像之间的变换关系。设图像\(I_1,I_2\)有一对匹配好的特征点\(p_1,p_2\),这个特征点落在平面P上,设这个平面满足方程

\[ n^TP+d=0 \]

整理得到

\[ -\frac{n^TP}{d}=1 \]

又因为

\[ s_1p_1=KP,s_2p_2=K(RP+t) \]

\[ p_2\simeq K(RP+t)\simeq K(RP+t \cdot (-\frac{n^TP}{d}))\simeq K(R-\frac{n^T}{d}P\simeq K(R-\frac{tn^T}{d})K^{-1}p_1 \]

从上面可以看出,单应矩阵\(H_{21}\)就是等式右边那一坨,设那一坨是A,A就包含了\(R,t\)的信息。

对H进行奇异值分解,会得到8组解\(R,T\),选出3D点在相机前方最多的解为最优解

Q:为什么是八组解?

A:已知约束条件

  • \(d_1\ge d_2 \ge d_3\)
  • \(\sum_{i=1}^3x_i^2=1\)

其中,\(d_i\)是奇异值,\(x_i\)是单位法向量n的坐标,所以平方和为1.

根据上面条件求解线性方程组,使其有非零解

\[ \left\{\begin{array}{l} \left(d^{\prime 2}-d_{2}^{2}\right) x_{1}^{2}+\left(d^{\prime 2}-d_{1}^{2}\right) x_{2}^{2}=0 \\ \left(d^{\prime 2}-d_{3}^{2}\right) x_{2}^{2}+\left(d^{\prime 2}-d_{2}^{2}\right) x_{3}^{2}=0 \\ \left(d^{\prime 2}-d_{1}^{2}\right) x_{3}^{2}+\left(d^{\prime 2}-d_{3}^{2}\right) x_{1}^{2}=0 \end{array}\right. \]

那么根据线性代数的知识可以知道,该线性方程组的行列式必须为0,即

\[ (d^{'2}-d_1^2)(d^{'2}-d_2^2)(d^{'2}-d_3^2)=0 \]

逐个分析\(d^{'}\)的取值

  • \(d^{'}=\pm d_1\)

    唯一解为:\(x_1=x_2=x_3=0\),不满足第二个条件

  • \(d^{'}=\pm d_3\)

    唯一解为:\(x_1=x_2=x_3=0\),不满足第二个条件

  • \(d^{'}=\pm d_2且d_1 \ne d_3\)

    有四组解:

\[ \left\{\begin{array}{l} x_{1}=\varepsilon_{1} \sqrt{\frac{d_{1}^{2}-d_{2}^{2}}{d_{1}^{2}-d_{3}^{2}}} \\ x_{2}=0 \\ x_{3}=\varepsilon_{3} \sqrt{\frac{d_{2}^{2}-d_{3}^{2}}{d_{1}^{1}-d_{3}^{2}}} \end{array}\right. \]

又,对于平移向量的公式

  • \(d^{'}>0\)

\[ t^{'}=(d_1-d_3)\begin{pmatrix} x_1 \\ 0 \\ -x_3 \end{pmatrix} \]

  • \(d^{'}<0\)

\[ t^{'}=(d_1+d_3)\begin{pmatrix} x_1 \\ 0 \\ x_3 \end{pmatrix} \]

可以看出,平移向量和每组解都有联系,因此就成了2*4=8组解,选出3D点在相机前方最多的解为最优解。