三維重建技術的綜述
?三維重建技術通過深度數據獲取、預處理、點云配準與融合、生成表面等過程,把真實場景刻畫成符合計算機邏輯表達的數學模型。這種模型可以對如文物保護、游戲開發、建筑設計、臨床醫學等研究起到輔助的作用。
? ? ?三維重建技術的重點在于如何獲取目標場景或物體的深度信息。在景物深度信息已知的條件下,只需要經過點云數據的配準及融合,即可實現景物的三維重建。基于三維重建模型的深層次應用研究也可以隨即展開。人們按照被動式測量與主動式測量[5]對目標物體深度信息的獲取方法進行了分類,下面對這兩種方式進行相應的介紹。
被動式三維重建技術
? 被動式一般利用周圍環境如自然光的反射,使用相機獲取圖像,然后通過特定算法計算得到物體的立體空間信息。主要有以下三種方法:
1.紋理恢復形狀法
? 紋理法的基本理論為:作為圖像視野中不斷重復的視覺基元,紋理元覆蓋在各個位置和方向上。當某個布滿紋理元的物體被投射在平面上時,其相應的紋理元也會發生彎折與變化。例如透視收縮變形使與圖像平面夾角越小的紋理元越長,投影變形會使離圖像平面越近的紋理元越大。通過對圖像的測量來獲取變形,進而根據變形后的紋理元,逆向計算出深度數據。SFT對物體表面紋理信息的要求嚴苛,需要了解成像投影中紋理元的畸變信息,應用范圍較窄,只適合紋理特性確定等某些特殊情形。所有在實際使用中較為少見。
2.陰影恢復形狀法
SFS(Shape From Shading,從陰影恢復形狀)法也是一種較為常用的方法。圖像的陰影邊界包含了圖像的輪廓特征信息,因此能夠利用不同光照條件下的圖像的明暗程度與陰影來計算物體表面的深度信息,并以反射光照模型進行三維重建。陰影恢復形狀法的應用范圍比較廣泛,可以恢復除鏡面外的各種物體的三維模型。缺點體現在過程多為數學計算、重建結果不夠精細,另外不能忽視的是,SFS法需要準確的光源參數,包括位置與方向信息。這就導致其無法應用于諸如露天場景等具有復雜光線的情形中。
3.立體視覺法
? ? ?立體視覺法(Multi-View Stereo,MVS)是另外一種常用的三維重建方法。主要包括直接利用測距器獲取程距信息、通過一幅圖像推測三維信息和利用不同視點上的兩幅或多幅圖像恢復三維信息等三種方式。通過模擬人類視覺系統,基于視差原理獲取圖像對應點之間的位置偏差,恢復出三維信息。
? ? ?雙目立體視覺重建,在實際應用情況優于其他基于視覺的三維重建方法,也逐漸出現在一部分商業化產品上; 不足的是運算量仍然偏大,而且在基線距離較大的情況下重建效果明顯降低 。?作為計算機視覺的關鍵技術之一,立體視覺法也其弊端。例如,立體視覺需要假設空間的平面是正平面,而實際情況卻與此相差甚遠。除此之外,匹配還存在歧義性:對于一幅圖像上的某些特征點,另外的圖像可能存在若干個與之相似的特征點。那么如何選取最適配的匹配點,顯得較為棘手。除此之外,對于如相機運動參數的確定、大型場景重建需要獲取多幀圖像等問題,也極大的影響了立體視覺的深層次應用。?
主動式三維重建技術
? ? ?主動式是指利用如激光、聲波、電磁波等光源或能量源發射至目標物體,通過接收返回的光波來獲取物體的深度信息。主動測距有莫爾條紋法、飛行時間法、結構光法和三角測距法等四種方法。
1.莫爾條紋法
莫爾條紋在生活中比較常見,如兩層薄薄的絲綢重疊在一起,即可以看到不規則的莫爾(Morie)條紋。基本原理是將兩塊等間隔排列的直線簇或曲線簇圖案重疊起來,以非常小的角度進行相對運動來形成莫爾條紋。因光線的透射與遮擋而產生不同的明暗帶,即莫爾條紋。莫爾條紋隨著光柵的左右平移而發生垂直位移,此時產生的條紋相位信息體現了待測物體表面的深度信息,再通過逆向的解調函數,實現深度信息的恢復。這種方法具有精度高、實時性強的優點,但是其對光照較為敏感,抗干擾能力弱。?
2.飛行時間法
? ? ?飛行時間法(Time of Flight,ToF)指的是在光速及聲速一定的前提下,通過測量發射信號與接收信號的飛行時間間隔來獲得距離的方法。這種信號可以是超聲波,也可以是紅外線等。飛行時間法相較于立體視覺法而言,具有不受基線長度限制、與紋理無關、成像速度快等特點。但是其也有一定的缺點。首先,ToF相機的分辨率非常低。其次,ToF相機容易受到環境因素的影響,如混合像素、外界光源等,導致景物深度不準確;最后,系統誤差與隨機誤差對測量結果的影響很大,需要進行后期數據處理,主要體現在場景像素點的位置重合上。
3.結構光法
結構光法(Structured Light)通過向表面光滑無特征的物體發射具有特征點的光線,依據光源中的立體信息輔助提取物體的深度信息。具體的過程包括兩個步驟,首先利用激光投影儀向目標物體投射可編碼的光束,生成特征點;然后根據投射模式與投射光的幾何圖案,通過三角測量原理計算攝像機光心與特征點之間的距離,由此便可獲取生成特征點的深度信息,實現模型重建。這種可編碼的光束就是結構光,包括各種特定樣式的點、線、面等圖案。結構光法解決了物體表面平坦、紋理單一、灰度變化緩慢等問題。因為實現簡單且精度較高,所以結構光法的應用非常廣泛,如微軟公司的Kinect
4.三角測距法
? ? ?三角測距法是一種非接觸式的測距方法,以三角測量原理為基礎。紅外設備以一定的角度向物體投射紅外線,光遇到物體后發生反射并被CCD(Charge-coupled Device,電荷耦合元件)圖像傳感器所檢測。隨著目標物體的移動,此時獲取的反射光線也會產生相應的偏移值。根據發射角度、偏移距離、中心矩值和位置關系,便能計算出發射器到物體之間的距離。三角測距法在軍工測量、地形勘探等領域中應用廣泛。
1、彩色圖像與深度圖像
? ? ? 彩色圖像也叫作RGB圖像,R、G、B三個分量對應于紅、綠、藍三個通道的顏色,它們的疊加組成了圖像像素的不同灰度級。RGB顏色空間是構成多彩現實世界的基礎。深度圖像又被稱為距離圖像,與灰度圖像中像素點存儲亮度值不同,其像素點存儲的是該點到相機的距離,即深度值。下圖表示深度圖像與灰度圖像之間的關系。
? 深度值指的目標物體與測量器材之間的距離。深度值的大小只與距離有關,而與環境、光線、方向等因素無關,所以深度圖像能夠真實準確的體現景物的幾何深度信息。通過建立物體的空間模型,能夠為深層次的計算機視覺應用提供更堅實的基礎。
2、PCL庫
? ? ?PCL(Point Cloud Library,點云庫)是由斯坦福大學的Dr.Radu等學者基于ROS(Robot Operating System,機器人操作系統)下開發與維護的開源項目,最初被用來輔助機器人傳感、認知和驅動等領域的開發。隨著對三維點云算法的加入與擴充,PCL逐步發展為免費、開源、大規模、跨平臺的C++編程庫。
? ? ?PCL框架包括很多先進的算法和典型的數據結構,如濾波、分割、配準、識別、追蹤、可視化、模型擬合、表面重建等諸多功能。在算法方面,PCL是一套包括數據濾波、點云配準、表面生成、圖像分割和定位搜索等一系列處理點云數據的算法。例如PCL中實現管道運算的接口流程:
①創建處理對象,例如濾波、特征估計、圖像分割等;
②通過setInputCloud輸入初始點云數據,進入處理模塊;
③設置算法相關參數;
④調用不同功能的函數實現運算,并輸出結果。
PCL部分常用的算法模塊:
libpcl I/O:完成數據的輸入、輸出過程,如點云數據的讀寫;
libpcl filters:完成數據采樣、特征提取、參數擬合等過程;
libpcl register:完成深度圖像的配準過程,例如迭代最近點算法;
libpcl surface:完成三維模型的表面生成過程,包括三角網格化、表面平滑等。
3、點云數據
? 如下圖所示,展示了典型的點云數據(Point Cloud Data,PCD)模型。(點云數據除了具有幾何位置以外,有的還有顏色信息。顏色信息通常是通過相機獲取彩色影像,然后將對應位置的像素的顏色信息(RGB)賦予點云中對應的點。強度信息的獲取是激光掃描儀接收裝置采集到的回波強度,此強度信息與目標的表面材質、粗糙度、入射角方向,以及儀器的發射能量,激光波長有關。)
點云數據通常出現在逆向工程中,是由測距設備獲取的物體表面的信息集合。其掃描資料以點的形式進行記錄,這些點既可以是三維坐標,也可以是顏色或者光照強度等信息。通常所使用的點云數據一般包括點坐標精度、空間分辨率和表面法向量等內容。點云一般以PCD格式進行保存,這種格式的點云數據可操作性較強,同時能夠提高點云配準融合的速度。本文研究的點云數據為非結構化的散亂點云,屬于三維重建特有的點云特點。
4、三維重建流程
使用Kinect采集景物的點云數據,經過深度圖像增強、點云計算與配準、數據融合、表面生成等步驟,完成對景物的三維重建。
對獲取到的每一幀深度圖像均進行前六步操作,直到處理完若干幀。最后完成紋理映射。下面對每個步驟作詳細的說明。
4.1 深度圖像的獲取
? ? ?景物的深度圖像由Kinect在Windows平臺下拍攝獲取,同時可以獲取其對應的彩色圖像。為了獲取足夠多的圖像,需要變換不同的角度來拍攝同一景物,以保證包含景物的全部信息。具體方案既可以是固定Kinect傳感器來拍攝旋轉平臺上的物體;也可以是旋轉Kinect傳感器來拍攝固定的物體。
4.2 預處理
? ? 受到設備分辨率等限制,它的深度信息也存在著許多缺點。為了更好的促進后續基于深度圖像的應用,必須對深度圖像進行去噪和修復等圖像增強過程。作為本文的重點問題,具體的處理方法將在第四章進行詳細的解釋說明。
目前深度相機輸出的depth圖還有很多問題,比如對于光滑物體表面反射、半/透明物體、深色物體、超出量程等都會造成深度圖缺失。而且很多深度相機是大片的深度值缺失,這對于算法工程師來說非常頭疼。https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247485757&idx=1&sn=42403a80dffc73f507407e06a8452319&chksm=97d7ecaaa0a065bcf54f06d644d5ec0a719ddeddfc595cf0523dd2ca55dc45b0fade19421587&scene=21#wechat_redirect
4.3 由深度圖計算點云數據
? 預處理后的深度圖像具有二維信息,像素點的值是深度信息,表示物體表面到Kinect傳感器之間的直線距離,以毫米為單位。以攝像機成像原理為基礎,可以計算出世界坐標系與圖像像素坐標系之間具有下式的轉換關系:?
? 其中u,v為圖像坐標系下的任意坐標點。u0,v0分別為圖像的中心坐標。xw,yw,zw表示世界坐標系下的三維坐標點。zc表示相機坐標的z軸值,即目標到相機的距離。R,T分別為外參矩陣的3x3旋轉矩陣和3x1平移矩陣。
?對外參矩陣的設置:由于世界坐標原點和相機原點是重合的,即沒有旋轉和平移,所以:
?注意到,相機坐標系和世界坐標系的坐標原點重合,因此相機坐標和世界坐標下的同一個物體具有相同的深度,即zc=zw.于是公式可進一步簡化為:
從以上的變換矩陣公式,可以計算得到圖像點[u,v]T 到世界坐標點[xw,yw,zw]T的變換公式:
?M1稱為相機的內參矩陣,包含內參(fx,fy,u0,v0)(也就是焦距以及圖像的原點都是內參)。M2稱為相機的外參矩陣,包含外參(R:旋轉矩陣,T:平移矩陣)。
?(u0, v0)是圖像坐標系原點(圖像中心)在像素坐標系(以左上角為原點)中的坐標,dx?和?dy分別是每個像素在圖像平面x和y方向上的物理尺寸。f 為焦距(像平面與相機坐標系原點的距離)。?M稱之為內參矩陣可以理解為矩陣內各值只與相機內部參數有關,且不隨物體位置變化而變化。其中fx,fy的單位為個(像素數目)。用一幅圖來總結從世界坐標系到像素坐標系(不考慮畸變)的轉換關系:
相機坐標系:在相機上建立的坐標系,為了從相機的角度描述物體位置而定義,作為溝通世界坐標系和圖像/像素坐標系的中間一環。單位為m。以相機的光心為坐標原點,X 軸和Y 軸分別平行于圖像坐標系的 X 軸和Y 軸,相機的光軸為Z 軸,用(Xc, Yc, Zc)表示其坐標值。
圖像坐標系(image coordinate system):描述物體從相機坐標系到圖像坐標系的投影透射關系,方便進一步得到像素坐標系下的坐標。?以圖像平面的中心為坐標原點,X軸和Y 軸分別平行于圖像平面的兩條垂直邊,用( x , y )表示其坐標值。圖像坐標系是用物理單位(例如毫米)表示像素在圖像中的位置。
像素坐標系(pixel coordinate system):描述物體成像后的像點在數字圖像上(相片)的坐標,是我們真正從相機內讀取到的信息所在的坐標系。單位為個(像素數目)。以圖像平面的左上角頂點為原點,X 軸和Y 軸分別平行于圖像坐標系的 X 軸和Y 軸,用(u , v )表示其坐標值。數碼相機采集的圖像首先是形成標準電信號的形式,然后再通過模數轉換變換為數字圖像。每幅圖像的存儲形式是M × N的數組,M 行 N 列的圖像中的每一個元素的數值代表的是圖像點的灰度。這樣的每個元素叫像素,像素坐標系就是以像素為單位的圖像坐標系。
4.4 點云配準
對于多幀通過不同角度拍攝的景物圖像,各幀之間包含一定的公共部分。為了利用深度圖像進行三維重建,需要對圖像進行分析,求解各幀之間的變換參數。深度圖像的配準是以場景的公共部分為基準,把不同時間、角度、照度獲取的多幀圖像疊加匹配到統一的坐標系中。計算出相應的平移向量與旋轉矩陣,同時消除冗余信息。點云配準除了會制約三維重建的速度,也會影響到最終模型的精細程度和全局效果。因此必須提升點云配準算法的性能。
三維深度信息的配準按不同的圖像輸入條件與重建輸出需求被分為:粗糙配準、精細配準和全局配準等三類方法。
(1)粗糙配準(Coarse Registration)
? ? ? ?粗糙配準研究的是多幀從不同角度采集的深度圖像。首先提取兩幀圖像之間的特征點,這種特征點可以是直線、拐點、曲線曲率等顯式特征,也可以是自定義的符號、旋轉圖形、軸心等類型的特征。隨后根據特征方程實現初步的配準。粗糙配準后的點云和目標點云將處于同一尺度(像素采樣間隔)與參考坐標系內,通過自動記錄坐標,得到粗匹配初始值。
(2)精細配準(Fine Registration)
? ? ? 精細配準是一種更深層次的配準方法。經過前一步粗配準,得到了變換估計值。將此值作為初始值,在經過不斷收斂與迭代的精細配準后,達到更加精準的效果。以經典的ICP(Iterative Closest Point,迭代最近點)算法為例,該算法首先計算初始點云上所有點與目標點云的距離,保證這些點和目標點云的最近點相互對應,同時構造殘差平方和的目標函數。基于最小二乘法對誤差函數進行最小化處理,經過反復迭代,直到均方誤差小于設定的閾值。ICP算法能夠獲得精正確無誤的配準結果,對自由形態曲面配準問題具有重要意義。另外還有如SAA(Simulate Anneal Arithmetic,模擬退火)算法、GA(Genetic Algorithm,遺傳)算法等也有各自的特點與使用范疇。
(3)全局配準(Global Registration)
? ? 全局配準是使用整幅圖像直接計算轉換矩陣。通過對兩幀精細配準結果,按照一定的順序或一次性的進行多幀圖像的配準。這兩種配準方式分別稱為序列配準(Sequential Registration)和同步配準(Simultaneous Registration)。
? ? ?配準過程中,匹配誤差被均勻的分散到各個視角的多幀圖像中,達到削減多次迭代引起的累積誤差的效果。值得注意的是,雖然全局配準可以減小誤差,但是其消耗了較大的內存存儲空間,大幅度提升了算法的時間復雜度。
4.5 數據融合
? 經過配準后的深度信息仍為空間中散亂無序的點云數據,僅能展現景物的部分信息。因此必須對點云數據進行融合處理,以獲得更加精細的重建模型。以Kinect傳感器的初始位置為原點構造體積網格,網格把點云空間分割成極多的細小立方體,這種立方體叫做體素(Voxel)。通過為所有體素賦予SDF(Signed Distance Field,有效距離場)值,來隱式的模擬表面。
? ? ?SDF值等于此體素到重建表面的最小距離值。當SDF值大于零,表示該體素在表面前;當SDF小于零時,表示該體素在表面后;當SDF值越接近于零,表示該體素越貼近于場景的真實表面。KinectFusion技術雖然對場景的重建具有高效實時的性能,但是其可重建的空間范圍卻較小,主要體現在消耗了極大的空間用來存取數目繁多的體素。
? ? ? 為了解決體素占用大量空間的問題,Curless[50]等人提出了TSDF (Truncated Signed Distance Field,截斷符號距離場)算法,該方法只存儲距真實表面較近的數層體素,而非所有體素。因此能夠大幅降低KinectFusion的內存消耗,減少模型冗余點。
? ? ?TSDF算法采用柵格立方體代表三維空間,每個柵格中存放的是其到物體表面的距離。TSDF值的正負分別代表被遮擋面與可見面,而表面上的點則經過零點,如圖2-7中左側展示的是柵格立方體中的某個模型。若有另外的模型進入立方體,則按照下式(2-9)與(2-10)實現融合處理。
其中,指的是此時點云到柵格的距離,是柵格的初始距離,是用來對同一個柵格距離值進行融合的權重。如圖2-7中右側所示,兩個權重之和為新的權重。對于KinectFusion算法而言,當前點云的權重值設置為1。
鑒于TSDF算法采用了最小二乘法進行了優化,點云融合時又利用了權重值,所有該算法對點云數據有著明顯的降噪功能。
4.6 表面生成
? ? 表面生成的目的是為了構造物體的可視等值面,常用體素級方法直接處理原始灰度體數據。Lorensen[51]提出了經典體素級重建算法:MC(Marching Cube,移動立方體)法。移動立方體法首先將數據場中八個位置相鄰的數據分別存放在一個四面體體元的八個頂點處。對于一個邊界體素上一條棱邊的兩個端點而言,當其值一個大于給定的常數T,另一個小于T時,則這條棱邊上一定有等值面的一個頂點。然后計算該體元中十二條棱和等值面的交點,并構造體元中的三角面片,所有的三角面片把體元分成了等值面內與等值面外兩塊區域。最后連接此數據場中的所有體元的三角面片,構成等值面。合并所有立方體的等值面便可生成完整的三維表面。
from:三維重建技術概述 - 吳一達 - 博客園