天天看點

python三維重建_三維重建怎麼入門?

最近也算是三維重建入門了,是以回顧一下自己的學習曆程。

結論:目前圖像的三維重建都是于相機模型和三角測量實作的(還有一些其他的方法,因為沒看過,就先算了)。

三維重建的步驟其實也就是我學習的步驟。

第一步主要是圖像處理等相關知識的學習,主要包括圖像特征(點,線,任意物體)的提取。其中可以自己動手寫寫代碼的,特别是霍夫變換的任意物體的提取,我自己是寫了一遍收益匪淺。當然目前的深度學習也可以學習學習,我在學習sift這篇論文的時候,給我感覺就是深度學習的過程,但是這裡的學習是人自己的先驗知識,是以基于深度學習的特征點提取我是特别看好的(比如D2-Net)。如果是急于想做出效果,這裡隻需要學習sift特征提取(opencv裡是有代碼的)。

第二步就是相機模型的學習。相機模型的學習是了解三維空間點到成像平面二維點的一個映射實體模型,既然是實體模型,就有參數是以需要對相機标定,相機标定是一個比較綜合的過程,可以看張正友的平面标定論文,然後自己動手程式設計實作,标定的最後一步是需要優化的,這裡可以補補優化的知識,也可以嘗試用ceres做優化,也可以自己寫一些bundle adjustment 感受一下矩陣稀疏帶來的加速效果。

第三步就是三維重建了。通過前面的相機模型的學習可以看出,在成像的過程深度資訊是丢失的。是以常見的結構是雙目系統(或者projector-camera system),本質都利用三角化來恢複深度。這裡還有一個關鍵是立體比對,就是同一空間點在不同圖檔上的位置。前面說的sift可以提供比較粗劣的效果,為了提高精度一般都是sift比對提供初始的比對,接下來還是需要優化的(我學習的有pathmatch)。當然在工業測量中,結構光被用來輔助這種像素比對,結構光(這裡有很多技巧)給每個像素唯一的身份,其實就類似sift但是他更準确,這樣用來比對更加準确,比對好三角測量就可以得到點雲了。

前面說的必須二個相機才能重建其實對也不對,我們也可以讓一個相機動起來,這就是structure from motion.這裡需要學習一些極線幾何的知識,本質矩陣基礎矩陣啥的,不要給名字吓到,這些隻是表述變量的關系,需要注意的是,這裡重建出的物體是缺乏尺度的。

最後這些過程需要對剛體變換熟記于心(本質就是R T),這裡對于新手容易混淆。

最後的最後就是這些值得做的點:第一就是高精度的三維重建,第二就是大規模的三維重建,第三是非剛體的structure from motion,第四是動态三維重建。這些方向我覺得都值得做,雖然我一個都不會。