参数估计是计算机视觉中经常遇到的一个问题,为较好的估计参数,人们发明了各种各样的算法。这里我们就以单应矩阵H的估计为例,一个个介绍这些常用算法。
DLT算法
DLT(direct linear transform)算法是一个用于解决包含尺度的最小二乘问题的算法。可以解决的问题包括相机内参估计、单应矩阵估计、基础矩阵估计等。
以单应矩阵H的估算为例。由于H为
3
×
3
3\times3
3×3的矩阵,除去尺度的影响之后有8个自由度。需要4对对应点来求解。假设某一对对应点
x
i
,
x
i
′
\textbf x_i,\textbf x_i'
xi,xi′,则
x
i
′
=
H
x
i
=
[
h
1
T
x
i
h
2
T
x
i
h
3
T
x
i
]
\textbf x_i'=H\textbf x_i=\begin{bmatrix}h^{1T}\textbf x_i\\h^{2T}\textbf x_i\\h^{3T}\textbf x_i\end{bmatrix}
xi′=Hxi=⎣⎡h1Txih2Txih3Txi⎦⎤
其中
h
j
T
h^{jT}
hjT代表H的第j行。
假设 x i ′ = ( x i ′ , y i ′ , w i ′ ) T \textbf x_i'=(x_i',y_i',w_i')^T xi′=(xi′,yi′,wi′)T。对等式叉乘一个 x i ′ \textbf x_i' xi′我们得到
x
i
′
×
H
x
i
=
[
y
i
′
h
3
T
x
i
−
w
i
′
h
2
T
x
i
w
i
′
h
1
T
x
i
−
x
i
′
h
3
T
x
i
x
i
′
h
2
T
x
i
−
y
i
′
h
1
T
x
i
]
=
0
\textbf x'_i \times H\textbf x_i = \begin{bmatrix}y_i'h^{3T}\textbf x_i-w'_ih^{2T}\textbf x_i\\w'_ih^{1T}\textbf x_i-x'_ih^{3T}\textbf x_i \\x'_ih_{2T}\textbf x_i-y_i'h^{1T}\textbf x_i\end{bmatrix} = 0
xi′×Hxi=⎣⎡yi′h3Txi−wi′h2Txiwi′h1Txi−xi′h3Txixi′h2Txi−yi′h1Txi⎦⎤=0
即
(1)
[
0
T
−
w
i
′
x
i
T
y
i
′
x
i
T
w
i
′
x
i
T
0
T
−
x
i
′
x
i
T
−
y
i
′
x
i
T
x
i
′
x
i
T
0
T
]
[
h
1
h
2
h
3
]
=
0
\begin{bmatrix}0^T&-w'_i\textbf x^T_i&y_i'\textbf x^T_i \\\ w'_i\textbf x_i^T&0^T&-x'_i\textbf x_i^T \\\ -y'_i\textbf x_i^T&x'_i\textbf x^T_i&0^T\end{bmatrix} \begin{bmatrix}\textbf h^1 \\ \textbf h^2 \\ \textbf h^3\end{bmatrix} =0\tag{1}
⎣⎡0T wi′xiT −yi′xiT−wi′xiT0Txi′xiTyi′xiT−xi′xiT0T⎦⎤⎣⎡h1h2h3⎦⎤=0(1)
可以记为
A
i
h
=
0
A_ih=0
Aih=0。其中A是一个
3
×
9
3\times9
3×9的矩阵,h是一个9维向量,它的元素对应H中的元素。即
h
=
[
h
1
h
2
h
3
]
,
H
=
[
h
1
T
h
2
T
h
3
T
]
h=\begin{bmatrix}h^1\\h^2\\h^3\end{bmatrix},H=\begin{bmatrix}h^{1T}\\h^{2T}\\h^{3T}\end{bmatrix}
h=⎣⎡h1h2h3⎦⎤,H=⎣⎡h1Th2Th3T⎦⎤
可以看到, A i h = 0 A_ih=0 Aih=0是一个关于h的线性方程, A i A_i Ai可以由对应点坐标得到。同时A的第三行其实可以由前两行线性表出。由此每对点实际上是给出了H的两个约束。简化A可以得到一个 2 × 9 2\times 9 2×9的矩阵。
四点法
取四对点,将它们的线性方程系数矩阵进行叠加我们就得到了一个 8 × 9 8\times 9 8×9(去除线性相关的行)或者 12 × 9 12\times 9 12×9的矩阵,不论如何这个矩阵的秩都为8。于是我们可以从线性方程 A i h = 0 A_ih=0 Aih=0的一维零空间中得到h。这样的h有无穷多,彼此相差一个尺度,一般为求得唯一的解我们假设 ∣ ∣ h ∣ ∣ = 1 ||h||=1 ∣∣h∣∣=1。
这种解法也称为最小解,因为它使用的点数最少。
###多于四点的情况
当两幅图像中的对应点大于4对时,由于噪声的存在,矩阵A的秩为9,得到的线性方程只有零解。我们称这种方程为超定方程,此时可以求它的最小二乘解。即
m
i
n
∣
∣
A
h
∣
∣
min||Ah||
min∣∣Ah∣∣。对它的求解同样可以使用SVD分解。这将在后面进一步进行介绍。
退化
在使用四点法时,如果其中3点共线,就会发生退化。(很容易理解,3点共线=一点可以由其他两点线性表出=缺秩)从而得到无穷多解。这种在多于4点的情况也可能发生。
直线与混合情况下的求解
根据对偶原理,显然也可以根据两幅图像中的对应直线对。由
l
i
=
H
T
l
i
′
l_i=H^Tl_i'
li=HTli′可以进行求解,在此不多赘述。
混合情况下,3个直线对和三个点对互相等价(三角形),从而可以转换成纯点或纯直线的求解。2个直线对、2个点对的情况,和它的对偶情况无法求解,因为这相当于5个点对,其中有4个点共线点情况。