光度立體法重構表面

cheapter發表於2018-10-17

光度立體法:用一個表面在不同光照條件下所拍攝的影像序列來重構這個表面快的形狀

       本文討論的為採用正交投影攝像機,並且選擇點(x,y,z)→(x,y)。也就是,只要找到(x,y)對應的畫素值f(x,y)即可。表面可以用(x,y,f(x,y))表示,稱作monge表面,因為法國一個軍事工程師先採用這種方法,為了紀念他而已

     所以我們的目標就是:獲得表面的深度(高度、畫素值)

1、假設沒有環境光,且點光源到表面的距離遠遠大於表面的尺寸。則表面一點P處的光通量

                                               B(p)=ρ(p)N(p)·S1                                                  (1)

    其中N表示法向量,S表示光源向量。我們所用的攝像機模型中,每一個點對應一個表面點P,所以可以使用B(x,y)來表示B(p),在假設攝像機對錶面光通量的響應是線性的,則在(x,y)處的畫素值為:

                                           l(x,y)=kB(x,y)=kρ(x,y)N(x,y)·S1=g(x,y)·V1              (2)

  其中g(x,y)描述表面,V1是有關照明與攝像機屬性的一個量。所以只要能得到較多的g(x,y)·V1,便可以重構g以及表面。

 

2、由多個檢視獲取表面法線與反射率

     若我們已知n個光源對應的V1,可以將Vi重疊到一個矩陣V中,而且這個矩陣是已知的

                                                 V = \begin{bmatrix}V_{1}^{T} \\V_{2}^{T}\\ ···\\V_{n}^{T} \end{bmatrix}

  對於每一個影像點,也可以將其度量值寫成一個向量形式

                               

   每個影像點有一個向量,每個向量包含了該點在不同光源條件下觀察到的所有影像亮度值。有:

                                                               i(x,y) = Vg(x,y)                    (3)

    通過解這個方程可以得到g,影像中每一個點有一個線性系統,一般要求n>3,這樣可以得到最小二乘解。

    為了對付陰影也就是表面的陰影,可以用影像向量生成一個矩陣,用次陣左乘(3),得到

                                                             T i = T V g(x,y)                       (4)

     其中      ,因為T陣對應陰影的元素為0,所以T可以消除陰影

               度量反射率:因為N是單位法向量,所以從g中可以提取出反射率,也就是|g(x,y)| = ρ(x,y)。因為反射率取值為0-1,所以任何畫素|g|大於1的都值得懷疑。

              回覆法向量: 因為法向量是單位向量,他也可以從g中得到

                                                           (5)

 

3、由法線獲取表面形狀

   由於表面表示為(x,y,f(x,y)),所以法線是(x,y)的函式:

                             (6)

 

為了恢復深度圖,需要從單位法向量度量值來確定f(x,y).

   假設在某點(x,y)的法向量的度量值(a(x,y), b(x,t), c(x,y)),則

                                                  (7)

而且,理論上有,所以我們可以依據判斷是否接近0來進行檢驗。

 

4、通過積分求取形狀

假設偏導數通過測試,就可以在保留一個常深度偏差的條件下重構出該表面,偏導數給出沿x,y方向走一小步時候的表面高度變化,因而通過沿著某種路徑累計高度的變化值來得到表面的形狀。也就是:                     

                                                       (8)

其中C是從某一個固定點(x,y)的一條曲線,c是一個積分常熟,它表示在起點處的高度。

 

例如我們從(0,0)開始重構在(u,v)的表面,先從(0,0)沿著x=0到點(0,v)的線對y進行積分,然後沿著y=v到點(u,v)將x求和,既:

                          (9)

  這只是一種積分的方法,其他沿著任何閉合曲線的積分,最後結果一樣。

 

 

總的來說,如圖:

 

     

 

 

 

 

 

 

 

 

相關文章