CS231A:Vanishing Points and Lines
消影点
由于透视的原因, 本不应相交的平行线会在图像中的无穷远处相交, 本来等距的点之间的距离也会变成单调递减, 所以会有消影点:

上图是直线中的消影形成, X是世界直线, C是摄像机位置, x是图像直线, 可知世界直线和图像直线是不平行的。
本来X_1,X_2,...,X是等距的,在x图像直线不是这样的,消影点通过过摄像机中心的平行于世界直线的直线 和图像直线 求交点获取
所以消影点和世界直线的位置无感,只和与图像直线的夹角 相关。
推广到3D空间:

设一直线方向为d,那么消影点就是过摄像机中心且方向为d的射线与图像平面的交点v:
v = PX_{\infty} = k[I|0] \begin{pmatrix} d \\ 0 \end{pmatrix} = Kd
由消影点求摄像机旋转 :
某摄像机拍了两张图,其中某景物在图一中的消影点是v,在图二中的消影点是v',先得到消影方向d :
d_i = \frac{K^{-1}v_i}{||K^{-1}v_i||}
用归一化因子||K^{-1}v_i||来保证单位矢量,通过下式求得R:
d'_i = Rd_i
由消影点确定直线夹角 :
可以确定图像中两条直线间的夹角:
cos\theta =\frac{d_1 \cdot d_2}{||d_1||\ ||d_2||} = \frac{v^T_1wv_2}{\sqrt{v^T_1wv_1}\sqrt{v^T_2wv_2}}
其中:
w = (KK^T)^{-1}
消影线
消影线是三维空间的平面的概念

\pi是景物平面,取一个过摄像机中心C的平行于 \pi的平面,交图像平面与直线l,l就是消影线。
消影线和景物平面的位置 无关,和景物平面的法向量 n有关
l_{horiz} = H^{-T}_P l_{\infty}
l_{\infty} = [0\ 0\ 0\ 1]^T

地面消影线应该也就是地平线吧
有了l_{horiz}就能得出平面的法向量 :
n = K^Tl_{horiz}
只要l是一个过相机中心的平面上的一条直线,都可以用这个公式来求这个平面的法向量
然后就能计算出两个平面的夹角 :
cos\theta =\frac{n_1 \cdot n_2}{||n_1||\ ||n_2||} = \frac{l^T_1wl_2}{\sqrt{l^T_1wl_1}\sqrt{l^T_2wl_2}}
用消影点和消影线来确定标定K

现在有单张图片,且有三个消影点,只使用这些信息来求K:
我们知道这三个平面都是相互正交的,我们可以得到v_1wv_2 = 0。
w是取决于K的gngy偶,K有五个自由度,v_1wv_2=0能提供一个约束;共有三个正交平面的投影点:v_1wv_2 = v_1wv_3 = v_2wv_3=0,这样共提供了三个约束。
如果设定是zero-skew并且是正方形的像素,那么又能提供两个约束,此时w的方程变为:

w是一个3\times 3矩阵,假设s = K_{12}=0,且[w_{ij} = w = K^{-T}K^{-1},那么w_{12} = w_{21} = 0,如果还满足\alpha_x = K_{11} = K_{22} = \alpha_y,那么w_{11} = w_{22}
index从1开始
有了w之后,就能用Cholesky分解法求出K
