OpenMVS學習筆記(一)稠密重建之數據准備


稠密重建

  • 代碼整體框架:

輸入:圖像,位姿,稀疏點雲

輸出:depth,稠密點雲

  • 深度圖計算(ComputeDepthMaps)

    • 代碼流程圖:

    • 數據准備:

      • 圖像映射:imagesMap用來存放所有輸入的圖像中哪些幀時是可用的,不可用就是no id; data.images存放的是一個用來計算深度圖圖像ID的list。

      • 坐標系轉化:世界坐標系到相機坐標系的轉換

      • 鄰域幀選擇

 

        • 選擇策略:共視點f在兩個圖像V,R的夾角w_n,f在兩個圖像中分辨率的相似性w_s,f在兩個圖像中覆蓋的面積的最小值area分數計算如下式

 

        • 思考1:為什么選擇這三個條件?
          • 1.兩個view的靠的越近,越不能提供一個足夠大的baseline來重建高精度模型,因此,通過共視點夾角來間接判斷兩個view的baseline是否足夠大;
          • 2.兩個圖像的分辨率如果差別比較大,立體匹配時是有問題的。所以選擇鄰域幀,與當前幀分辨率是否一致也是一個重要的因素;
          • 3.重建時,圖像的分辨率越高重建的效果越好,故以共視點覆蓋的圖像面積也作為重要參考條件。

 

        • 思考2:第一個參數計算公式如何理解?

          • 角度閾值a_{max}默認10,角度低於這個值分數越低,2次方的目的是為增強角度下降帶來的影響。這個公式中並沒有用對角度遠大於10做限制,原因是特征點計算時已經對大角度處理過了,角度比較大時是沒有共視特征點的。

 

      • 最佳鄰域幀選擇

 

        • 在我們上一步的計算中,每張圖像都選出nMaxViews個鄰域幀,我們現在需要給每張圖像選擇一個最佳鄰域來求解深度圖。故現在求解的問題是:
          • 每個view(node)都有n個鄰域(label),優化目標是給每個node選擇一個label使得整體能量最小,這個label就是我們最終給每個view分配的最佳鄰域幀。這個問題就是馬爾科夫隨機場的labeling問題(能量優化問題),其原理我們后續在紋理貼圖講解給每個face選最佳view的時候統一介紹,本節只介紹如何調用。
          • 這個能量最小優化問題能量函數構造如下:
            • Markov Random Field能量函數:公式中Y是標簽 (label),X是節點(node).UnaryCost:之前計算的score,用平均score歸一化后的值。
            • UnaryCost = avgSocre/neighbors[k].score
            • PairwiseCost:懲罰兩個node的label相同的情況即不鼓勵任意兩個的view的鄰域相同。如果兩個相同,則給一個很大的值。
          • 求解方案:
            • 方案一:TRW:Tree - reweighted Message Passing
            • 方案二:BP:Belief Propagation
            • 參考論文:convergent tree-reweighted message passing for energy minimization


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM