Homography
首先简化问题,我们假设有一个相机,其内参矩阵为$K_{3\times 3}$。用它拍了两幅照片,也就是两个view,对应两个相机坐标系,其中一个与世界坐标系重合:
- view 1:该相机坐标系与世界坐标系重合,即其对应的外参为$(I, 0)$
- $I$为旋转矩阵,此处为单位矩阵
- 0为位移向量,此处没有位移
- view 2:该相机坐标系对应的外参为$(R, T)$
- 对应的外参矩阵$\begin{bmatrix}R\mid T\end{bmatrix}_{4\times 4}$为世界坐标系到相机坐标系的变换
现在考虑在view 1下拍到的图片,看到的某一点P $(u, v)$,$u,v$为像素坐标。那么,$P_{v1}=K^{-1}\begin{bmatrix}u,v,1\end{bmatrix}^T=\begin{bmatrix}x,y,1\end{bmatrix}^T$就表示的是该点在view 1的相机坐标系下的坐标。另外$P_{v1}$的z坐标算出来会是1,也就是说$P_{v1}$落在第一个相机的成像平面上(z=1)。如果要把它转换成齐次坐标下的点,则xyz坐标保持不变,在w坐标上设置为1即可。
因为view 1的相机坐标系和世界坐标系重合,所以$P_{v1}$即为P在世界坐标系下的坐标。
然后我们将该点转换到相机2的坐标系。
我们知道,世界坐标系到相机2的变换矩阵为$\begin{bmatrix}R\mid T\end{bmatrix}_{4\times 4}$
则点P在相机2坐标系下的坐标为 \(\begin{bmatrix}R_{3\times 3}&T_{3\times1}\\0_{1\times3}&1\end{bmatrix}\begin{bmatrix}P_{v1}^T\mid 1\end{bmatrix}^T\)
该计算式和$R\cdot P_{v1}+T$是等价的。
另一方面,我们需要注意到一些东西:
- 由于我们在讨论单应性,所以假设$P_{v1}$落在一个平面上。
- 考虑平面$n^T\cdot (X,Y,Z)^T+d=0$,d为相机1距离平面的距离,$n$为平面的法向量,此处表示在相机1的坐标系下。
- 则$P_{v1}$满足$-\frac{n^T\cdot P_{v1}}{d}=1$
因此实际上,$R\cdot P_{v1}+T=R\cdot P_{v1}-T\cdot \frac{n^T\cdot P_{v1}}{d}$。 虽然点乘没有结合律,但经过笔者验算,此式可成立: \(\begin{align}R\cdot P_{v1}-T\cdot \frac{n^T\cdot P_{v1}}{d}=(R-\frac{T\cdot n^T}{d})_{3\times 3}P_{v1}\notag\end{align}\)
这样,我们就利用平面约束,将原来4x4的$\begin{bmatrix}R\mid T\end{bmatrix}$变换,改写成了3x3的形式。
由此,$\begin{bmatrix}U,V,W\end{bmatrix}^T=K(R-\frac{T\cdot n^T}{d})K^{-1}\begin{bmatrix}u,v,1\end{bmatrix}^T$,$(u,v)=(U/W, V/W)$即为点P在相机2相片上的像素坐标,$K(R-\frac{T\cdot n^T}{d})K^{-1}$即为单应性矩阵。
现在,考虑更复杂一点的情况,即:
- view 1:该相机坐标系对应的外参为$(R_1, T_1)$
- view 2:该相机坐标系对应的外参为$(R_2, T_2)$
这种情况的推导可参照zhuanlan.zhihu.com/p/363830541,最后的结果为:
\[H=KR_2(I-(R_2^TT_2-R_1^TT_1)n_1^TR_1/d)R_1^TK^{-1}\]其中$n_1$为平面法线在相机1坐标系下的表示。