CS231A:Vanishing Points and Lines

消影点

由于透视的原因, 本不应相交的平行线会在图像中的无穷远处相交, 本来等距的点之间的距离也会变成单调递减, 所以会有消影点:
在这里插入图片描述

上图是直线中的消影形成, X X 是世界直线, C C 是摄像机位置, x x 是图像直线, 可知世界直线和图像直线是不平行的。

本来 X 1 , X 2 , . . . , X X_1,X_2,...,X 是等距的,在 x x 图像直线不是这样的,消影点通过过摄像机中心的平行于世界直线的直线图像直线求交点获取

所以消影点和世界直线的位置无感,只和与图像直线的夹角相关。

推广到3D空间:
在这里插入图片描述

设一直线方向为 d d ,那么消影点就是过摄像机中心且方向为 d d 的射线与图像平面的交点 v v :
v = P X = k [ I 0 ] ( d 0 ) = K d v = PX_{\infty} = k[I|0] \begin{pmatrix} d \\ 0 \end{pmatrix} = Kd

由消影点求摄像机旋转
某摄像机拍了两张图,其中某景物在图一中的消影点是 v v ,在图二中的消影点是 v v' ,先得到消影方向 d d :
d i = K 1 v i K 1 v i d_i = \frac{K^{-1}v_i}{||K^{-1}v_i||}
用归一化因子 K 1 v i ||K^{-1}v_i|| 来保证单位矢量,通过下式求得 R R
d i = R d i d'_i = Rd_i

由消影点确定直线夹角
可以确定图像中两条直线间的夹角:
c o s θ = d 1 d 2 d 1   d 2 = v 1 T w v 2 v 1 T w v 1 v 2 T w v 2 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 = ( K K T ) 1 w = (KK^T)^{-1}


消影线

消影线是三维空间的平面的概念
在这里插入图片描述
π \pi 是景物平面,取一个过摄像机中心 C C 平行于 π \pi 的平面,交图像平面与直线 l l l l 就是消影线。

消影线和景物平面的位置无关,和景物平面的法向量 n n 有关

l h o r i z = H P T l l_{horiz} = H^{-T}_P l_{\infty}
l = [ 0   0   0   1 ] T l_{\infty} = [0\ 0\ 0\ 1]^T

在这里插入图片描述

地面消影线应该也就是地平线吧

有了 l h o r i z l_{horiz} 就能得出平面的法向量
n = K T l h o r i z n = K^Tl_{horiz}

只要 l l 是一个过相机中心的平面上的一条直线,都可以用这个公式来求这个平面的法向量

然后就能计算出两个平面的夹角
c o s θ = n 1 n 2 n 1   n 2 = l 1 T w l 2 l 1 T w l 1 l 2 T w l 2 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 K :

我们知道这三个平面都是相互正交的,我们可以得到 v 1 w v 2 = 0 v_1wv_2 = 0

w w 是取决于 K K 的gngy偶, K K 有五个自由度, v 1 w v 2 = 0 v_1wv_2=0 能提供一个约束;共有三个正交平面的投影点: v 1 w v 2 = v 1 w v 3 = v 2 w v 3 = 0 v_1wv_2 = v_1wv_3 = v_2wv_3=0 ,这样共提供了三个约束。

如果设定是 z e r o s k e w zero-skew 并且是正方形的像素,那么又能提供两个约束,此时 w w 的方程变为:
在这里插入图片描述

w w 是一个 3 × 3 3\times 3 矩阵,假设 s = K 12 = 0 s = K_{12}=0 ,且 [ w i j = w = K T K 1 [w_{ij} = w = K^{-T}K^{-1} ,那么 w 12 = w 21 = 0 w_{12} = w_{21} = 0 ,如果还满足 α x = K 11 = K 22 = α y \alpha_x = K_{11} = K_{22} = \alpha_y ,那么 w 11 = w 22 w_{11} = w_{22}

index从1开始

有了 w w 之后,就能用Cholesky分解法求出K

发布了63 篇原创文章 · 获赞 2 · 访问量 8029

猜你喜欢

转载自blog.csdn.net/McEason/article/details/104117877