〇 、單應矩陣介紹

單應矩陣

\bf H\

(Homography),約束了同一 3D 空間點在兩個畫素平面的 2D 齊次座標。

\mathbf{q}_{b} ∝ \mathbf{H}_{b a} \mathbf{q}_{a} \tag{0.1}\

展開:

\left[\begin{array}{c}u_{a} \\  v_{a} \\ 1\end{array}\right] ∝ \left[\begin{array}{lll} H_1 & H_2 & H_3 \\ H_4 & H_5 & H_6 \\ H_7 & H_8 & H_9 \end{array}\right] \left[\begin{array}{c}u_{b} \\ v_{b} \\ 1\end{array}\right] \tag{0.2}\

正比於符號

∝\

可以理解為單應矩陣

{\bf H}\

約束了

\mathbf{q}_{b}\

\mathbf{H}_{b a} \mathbf{q}_{a}\

的方向是同方向,而不約束尺度。可透過

叉乘

計算消去齊次的尺度因子,因此上面的約束還可以表達為如下形式:

\mathbf{q}_{b}× \mathbf{H}_{b a} \mathbf{q}_{a}  =\mathbf{0} \tag{0.3}\

因為

\mathbf{q}_{b}\

\mathbf{H}_{b a} \mathbf{q}_{a}\

同方向,所以其叉乘結果為

\bf 0\

向量。

依據推導可得,單應矩陣 H 由兩相機旋轉和平移資訊

\bf (R,t)\

,兩相機內參矩陣

\bf K\

,平面引數組成

({\bf n},d)\

\mathbf{H}_{b a}  =\mathbf{K}_{b} \mathbf{R}_{b a} \left(  {\bf I}+\frac{1} {d_{a}}·\mathbf{t}_{ab}\mathbf{n}_{a}^{\top} \right) \mathbf{K}_{a}^{-1} \tag{0.4}\

下面給出上述單應矩陣公式的推導和理解過程。

一、基本設定

1。 相機系座標

3D 空間點在相機系下的座標

\bf p\

為:

{\bf p}=\left[\begin{array}{l}x \\ y \\ z\end{array}\right] \tag{1.1}\

2。 畫素系座標

相機系座標投影到畫素系的齊次座標:

\mathbf{q} =\left[\begin{array}{l}u \\ v \\ 1\end{array}\right] =\frac{1}{z}·\mathbf{K}{\bf p} \tag{1.2}\

其中:

\bf q\

為畫素系齊次座標;

\bf K\

為相機內參矩陣:

\bf K =\left[\begin{array}{ccc}f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1\end{array}\right]\

3。 平面引數

3D 空間點

\bf p\

所在的平面在相機系下的平面引數為:

\left\{\mathbf{n}, d\right\} \tag{1.3}\

其中:

\mathbf{n}\

為平面法向量;

d\

相機系原點到平面距離。

3D 空間點

\bf p\

位於平面

\left\{\mathbf{n}, d\right\}\

上由以下方程表達:

\mathbf{n^{\top}}·{\bf p}+d=0  \tag{1.4}\

二、平面引數:由畫素系計算相機系

1。 由畫素系座標計算相機系座標:

{\bf p}=z·\mathbf{K}^{-1}\mathbf{q} \tag{2.1}\

由於存在未知的深度

z\

,因此無法由畫素系計算出相機系座標。

2。 平面引數計算深度

結合(1。4)(2。1)得:

z·\mathbf{n}^{\top} \mathbf{K}^{-1} \mathbf{q}+d=0   \tag{2.3}\

整理得:

z=-\frac{d}  {\mathbf{n}^{\top} \mathbf{K}^{-1} \mathbf{q}}   \tag{2.4}\

可見:透過 3D 點所在平面引數和畫素系座標

\bf q\

可以計算出 3D 點的深度

z\

結合(2。1)(2。4)得:

{\bf p}=-\frac{d}{\mathbf{n}^{\top} \mathbf{K}^{-1} \mathbf{q}}· \mathbf{K}^{-1} \mathbf{q}   \tag{2.5}\

可知,加入平面資訊

\left\{\mathbf{n}, d\right\}\

後,可完全由畫素座標還原出相機系座標。

三、單應矩陣:由畫素系 a 計算畫素系 b

1。 由 a 系畫素計算 b 系畫素

有相機系 a 下的點

{\bf p}_a\

和 相機系 b 下的點

{\bf p}_b\

\left[\begin{array}{c} {\bf p}_{b} \\  1\end{array}\right] = \underbrace{ \left[\begin{array}{cc} \mathbf{R}_{b a} & \mathbf{t}_{ba} \\  \mathbf{0}^{} & 1 \end{array}\right]}_{\mathbf{T}_{b a}} \left[\begin{array}{c} {\bf p}_{a}  \\ 1\end{array}\right] \tag{3.1}\

