8 More Single View Geometry
本章主要讲述除了点以外的几何体,在投影变换下的性质。这些几何体包括:平面,线,圆锥曲线,二次曲线。
讲到这里就明白了,为什么投影几何这么重要,因为摄像机就是一个投影几何模型。为什么无穷远平面 π ∞ \pi_{\infty} π∞重要?因为它在投影变换下保持不变,它只和摄像机内参有关系。
同时, π ∞ \pi_{\infty} π∞上的点、线、面也很重要。 π ∞ \pi_{\infty} π∞上的点就是消失点, π ∞ \pi_{\infty} π∞上的线就是消失线。点和线的图像与摄像机内参和旋转有关,所以可以从他们来估计相机的旋转。 π ∞ \pi_{\infty} π∞上的圆锥曲线只和相机内参有关。
文章目录
- 8 More Single View Geometry
- 8.1 Action of a projective camera on planes, lines, and conics
- 8.2 Images of smooth surfaces
- 8.3 Action of a projective camera on quadrics
- 8.4 The importance of the camera centre
- 8.5 Camera calibration and the image of the absolute conic
- 8.5.1 The image of the absolute conic
- 8.5.2 Orthogonality and ω \omega ω
 
- 8.6 Vanishing points and vanishing lines
- 8.7 Affine 3D measurements and reconstruction
- 8.8 Determining camera calibration K K K from a single view
- 8.9 Single view reconstruction
- 8.10 The calibrating conic
 
8.1 Action of a projective camera on planes, lines, and conics
8.1.1 On planes
对于空间中的平面 
     
      
       
        
        
          x 
         
        
          π 
         
        
       
      
        x_{\pi} 
       
      
    xπ,我们可以先考虑一个特殊的,也就是 
     
      
       
       
         x 
        
       
         y 
        
       
      
        xy 
       
      
    xy平面,没有 
     
      
       
       
         z 
        
       
      
        z 
       
      
    z坐标。所以, 
     
      
       
        
        
          x 
         
        
          π 
         
        
       
         = 
        
       
         ( 
        
       
         X 
        
       
         , 
        
       
         Y 
        
       
         , 
        
       
         1 
        
        
        
          ) 
         
        
          T 
         
        
       
      
        x_{\pi}=(X,Y,1)^{T} 
       
      
    xπ=(X,Y,1)T,那么P就变成了 
     
      
       
       
         3 
        
       
         × 
        
       
         3 
        
       
      
        3 \times 3 
       
      
    3×3,rank为3的单应性矩阵 
     
      
       
       
         H 
        
       
      
        H 
       
      
    H。
 
8.1.2 On lines
空间中的线和摄像机中心定义了一个平面,该平面和成像平面交于一点。所以说,如果3D空间里有两个点 A A A、 B B B,它们在图像上的坐标是 a a a、 b b b,那么由 A A A、 B B B构成的直线 X ( μ ) = A + μ B X(\mu)=A+\mu B X(μ)=A+μB就被转换到 x ( μ ) = P ( A + μ B ) = P A + μ P B = a + μ b x(\mu)=P(A+\mu B)=PA+\mu PB=a+\mu b x(μ)=P(A+μB)=PA+μPB=a+μb。
如果我们反过来,图像上一个线 
     
      
       
       
         l 
        
       
      
        l 
       
      
    l,反投影回去,就会形成一个平面,可以表示为 
     
      
       
        
        
          P 
         
        
          T 
         
        
       
         l 
        
       
      
        P^T l 
       
      
    PTl。也就是说,映射到图像中的一条线的空间点集是由相机中心和图像线定义的空间平面。
 
8.1.3 On conics
首先我们明确为什么不是圆锥曲线的投影,而是反投影? 因为圆锥曲线投影到图像上是不变的。
其次我们说,一个圆锥曲线 C C C反投影到空间中,就成了圆锥 Q Q Q。
Q C O = P T C P Q_{CO}=P^TCP QCO=PTCP
8.2 Images of smooth surfaces
光滑曲面上的点投影到图像上,其轨迹是一条射线,该射线与光滑曲面相切。如果一个线和该点在图像上相切,反投影回去也会和曲面相切。
 
