1. 程式人生 > >初探三維重建

初探三維重建

三維重建分類

  分為主動式重建與被動式重建。目前最主要的是立體視覺重建(被動式重建中的一種方法)。其主要包括1、直接利用測距器獲取程距資訊;2、通過一幅影象推測三維資訊;3、利用不同視點上的兩幅或是多幅影象恢復三維資訊(最常用)。

 

立體視覺法

  傳統的立體成像系統使用兩個放在一起的攝像機,平行面向待重建的物體。此方法在概念上,類似人類藉由雙眼感知的影象相疊推算深度(當然實際上人腦對深度資訊的感知歷程會更加複雜),若已知兩個攝影機的彼此間距與焦距長度,而擷取的左右兩張圖片又能成功疊合,則深度資訊可迅速推得。此方法必須依賴有效的圖片畫素匹配(correspondence analysis),一般使用

模板比對(Block Matching)對極幾何(Epipolar Geometry)演算法完成。使用兩個攝影機的立體視覺法又稱做雙目立體視覺(Binocular Stereo Vision)。

  深度影象   深度影象的每個畫素點的灰度值可用於表徵場景中某一點距離攝像機的遠近。  

SfM (Structure from Motion)  介紹

  SfM是幹嘛用的?關於SfM的具體介紹可以參考Wiki百科上的簡介,從SfM的英文構成(運動恢復法)也可以看出,SfM採用的是通過一組圖片恢復三維模型。

 

圖片來自於
Photo Tourism: Exploring Photo Collection In 3D
算是三維重建中比較出名的一篇論文了,被引量有2000+,文中比較詳細的講述了使用多幅影象重建三維建築模型的過程,介紹瞭如何根據相機引數的變化確定對應點的相關關係,從而恢復三維資訊,同時論文也給了 short video演示。關於相機標定應用的提出應該是比較早的一篇論文 Self-Calibration and Metric Reconstruction Inspite of Varying and Unknown Intrinsic Camera Parameters 。至於什麼是相機標定,可以參考
相機標定(Camera calibration)
。成熟的SfM中最後會有 Bundle Ajustment優化,中文翻譯個人比較喜歡 光束平差法,感覺這個翻譯更貼合它的原理。關於BA優化的文章很多也很複雜,同時對BA優化的改進演算法也有很多,一不小心可能會沉迷其中不能自拔,由於是初探,所以也還沒有涉及那麼深的內容,這篇文也只是想普及一下三維重建的一些知識而已,關於BA優化,推薦一篇講的比較詳細的論文 Bundle Adjustment —A Modern Synthesis,同時也可以參考一個博主講的 BA優化原理

SfM演算法是基於無序圖片的三維重建演算法,在其核心演算法之前首先需要挑選合適的圖片來確定相機引數之後再進行核心計算。具體步驟主要有以下幾步:

(1)特徵提取

       主要使用的是SIFT運算元進行提取,SIFT 特徵是基於物體上的一些區域性外觀的興趣點而與影像的大小和旋轉無關,具有尺度和旋轉不變性,對光線、噪聲、微視角改變的容忍度相當高,魯棒性強,適合用來提取尺度變換和旋轉角度的各種圖片特徵點資訊,其準確性強。關於SIFT的詳細介紹可以參考Wiki百科

一個SIFT特徵有四個部分(位置position, 大小scale, 方向direction, 描述向量descriptor)

 

(2)Match and Track

       每個圖片的特徵點被提出來以後,就需要進行圖片兩兩之間的特徵點匹配並建立track:

       使用K-d tree演算法計算最近鄰匹配。令最近鄰的距離為d1,再找到第二近的匹配對點之間距離為d2,如果兩個距離d1和d2之比小於一個閾值0.5,就可以判定為可接受的匹配對。

       對於圖片特徵點的匹配和track一篇知乎問題寫的蠻詳細的,貼出連結https://www.zhihu.com/question/29885222大家可以去看一下演算法實現,SIFT、ANN、RANSAC也有實現程式碼,並且後期的BA優化演算法、稠密點雲實現CMVS/PMVS也有實現,也有助於理解之後的操作。匹配關係建立後,需要生成track列表,指同名點的影象集合。

(3)三維點計算

       首先影象中可能匹配多個特徵點,就會出現多對一的情況,實際上特徵點之間應該一一對應。所以還需要一個去除重複特徵點匹配對的演算法去解決這種多對一的情況 (對匹配點可採用取樣一致性演算法RANSC八點法計算基礎矩陣,剔除不滿足基礎矩陣的匹配對)。

用RANSAC和八點演算法可以將嘈雜的匹配結果穩定化

       最終可以按照兩幅影象中的匹配特徵點數不少於一個閾值即為影象初選匹配對。但影象初選對有時並不可靠,所以需要使用幾何約束檢測其可靠性。幾何約束是基於事實的,不是所有的特徵點都符合物理規律,所以需要計算對極幾何。對極幾何在上文中有給出連結,可以參考其原理。

       初始化匹配對的相對定向,根據RANSC八點法計算本徵矩陣,通過對本徵矩陣SVD分解得到第二個影象的R、T(旋轉、平移矩陣),在這一步需要進行畸變校正,然後根據R、T和矯正後的像點座標三角計算出三維點,這裡用到的方法是直接線性變換DLT。最終需要將圖片中的畫素座標資訊聯絡起來,幷包含相機內參資訊。

      描述攝像機的外引數用到3x3的旋轉矩陣R和1x3的平移向量 (或者攝像機中心座標向量),而攝像機的內參數用一個焦距f和兩個徑向畸變引數k1k2描述。

(4)稀疏重建

      加入更多的影象,與之前的影象進行匹配,然後計算R、T,推算出三維點資訊,從而構成稀疏點雲。

(5)Bundle Ajustment

       光束法平差(Bundle Adjustment),是一個非線性優化的過程。目的是使重建誤差降低到最小,通過調整三維點的旋轉平移矩陣及三維點資訊使反向投影差最小。

       Bundle Adjustment是一個迭代的過程,在一次迭代過後,將所有三維點反向投影到相應影象的畫素座標並分別與初始座標比對,如果大於某個閾值,則應將其從track列表中去掉,如果track中已小於2個,則整個track也去掉,一直優化到沒有點可去為止。

       (4)、(5)是稀疏點雲的重建過程,實際上在之後一般會使用CMVS/PMVS進行稠密點雲重建,恢復更多的三維資訊,以便於更好地建立三維模型,至於CMVS/PMVS的實現,在上文提到的知乎問題中也有講解和實現。



轉載自:https://www.jianshu.com/p/f33b3d440f7d