《计算机视觉之三维重建》笔记3-单视几何

北邮鲁鹏老师的课程《计算机视觉之三维重建(深入浅出sfm和SLAM核心算法)》 笔记

3,单视几何

3.1 2D

直线

在这里插入图片描述

平面上直线用 l = ( a , b , c ) T l=(a,b,c)^T l=(a,b,c)T来表示,点 x = ( x , y , 1 ) T x=(x,y,1)^T x=(x,y,1)T,直线上的点:
l T x = 0 l^Tx=0 lTx=0 直线的法向量:
n ⃗ = ( b , − a ) \vec n=(b,-a) n =(b,a) 直线的方向向量:
d ⃗ = ( a , b ) \vec d=(a,b) d =(a,b) 两直线 l , l ′ l,l' l,l的交点:
x = l × l ′ x=l\times l' x=l×l

无穷远点线

两条平行线相交于无穷远点,可得直线 l l l的无穷远点:
x ∞ = ( b , − a , 0 ) T x_\infty=(b,-a,0)^T x=(b,a,0)T

x ∞ = l × l ′ = ( a , b , c 1 ) × ( a , b , c 2 ) = ( b c 2 − b c 1 , − ( a c 2 − a c 1 ) , a b − a b ) = ( b , − a , 0 ) x_\infty=l\times l'=(a,b,c_1)\times(a,b,c_2)=(bc_2-bc_1,-(ac_2-ac_1),ab-ab)=(b,-a,0) x=l×l=(a,b,c1)×(a,b,c2)=(bc2bc1,(ac2ac1),abab)=(b,a,0)

所有的无穷远点形如 ( x , y , 0 ) T (x,y,0)^T (x,y,0)T,形成的无穷远线为:
l ∞ = ( 0 , 0 , 1 ) T l_\infty=(0,0,1)^T l=(0,0,1)T

3.2 3D

平面

3维空间中平面 Π = ( a , b , c , d ) T \Pi=(a,b,c,d)^T Π=(a,b,c,d)T,点 x = ( x , y , z , 1 ) T x=(x,y,z,1)^T x=(x,y,z,1)T,平面上的点:
Π T x = 0 \Pi^Tx=0 ΠTx=0 平面的法向量:
n = ( a , b , c ) T n=(a,b,c)^T n=(a,b,c)T

直线

三维空间中直线可用两个平面相交得到,这种表示略繁琐,这边只关心直线的方向,用直线的方向 d d d来表示直线 l l l
d = ( a , b , c ) T d=(a,b,c)^T d=(a,b,c)T

无穷远

直线 l l l的无穷远点为:
l ∞ = ( a , b , c , 0 ) T l_\infty=(a,b,c,0)^T l=(a,b,c,0)T

l l l上的点可表示成 x = ( a λ , b λ , c λ , 1 ) T x=(a\lambda,b\lambda,c\lambda,1)^T x=(aλ,bλ,cλ,1)T,即 x = ( a , b , c , 1 λ ) T x=(a,b,c,\frac{1}{\lambda})^T x=(a,b,c,λ1)T
x ∞ = lim ⁡ λ → ∞ ( a , b , c , 1 λ ) T = ( a , b , c , 0 ) T x_\infty=\lim_{\lambda\rightarrow\infty}(a,b,c,\frac{1}{\lambda})^T=(a,b,c,0)^T x=limλ(a,b,c,λ1)T=(a,b,c,0)T

所有的无穷远点形成的无穷远面:
Π ∞ = ( 0 , 0 , 0 , 1 ) T \Pi_\infty=(0,0,0,1)^T Π=(0,0,0,1)T

3.3 影消点影消线

在相机坐标系下,直线 l l l的方向 d = ( a , b , c ) T d=(a,b,c)^T d=(a,b,c)T,其无穷远点为 x ∞ = ( a , b , c , 0 ) T x_\infty=(a,b,c,0)^T x=(a,b,c,0)T,在投影在图像上的点成为影消点 v v v
v = K d v=Kd v=Kd d = K − 1 v ∥ K − 1 v ∥ d=\frac{K^{-1}v}{\|K^{-1}v\|} d=K1vK1v

v = M x ∞ = K [ I , 0 ] [ a b c 0 ] = K [ a b c ] = K d v=Mx_\infty=K[I,0]\left[\begin{array}{c}a\\b\\c\\0\end{array}\right]=K\left[\begin{array}{c}a\\b\\c\end{array}\right]=Kd v=Mx=K[I,0]abc0=Kabc=Kd

平面 Π \Pi Π的法向量为 n n n,其无穷远线 l ∞ l_\infty l在图像上的投影为影消线 l h l_h lh
n = K T l h n=K^Tl_h n=KTlh 影消线是由影消点构成。

l ∞ l_\infty l上的点 P = ( a , b , c , 0 ) T P=(a,b,c,0)^T P=(a,b,c,0)T在图像上的影消点 v v v l h T v = 0 l_h^Tv=0 lhTv=0
所以 l h T K d = 0 l_h^TKd=0 lhTKd=0
平面 Π \Pi Π上的直线方向 d d d都垂直与 n n n,有 n T d = 0 n^Td=0 nTd=0
⇒ n = K T l h □ \Rightarrow n=K^Tl_h\square n=KTlh

3.4 单视重构

两条直线 d 1 , d 2 d_1,d_2 d1,d2的夹角为 θ \theta θ,影消点 v 1 , v 2 v_1,v_2 v1,v2,令 ω = ( K K T ) − 1 \omega=(KK^T)^{-1} ω=(KKT)1
cos ⁡ θ = v 1 T ω v 2 v 1 T ω v 1 v 2 T ω v 2 \cos\theta=\frac{v_1^T\omega v_2}{\sqrt{v_1^T\omega v_1}\sqrt{v_2^T\omega v_2}} cosθ=v1Tωv1 v2Tωv2 v1Tωv2

cos ⁡ θ = d 1 T d 2 ∥ d 1 T d 2 ∥ = ( K − 1 v 1 ) T ∥ K − 1 v 1 ∥ K − 1 v 2 ∥ K − 1 v 2 ∥ = v 1 K − T K − 1 v 2 v 1 K − T K − 1 v 1 v 2 K − T K − 1 v 2 = v 1 T ω v 2 v 1 T ω v 1 v 2 T ω v 2 \cos\theta=\frac{d_1^Td_2}{\|d_1^Td_2\|}=\frac{(K^{-1}v_1)^T}{\|K^{-1}v_1\|}\frac{K^{-1}v_2}{\|K^{-1}v_2\|}=\frac{v_1K^{-T}K^{-1}v_2}{\sqrt{v_1K^{-T}K^{-1}v_1}\sqrt{v_2K^{-T}K^{-1}v_2}}=\frac{v_1^T\omega v_2}{\sqrt{v_1^T\omega v_1}\sqrt{v_2^T\omega v_2}} cosθ=d1Td2d1Td2=K1v1(K1v1)TK1v2K1v2=v1KTK1v1 v2KTK1v2 v1KTK1v2=v1Tωv1 v2Tωv2 v1Tωv2

直线垂直时, cos ⁡ θ = 0 ⇒ \cos\theta=0\Rightarrow cosθ=0
v 1 T ω v 2 = 0 v_1^T\omega v_2=0 v1Tωv2=0

单视标定

在这里插入图片描述

找到空间中相互垂直的三个平面的图像(一般房屋都具有此性质),并在图像上找出三条互相垂直线的影消点 v 1 , v 2 , v 3 v_1,v_2,v_3 v1,v2,v3,则得到方程:
{ v 1 T ω v 2 = 0 v 2 T ω v 3 = 0 v 3 T ω v 1 = 0 \left\{\begin{array}{l}v_1^T\omega v_2=0\\ v_2^T\omega v_3=0\\ v_3^T\omega v_1=0 \end{array}\right. v1Tωv2=0v2Tωv3=0v3Tωv1=0 如果相机是零倾斜,且方像素,则 K K K有三个自由度,所以 ω \omega ω有三个自由度,则可以求解方程组得到相机的内参数。

单视重构

在这里插入图片描述
求得 K K K后,可以在图像上找出一个平面的影消线 l h l_h lh,通过 n = K T l h n=K^Tl_h n=KTlh可恢复该平面的三维信息。
单视重构需要知道一些先验信息,如平行线、垂直线,且这些都需要人工去图像上做标记,适用于有大量平行线的场景中。

猜你喜欢

转载自blog.csdn.net/dragonchow123/article/details/125042674
今日推荐