8.3 Action of a projective camera on quadrics
二次曲线 
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q在 
     
      
       
       
         P 
        
       
      
        P 
       
      
    P的作用下就会变成圆锥曲线:
  
      
       
        
         
         
           C 
          
         
           ∗ 
          
         
        
          = 
         
        
          P 
         
         
         
           Q 
          
         
           ∗ 
          
         
         
         
           P 
          
         
           T 
          
         
        
       
         C^* = P Q^* P^T 
        
       
     C∗=PQ∗PT
 
8.4 The importance of the camera centre
3D空间中的物体和相机中心定义了一组光线,并且通过将这些光线与平面相交来获得图像。通常这组光线被称为光线锥体。 假设光线锥体被两个平面相交,如图 8.5 所示,则两个图像 I I I和 I ′ I′ I′通过透视图(perspective map)清晰地相关。 这意味着使用相同相机中心获得的图像可以通过平面投影变换相互映射,换句话说,它们是投影等效的,因此具有相同的投影属性。 因此,相机可以被认为是投影成像设备——测量以相机中心为顶点的光线锥体的投影特性。
简而言之,相机中心为什么重要?因为通过同一个相机中心获取的多个图像之间存在平面变换关系。
比如说我们做一个纯旋转,没有平移,那么同一个点在两个不同图像之间的关系可以表达为以下:
  
      
       
        
         
         
           x 
          
         
           ′ 
          
         
        
          = 
         
        
          H 
         
        
          x 
         
         
        
          w 
         
        
          h 
         
        
          e 
         
        
          r 
         
        
          e 
         
        
            
         
        
          H 
         
        
          = 
         
        
          K 
         
        
          R 
         
         
         
           K 
          
          
          
            − 
           
          
            1 
           
          
         
        
       
         x'=Hx \\ where \ H =KRK^{-1} 
        
       
     x′=Hxwhere H=KRK−1
 
 如果我们做个纯缩放,对物体缩放一个 
     
      
       
       
         k 
        
       
      
        k 
       
      
    k,那么就相当于给内参矩阵 
     
      
       
       
         K 
        
       
      
        K 
       
      
    K乘以一个对角矩阵右乘一个 
     
      
       
       
         d 
        
       
         i 
        
       
         a 
        
       
         g 
        
       
         ( 
        
       
         k 
        
       
         , 
        
       
         k 
        
       
         , 
        
       
         1 
        
       
         ) 
        
       
      
        diag(k,k,1) 
       
      
    diag(k,k,1)。
8.5 Camera calibration and the image of the absolute conic
现在我们描述如果相机内部校准 K K K已知的话会得到什么。 我们可以测量欧几里得属性,例如两条射线之间的角度。
8.5.1 The image of the absolute conic
我们首先来讨论一个问题,如果已知内参 K K K,那么图像点 x x x反映射回去就是一个射线,该射线的方向就是 d = K − 1 x d=K^{-1} x d=K−1x。那么我们如果考虑两条射线间的角度 cos  θ \cos \theta cosθ,它其实就可以用相机内参来表示。
接下来我们考虑绝对圆锥在图像上的投影。我们先看 
     
      
       
        
        
          π 
         
        
          ∞ 
         
        
       
      
        \pi_{\infty} 
       
      
    π∞, 
     
      
       
        
        
          π 
         
        
          ∞ 
         
        
       
      
        \pi_{\infty} 
       
      
    π∞上的点可以写成 
     
      
       
       
         ( 
        
        
        
          d 
         
        
          T 
         
        
       
         , 
        
       
         0 
        
        
        
          ) 
         
        
          T 
         
        
       
      
        (d^T,0)^T 
       
      
    (dT,0)T,那我们有以下式子成立:
  
      
       
        
        
          x 
         
        
          = 
         
        
          P 
         
         
         
           X 
          
         
           ∞ 
          
         
         
        
          = 
         
        
          K 
         
        
          R 
         
        
          [ 
         
        
          I 
         
        
          ∣ 
         
        
          − 
         
         
         
           C 
          
         
           ~ 
          
         
        
          ] 
         
        
          ( 
         
         
         
           d 
          
         
           T 
          
         
        
          , 
         
        
          0 
         
         
         
           ) 
          
         
           T 
          
         
         
        
          = 
         
        
          K 
         
        
          R 
         
        
          d 
         
        
       
         x = PX_{\infty} \\ =KR[I|-\widetilde{C}] (d^T,0)^T \\ =KRd 
        
       
     x=PX∞=KR[I∣−C 
            ](dT,0)T=KRd