{\bf p}_b=\mathbf{R}_{b a} {\bf p}_{a}+\mathbf{t}_{ba} \tag{3.2}\

其中:

{\bf R}_{ba}\

表示:1。 b 系下 a 系的姿態。2。 a 繫到 b 系的座標旋轉變換;

{\bf t}_{ba}\

表示:1。 b 系下 a 系的位置。2。 a 繫到 b 系的座標平移變換。

轉到對應畫素系,有關係:

z_{b}·\mathbf{K}_{b}^{-1} \mathbf{q}_{b} =z_{a}·\mathbf{R}_{ba} \mathbf{K}_{a}^{-1} \mathbf{q}_{a}+\mathbf{t}_{ba}  \tag{3.3}\

可得到,由 a 系畫素表達的 b 系畫素:

\mathbf{q}_{b}  =\frac{z_{a}}{z_{b}}·\mathbf{K}_{b} \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} \mathbf{q}_{a}  +\frac{1}{z_{b}} ·\mathbf{K}_{b} \mathbf{t}_{ba}   \tag{3.4}\

但是存在未知數

z_a,z_b\

,所以無法直接透過 a 系畫素得到 b 系畫素。

2。 加入平面引數

結合(2。4)(3。4)

\begin{align*} \mathbf{q}_{b}  &=\frac{z_{a}}{z_{b}} · \mathbf{K}_{b} \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} \mathbf{q}_{a} +\frac{1}{z_{b}}· \mathbf{K}_{b} \mathbf{t}_{ba} \\  &=\frac{z_{a}}{z_{b}} ·\mathbf{K}_{b}  \left(  \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} \mathbf{q}_{a} + \frac{\mathbf{t}_{b a}}{z_{a}} \right) \\  &=\frac{z_{a}}{z_{b}}·\mathbf{K}_{b}  \left(  \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} \mathbf{q}_{a} -\frac{\mathbf{t}_{b a}\mathbf{n}_{a}^{\top} \mathbf{K}_{a}^{-1} \mathbf{q}_{a}} {d_{a}}  \right) \\  &=\frac{z_{a}}{z_{b}}·\mathbf{K}_{b}  \left(  \mathbf{R}_{b a}  -\frac{\mathbf{t}_{b a}\mathbf{n}_{a}^{\top}} {d_{a}}  \right) \mathbf{K}_{a}^{-1} \mathbf{q}_{a}\\  &=\frac{z_{a}}{z_{b}}·\mathbf{K}_{b}  \left(  \mathbf{R}_{b a}  + \mathbf{R}_{b a}\mathbf{t}_{ab} \frac{\mathbf{n}_{a}^{\top}} {d_{a}} \right) \mathbf{K}_{a}^{-1} \mathbf{q}_{a}\\  &=\frac{z_{a}}{z_{b}} ·\mathbf{K}_{b} \mathbf{R}_{b a} \left(  {\bf I}+\frac{1} {d_{a}}·\mathbf{t}_{ab}\mathbf{n}_{a}^{\top} \right) \mathbf{K}_{a}^{-1} \mathbf{q}_{a}\\  &=\mathbf{K}_{b} \mathbf{R}_{b a} \left(  {\bf I}+\frac{1} {d_{a}}·\mathbf{t}_{ab}\mathbf{n}_{a}^{\top} \right) \mathbf{K}_{a}^{-1} \mathbf{q}_{a}\\  \end{align*}  \tag{3.5}\

上面推導用到的理論:

{\bf R}_{ba}{\bf t}_{ab}=-{\bf t}_{ba}\

齊次座標與係數無關,因此可省去

\frac{z_a}{z_b}\

可見,加入 3D 點的平面引數後,可由 a 系下畫素座標完全計算出對應的 b 系下畫素座標。

3。 定義單應矩陣

符號簡化:

\mathbf{q}_{b}=\mathbf{H}_{b a}  \mathbf{q}_{a} \tag{3.6}\

其中

\mathbf{H}_{b a}\

為由畫素系 a 到畫素系 b 的

單應矩陣

\mathbf{H}_{b a}  =\mathbf{K}_{b} \mathbf{R}_{b a} \left(  {\bf I}+\frac{1} {d_{a}}·\mathbf{t}_{ab}\mathbf{n}_{a}^{\top} \right) \mathbf{K}_{a}^{-1}  \tag{3.7}\

單應矩陣包含了相機內參矩陣

\mathbf{K}_{a},\mathbf{K}_{b}\

、旋轉

\mathbf{R}_{b a}\

、平移

\mathbf{t}_{ab}\

和平面引數

\{\mathbf{n}_a,d_a\}\

資訊。引入單應矩陣後,可以直接透過 a 系畫素得到 b 系畫素。

四、求解單應矩陣

(3。7)給出的單應矩陣的定義是透過旋轉平移資訊計算的,現實中有時不知道旋轉平移資訊,而知道兩張影象中的匹配點,可以由匹配點計算出單應矩陣。

對於圖片上的一對匹配點有如下關係:

q_2∝\mathbf{H}q_1 \tag{4.1}\

展開得:

\begin{align*}  \left(\begin{array}{c}u_{2} \\ v_{2} \\ 1\end{array}\right)  ∝  \left(\begin{array}{lll}  \mathbf{H}_{11} & \mathbf{H}_{12} & \mathbf{H}_{13} \\   \mathbf{H}_{21} & \mathbf{H}_{22} & \mathbf{H}_{23} \\   \mathbf{H}_{31} & \mathbf{H}_{32} & \mathbf{H}_{33}  \end{array}\right)\left(\begin{array}{c}u_{1} \\ v_{1} \\ 1\end{array}\right) \end{align*} \tag{4.2}\

1。 單應矩陣有 8 個未知數

因為轉換的是齊次座標,所以單應矩陣

\mathbf{H}\

與尺度無關,也即

a\mathbf{H}\

\mathbf{H}\

的作用是相同的,因此自由度為 8,使用

\mathbf{H}_{33}=1\

來進行歸一化。

\left( \begin{array}{c}u_{2} \\ v_{2} \\ 1\end{array}\right) ∝ \left(\begin{array}{lll}H_{11} & H_{12} & H_{13} \\ H_{21} & H_{22} & H_{23} \\ H_{31} & H_{32} & 1\end{array}\right)\left(\begin{array}{c}u_{1} \\ v_{1} \\ 1 \end{array}\right) \tag{4.3}\

H\

共 8 個未知數,需要 8 個方程來解。

2。 一對匹配點提供 2 個方程

由於是齊次座標,所以展開是這種形式:

\left\{\begin{aligned}   u_{2} &= \frac{H_{11} u_{1}+H_{12} v_{1}+H_{13}}{H_{31} u_{1}+H_{32} v_{1}+1} \\   v_{2} &= \frac{H_{21} u_{1}+H_{22} v_{1}+H_{23}}{H_{31} u_{1}+H_{32} v_{1}+1} \end{aligned}\right. \tag{4.4}\

3。 四對匹配點提供 8 個方程

\left(\begin{array}{cccccccc}u_{1}^{1} & v_{1}^{1} & 1 & 0 & 0 & 0 & -u_{1}^{1} u_{2}^{1} & -v_{1}^{1} u_{2}^{1} \\ 0 & 0 & 0 & u_{1}^{1} & v_{1}^{1} & 1 & -u_{1}^{1} v_{2}^{1} & -v_{1}^{1} v_{2}^{1} \\ u_{1}^{2} & v_{1}^{2} & 1 & 0 & 0 & 0 & -u_{1}^{2} u_{2}^{2} & -v_{1}^{2} u_{2}^{2} \\ 0 & 0 & 0 & u_{1}^{2} & v_{1}^{2} & 1 & -u_{1}^{2} v_{2}^{2} & -v_{1}^{2} v_{2}^{2} \\ u_{1}^{3} & v_{1}^{3} & 1 & 0 & 0 & 0 & -u_{1}^{3} u_{2}^{3} & -v_{1}^{3} u_{2}^{3} \\ 0 & 0 & 0 & u_{1}^{3} & v_{1}^{3} & 1 & -u_{1}^{3} v_{2}^{3} & -v_{1}^{3} v_{2}^{3} \\ u_{1}^{4} & v_{1}^{4} & 1 & 0 & 0 & 0 & -u_{1}^{4} u_{2}^{4} & -v_{1}^{4} u_{2}^{4} \\ 0 & 0 & 0 & u_{1}^{4} & v_{1}^{4} & 1 & -u_{1}^{4} v_{2}^{4} & -v_{1}^{4} v_{2}^{4}\end{array}\right)   \left(\begin{array}{l}H_{11} \\ H_{12} \\ H_{13} \\ H_{21} \\ H_{22} \\ H_{23} \\ H_{31} \\ H_{32}\end{array}\right)   = \left(\begin{array}{c}u_{2}^{1} \\ v_{2}^{1} \\ u_{2}^{2} \\ v_{2}^{2} \\ u_{2}^{3} \\ v_{2}^{3} \\ u_{2}^{4} \\ v_{2}^{4}\end{array}\right) \tag{4.5}\

解此線性方程組,可得 單應矩陣

\mathbf{H}\