除了基本矩阵和本质矩阵,我们还有一种称为单应矩阵(Homography) H H H 的东西,它描述了两个平面之间的映射关系。若场景中的特征点都落在同一平面上(比如墙,地面等),则可以通过单应性来进行运动估计。这种情况在无人机携带的俯视相机,或扫地机携带的顶视相机中比较常见。
单应矩阵通常描述处于共同平面上的一些点,在两张图像之间的变换关系。考虑在图像 I 1 I1 I1 和 I 2 I2 I2 有一对匹配好的特征点 p 1 p1 p1 和 p 2 p2 p2。这些特征点落在某平面上。设这个平面满足方程:
n T P + d = 0 \boldsymbol{n}^{T} \boldsymbol{P}+d=0 nTP+d=0
稍加整理,得:
− n T P d = 1 -\frac{\boldsymbol{n}^{T} \boldsymbol{P}}{d}=1 −dnTP=1
然后,得:
p 2 ≃ K ( R P + t ) ≃ K ( R P + t ⋅ ( − n T P d ) ) ≃ K ( R − t n T d ) P ≃ K ( R − t n T d ) K − 1 p 1 \begin{aligned} p_{2} & \simeq K(R P+t) \\ & \simeq K\left(R P+t \cdot\left(-\frac{n^{T} P}{d}\right)\right) \\ & \simeq K\left(R-\frac{t n^{T}}{d}\right) P \\ & \simeq K\left(R-\frac{t n^{T}}{d}\right) K^{-1} p_{1} \end{aligned} p2≃K(RP+t)≃K(RP+t⋅(−dnTP))≃K(R−dtnT)P≃K(R−dtnT)K−1p1
于是,我们得到了一个直接描述图像坐标 p 1 p1 p1 和 p 2 p2 p2 之间的变换,把中间这部分记为 H H H,于是:
p 2 ≃ H p 1 p_{2} \simeq H p_{1} p2≃Hp1
它的定义与旋转、平移以及平面的参数有关。与基础矩阵 F F F 类似,单应矩阵 H H H 也是一个 3 × 3 3 × 3 3×3 的矩阵,求解时的思路也和 F F F 类似,同样地可以先根据匹配点计算 H H H,然后将它分解以计算旋转和平移。把上式展开,得:
( u 2 v 2 1 ) ≃ ( h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ) ( u 1 v 1 1 ) \left(\begin{array}{c}u_{2} \\ v_{2} \\ 1\end{array}\right) \simeq\left(\begin{array}{ccc}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_{1} \\ v_{1} \\ 1\end{array}\right) ⎝⎛u2v21⎠⎞≃⎝⎛h1h4h7h2h5h8h3h6h9⎠⎞⎝⎛u1v11⎠⎞
请注意,这里的等号依然是 ≃ \simeq ≃而不是普通的等号,所以H矩阵也可以乘以任意非零常数。我们在实际处理中可以令 h 9 = 1 h_{9}=1 h9=1(在它取非零值时)。然后根据第 3 3 3行,去掉这个非零因子,于是有
u 2 = h 1 u 1 + h 2 v 1 + h 3 h 7 u 1 + h 8 v 1 + h 9 u_{2} =\frac{h_{1} u_{1}+h_{2} v_{1}+h_{3}}{h_{7} u_{1}+h_{8} v_{1}+h_{9}} u2=h7u1+h8v1+h9h1u1+h2v1+h3
v 2 = h 4 u 1 + h 5 v 1 + h 6 h 7 u 1 + h 8 v 1 + h 9 v_{2}=\frac{h_{4} u_{1}+h_{5} v_{1}+h_{6}}{h_{7} u_{1}+h_{8} v_{1}+h_{9}} v2=h7u1+h8v1+h9h4u1+h5v1+h6
整理得:
h 1 u 1 + h 2 v 1 + h 3 − h 7 u 1 u 2 − h 8 v 1 u 2 = u 2 h_{1} u_{1}+h_{2} v_{1}+h_{3}-h_{7} u_{1} u_{2}-h_{8} v_{1} u_{2}=u_{2} h1u1+h2v1+h3−h7u1u2−h8v1u2=u2
h 4 u 1 + h 5 v 1 + h 6 − h 7 u 1 v 2 − h 8 v 1 v 2 = v 2 . h_{4} u_{1}+h_{5} v_{1}+h_{6}-h_{7} u_{1} v_{2}-h_{8} v_{1} v_{2}=v_{2} . h4u1+h5v1+h6−h7u1v2−h8v1v2=v2.
这样一组匹配点对就可以构造出两项约束(事实上有三个约束,但是因为线性相关,只取前两个),于是自由度为 8 8 8 的单应矩阵可以通过 4 4 4 对匹配特征点算出(在非退化的情况下,即这些特征点不能有三点共线的情况),即求解以下的线性方程组(当 h 9 h_9 h9 = 0 时,右侧为零):
( 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 ) ( h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 ) = ( u 2 1 v 2 1 u 2 2 v 2 2 u 2 3 v 2 3 u 2 4 v 2 4 ) \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}{c}h_{1} \\ h_{2} \\ h_{3} \\ h_{4} \\ h_{5} \\ h_{6} \\ h_{7} \\ h_{8}\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) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛u110u120u130u140v110v120v130v140101010100u110u120u130u140v110v120v130v1401010101−u11u21−u11v21−u12u22−u12v22−u13u23−u13v23−u14u24−u14v24−v11u21−v11v21−v12u22−v12v22−v13u23−v13v23−v14u24−v14v24⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛h1h2h3h4h5h6h7h8⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛u21v21u22v22u23v23u24v24⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞
这种做法把 H H H 矩阵看成了向量,通过解该向量的线性方程来恢复 H H H,又称直接线性变换(Direct Linear Transform)。与本质矩阵相似,求出单应矩阵以后需要对其进行分解,才可以得到相应的旋转矩阵 R 和平移向量 t。分解的方法包括数值法与解析法。与本质矩阵的分解类似,单应矩阵的分解同样会返回四组旋转矩阵与平移向量,并且同时可以计算出它们分别对应的场景点所在平面的法向量。如果已知成像的地图点的深度全为正值(即在相机前方),则又可以排除两组解。最后仅剩两组解,这时需要通过更多的先验信息进行判断。通常我们可以通过假设已知场景平面的法向量来解决,如场景平面与相机平面平行,那么法向量 n n n 的理论值为 1 T 1^{T} 1T。