所以说无穷远处平面投影到图像上的矩阵就是 H = K R H=KR H=KR,那么利用这结果,我们可以考虑 π ∞ \pi_{\infty} π∞上的圆锥 C C C。我们知道点 x x x被 H H H投影到可以表示为 x → H x x \rightarrow Hx x→Hx,那么 C C C就会变成 H − T C H − 1 H^{-T} C H^{-1} H−TCH−1,我们把 H H H替换成 K R KR KR,就会得到 C = ( K K T ) − 1 = K − T K − 1 C=(KK^T)^{-1}=K^{-T}K^{-1} C=(KKT)−1=K−TK−1。
由此我们可以看出绝对圆锥曲线只依赖于相机内参,所以知道了绝对圆锥曲线的表达式,就可以恢复出相机内参。
然后图像上两点形成的射线之间的角度也可以通过绝对圆锥计算出来。
那么问题来了,如果知道绝对圆锥曲线的表达式呢?我们可以找三个正方形,然后拍一个图像。每个正方形世界坐标的四个点可以认为是 ( 0 , 0 ) T , ( 1 , 0 ) T , ( 0 , 1 ) T , ( 1 , 1 ) T (0,0)^{T},(1,0)^{T},(0,1)^{T},(1,1)^{T} (0,0)T,(1,0)T,(0,1)T,(1,1)T,然后我们再找出正方形在图像坐标系下的四个点,计算一个 H H H。
然后,绝对圆锥曲线上还有两个虚点,分别是 ( 1 , i , 0 ) , ( 1 , − i , 0 ) (1,i,0),(1,-i,0) (1,i,0),(1,−i,0),我们也给它乘上 H H H,得到 H ( 1 , ± i , 0 ) H(1,\pm i,0) H(1,±i,0),这样一个 H H H提供2个虚点,三个H就是6个虚点,用这6个虚点去拟合一个方程。
8.5.2 Orthogonality and ω \omega ω
上文提到绝对圆锥曲线是可以用来计算线段之间角度的。那么我们有这样一个结论:一个点 x x x反投影成了一条射线,一个线 l l l反投影成了一个平面。射线如果与平面相切,那么有如下等式存在: l = ω x l=\omega x l=ωx。
8.6 Vanishing points and vanishing lines
8.6.1 Vanishing points
消失点是怎么形成的?可以说消失点是两个平行线交点形成的。我们也可以说消失线是图像平面与一个和地平面平行的射线相交形成的。所以消失点的方向是重要的,位置不重要,因为它在无穷远处。
我们假设三维空间有一点 
     
      
       
       
         A 
        
       
      
        A 
       
      
    A,它的方向是 
     
      
       
       
         D 
        
       
         = 
        
       
         ( 
        
        
        
          d 
         
        
          T 
         
        
       
         , 
        
       
         0 
        
        
        
          ) 
         
        
          T 
         
        
       
      
        D=(d^T,0)^T 
       
      
    D=(dT,0)T,那么该点和方向形成的线就表示成 
     
      
       
       
         X 
        
       
         ( 
        
       
         λ 
        
       
         ) 
        
       
         = 
        
       
         A 
        
       
         + 
        
       
         λ 
        
       
         D 
        
       
      
        X(\lambda)=A+\lambda D 
       
      
    X(λ)=A+λD,如果我们再乘上 
     
      
       
       
         P 
        
       
      
        P 
       
      
    P,就有
  
      
       
        
        
          x 
         
        
          ( 
         
        
          λ 
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          X 
         
        
          ( 
         
        
          λ 
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          A 
         
        
          + 
         
        
          λ 
         
        
          P 
         
        
          D 
         
        
          = 
         
        
          a 
         
        
          + 
         
        
          λ 
         
        
          K 
         
        
          d 
         
        
       
         x(\lambda) = PX(\lambda)=PA+\lambda PD=a + \lambda Kd 
        
       
     x(λ)=PX(λ)=PA+λPD=a+λKd
令 λ → ∞ \lambda \rightarrow \infty λ→∞,上式的极限就是 K d Kd Kd,这个极限记为 v v v, v v v就是无穷远点 X ∞ X_{\infty} X∞在图像上形成的点。反过来, v v v反投影回去就是一个射线。
那么具体给一个图像我们怎么找出 v v v?从图中找到若干条平行线,把它们延长,交点就是 v v v。
8.6.2 Vanishing lines
平行的平面与 π ∞ \pi_{\infty} π∞ 相交于一条直线,这就是消失线。消失线同样只取决平行平面的方向而不是位置。
消失线有一些性质:
- 一个通过相机中心的平面,其法向量是 n n n,那么消失线就是 l = K − T n l=K^{-T} n l=K−Tn
- 两个平面之间的夹角可以由他们对应的消失线来计算,见书中式8.14
具体一点,我们怎么找消失线? 找两个消失点,然后连起来就行了,因为消失点都落在消失线上。
8.6.3 Orthogonality relationships amongst vanishing points and lines
- 如果两个线垂直,那么他们的消失点满足 v 1 T ω v 2 = 0 v_1^T \omega v_2=0 v1Tωv2=0
- 如果一个线和平面垂直,那么他们对应的消失点和消失线满足 l = ω v l= \omega v l=ωv
- 两个垂直的平面,他们对应的消失线满足 l i T ω l 2 = 0 l_i^T \omega l_2=0 liTωl2=0
8.7 Affine 3D measurements and reconstruction
我们已知一个消失线 l l l,还有图像中的两个点,我们可以只用图像就测出来两点之间线段的长度,具体细节参见P222的算法。
8.8 Determining camera calibration K K K from a single view
前文我们说过求出绝对圆锥曲线 ω \omega ω,我们就知道了内参 K K K。除了前文所述的用点拟合,我们还可以用消失点和消失线来提供一些约束,在书中P224提供了6种约束,每一种约束都可以表达成一个方程,所以我们可以这样求解 ω \omega ω。
我们先把 ω \omega ω写成一个向量 w = ( w i ) , i = 1 , 2 , 3 , 4 , 5 , 6 w=(w_i),i=1,2,3,4,5,6 w=(wi),i=1,2,3,4,5,6,然后224页的6种约束,每一个都可以写成 a T w = 0 a^T w = 0 aTw=0,这样就有6个方程组,6个未知数,用SVD分解就可以求出 ω \omega ω,知道了 ω \omega ω 再把它用cholesky分解就求出了内参。
8.9 Single view reconstruction
简要介绍了一下单视角重建。
8.10 The calibrating conic
绝对圆锥曲线(IAC)是一个想象出来的东西,所以我们看不见。但是非要把它画出来的话,应该怎么办呢?
我们找一个替代品,叫标定圆锥曲线,它的图像是一个与 
     
      
       
       
         x 
        
       
      
        x 
       
      
    x轴成45度的圆锥。它的方程是
  
      
       
        
        
          C 
         
        
          = 
         
         
         
           K 
          
          
          
            − 
           
          
            T 
           
          
         
         
         
           [ 
          
          
           
            
             
             
               1 
              
             
            
            
             
              
             
            
            
             
              
             
            
           
           
            
             
              
             
            
            
             
             
               1 
              
             
            
            
             
              
             
            
           
           
            
             
              
             
            
            
             
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
           
          
         
           ] 
          
         
         
         
           K 
          
          
          
            − 
           
          
            1 
           
          
         
        
       
         C= K^{-T} \left[ \begin{matrix} 1& & \\ & 1& \\ & &-1 \end{matrix} \right] K^{-1} 
        
       
     C=K−T 
              11−1 
              K−1










