直接线性变换(DLT)算法
首先讨论由给定2D2D2D到2D2D2D的四组点对应xi↔xi′x_{i}\leftrightarrow x'_ixi↔xi′确定HHH的一种简单的线性算法。变换由方程xi′=Hxix'_i = Hx_ixi′=Hxi 给出。但因为这是一个齐次矢量方程; 因此 3 维矢量xi′x'_ixi′和HxiHx_iHxi不相等。可以用矢量叉乘:xi′×Hxi=0x'_i\times Hx_i=0xi′×Hxi=0表示。
如果将矩阵HHH的第jjj行记为hjTh^{jT}hjT,xi′=(xi′,yi′,wi′)T\boldsymbol{x'_i}=(x'_i,y'_i,w'_i)^Txi′=(xi′,yi′,wi′)T,则xi′×Hxi=0x'_i\times Hx_i=0xi′×Hxi=0可以转换成:
[0T−wi′xiTyi′xiTwi′xiT0T−xi′xiT−yi′xiTxi′xiT0T](h1h2h3)=0\begin{bmatrix}
\boldsymbol{0^{T}}&-w_{i}^{'}\boldsymbol{x_{i}^{T}} &y_{i}^{'}\boldsymbol{x_{i}^{T}} \\
w_{i}^{'}\boldsymbol{x_{i}^{T}}&\boldsymbol{0^{T}}& - x_{i}^{'}\boldsymbol{x_{i}^{T}}\\
-y_{i}^{'}\boldsymbol{x_{i}^{T}} & x_{i}^{'}\boldsymbol{x_{i}^{T}} & \boldsymbol{0^{T}}
\end{bmatrix}\begin{pmatrix}
\boldsymbol{h^{1}}\\
\boldsymbol{h^{2}}\\
\boldsymbol{h^{3}}
\end{pmatrix}=\boldsymbol{0}⎣⎡0Twi′xiT−yi′xiT−wi′xiT0Txi′xiTyi′xiT−xi′xiT0T⎦⎤⎝⎛h1h2h3⎠⎞=0
hhh是由矩阵HHH的元素组成的 9 维矢量:
h=(h1h2h3),H=[h1h2h3h4h5h6h7h8h9]\boldsymbol{h}=\begin{pmatrix}
\boldsymbol{h^{1}}\\
\boldsymbol{h^{2}}\\
\boldsymbol{h^{3}}
\end{pmatrix},H=\begin{bmatrix}
h_{1} & h_{2} &h_{3} \\
h_{4} & h_{5} & h_{6}\\
h_{7}&h_{8} & h_{9}
\end{bmatrix}h=⎝⎛h1h2h3⎠⎞,H=⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤
- Aih=0A_i\boldsymbol{h} =\boldsymbol{0}Aih=0是未知矢量h\boldsymbol{h}h 的线性方程.。矩阵AiA_iAi的元素是已知点的坐标的二次多项式。
- 虽然式中有三个方程,但仅有两个是线性独立的。在解HHH时常省去第三个等式。
- 该方程组对xi′\boldsymbol{x'_i}xi′的任何齐次坐标(xi′,yi′,wi′)T( x'_i,y'_i, w'_i )^ T(xi′,yi′,wi′)T成立。
求解HHH
每组点对应给出关于HHH元素的两个独立的方程。给定四组这样的点对应,便获得方程组Ah=0A\boldsymbol{h} =\boldsymbol{0}Ah=0。
超定解
如果给出的点对应xi↔xi′x_{i}\leftrightarrow x'_ixi↔xi′多于四组,方程组 Ah=0A\boldsymbol{h} =\boldsymbol{0}Ah=0是超定的。如果点的位置是精确的,那么AAA的秩仍然为 8 并有一维零空间,并且存在精确解h\boldsymbol{h}h。如果图像坐标的测量是不精确的,方程组将不存在精确解。我们需要求一个适当的代价函数取最小值的矢量h\boldsymbol{h}h。通常附加范数条件,既然不存在Ah=0A\boldsymbol{h} =\boldsymbol{0}Ah=0的精确解,很自然会在通常约束∥h∥=1\left \| \boldsymbol{h} \right \|=1∥h∥=1下最小化范数∥Ah∥\left \| A\boldsymbol{h} \right \|∥Ah∥。这等价于求商∥Ah∥/∥h∥\left \| A\boldsymbol{h} \right \|/\left \| \boldsymbol{h} \right \|∥Ah∥/∥h∥的最小值问题。该解是ATAA^TAATA的最小特征值的(单位)特征矢量。由此所得到的算法称为基本 DLT 算法。
非齐次解
另 一种方法是把等式转成非齐次线性方程组,即给矢量h\boldsymbol{h}h中的某个元素强加上hi=1h_i=1hi=1的条件。
[000−xiwi′−yiwi′−wiwi′xiyi′yiyi′xiwi′yiwi′wiwi′000−xixi′−yixi′]h~=[−wiyi′−wixi′]\begin{bmatrix}
0 & 0 & 0& -x_iw'_i & -y_iw'_i & -w_iw'_i &x_iy'_i & y_iy'_i\\
x_iw'_i& y_iw'_i&w_iw'_i & 0 & 0 & 0 &-x_ix'_i &-y_ix'_i
\end{bmatrix}\tilde{\boldsymbol{h}}=\begin{bmatrix}
-w_iy'_i\\
-w_ix'_i
\end{bmatrix}[0xiwi′0yiwi′0wiwi′−xiwi′0−yiwi′0−wiwi′0xiyi′−xixi′yiyi′−yixi′]h~=[−wiyi′−wixi′]
其中h~\tilde{\boldsymbol{h}}h~是由h\boldsymbol{h}h的前 8 个元素组成的 8 维矢量。
但是,如果事实上真正的解是hi=0h_i = 0hi=0,那么不存在一个因子kkk使khi=1kh_i = 1khi=1.。这意味着令hi=1h_i = 1hi=1得不到真解。
退化配置
出现某种配置不能确定唯一解的情形称为退化。注意退化的定义既涉及配置也涉及变换类型。而且退化问题不仅限于最小配置解。如果多出来的( 精确的,即无误差的)点对应也共线,那么退化问题仍没有解决。
由线和其他,实体求解
到目前为止以及本文的其余部分,都只讨论由点对应采计算单应。然而线对应和二次曲线的对应也可以来计算单应。于是就产生计算一个单应(或任何其他关系)需要多少组对应的问题。一般的原则是约束数必须等于或大于变换的自由度数。
但采用混合类型的对应来计算HHH时必须谨慎。例如一个2D2D2D单应不能由两组点对应和两组线对应唯一确定,但能由三级点和一组线或一组点和三组线来唯一确定,即使每种配置都有 8 个自由度也是如此。