來源丨h(huán)ttps://www.cnblogs.com/wuyida/p/6301262.html本文僅用于學(xué)術(shù)分享,若侵權(quán),請聯(lián)系后臺作刪文處理。
三維重建技術(shù)通過深度數(shù)據(jù)獲取、預(yù)處理、點云配準(zhǔn)與融合、生成表面等過程,把真實場景刻畫成符合計算機(jī)邏輯表達(dá)的數(shù)學(xué)模型。本文按照目標(biāo)物體深度信息獲取的兩種方式(被動式測量與主動式測量)進(jìn)行介紹。?>>加入極市CV技術(shù)交流群,走在計算機(jī)視覺的最前沿
三維重建技術(shù)通過深度數(shù)據(jù)獲取、預(yù)處理、點云配準(zhǔn)與融合、生成表面等過程,把真實場景刻畫成符合計算機(jī)邏輯表達(dá)的數(shù)學(xué)模型。這種模型可以對如文物保護(hù)、游戲開發(fā)、建筑設(shè)計、臨床醫(yī)學(xué)等研究起到輔助的作用。三維重建技術(shù)的重點在于如何獲取目標(biāo)場景或物體的深度信息。在景物深度信息已知的條件下,只需要經(jīng)過點云數(shù)據(jù)的配準(zhǔn)及融合,即可實現(xiàn)景物的三維重建。基于三維重建模型的深層次應(yīng)用研究也可以隨即展開。人們按照被動式測量與主動式測量[5]對目標(biāo)物體深度信息的獲取方法進(jìn)行了分類,下面對這兩種方式進(jìn)行相應(yīng)的介紹。
被動式一般利用周圍環(huán)境如自然光的反射,使用相機(jī)獲取圖像,然后通過特定算法計算得到物體的立體空間信息。主要有以下三種方法:紋理法的基本理論為:作為圖像視野中不斷重復(fù)的視覺基元,紋理元覆蓋在各個位置和方向上。當(dāng)某個布滿紋理元的物體被投射在平面上時,其相應(yīng)的紋理元也會發(fā)生彎折與變化。例如透視收縮變形使與圖像平面夾角越小的紋理元越長,投影變形會使離圖像平面越近的紋理元越大。通過對圖像的測量來獲取變形,進(jìn)而根據(jù)變形后的紋理元,逆向計算出深度數(shù)據(jù)。SFT對物體表面紋理信息的要求嚴(yán)苛,需要了解成像投影中紋理元的畸變信息,應(yīng)用范圍較窄,只適合紋理特性確定等某些特殊情形。所有在實際使用中較為少見。SFS(Shape From Shading,從陰影恢復(fù)形狀)法也是一種較為常用的方法。圖像的陰影邊界包含了圖像的輪廓特征信息,因此能夠利用不同光照條件下的圖像的明暗程度與陰影來計算物體表面的深度信息,并以反射光照模型進(jìn)行三維重建。陰影恢復(fù)形狀法的應(yīng)用范圍比較廣泛,可以恢復(fù)除鏡面外的各種物體的三維模型。缺點體現(xiàn)在過程多為數(shù)學(xué)計算、重建結(jié)果不夠精細(xì),另外不能忽視的是,SFS法需要準(zhǔn)確的光源參數(shù),包括位置與方向信息。這就導(dǎo)致其無法應(yīng)用于諸如露天場景等具有復(fù)雜光線的情形中。立體視覺法(Multi-View Stereo,MVS)是另外一種常用的三維重建方法。主要包括直接利用測距器獲取程距信息、通過一幅圖像推測三維信息和利用不同視點上的兩幅或多幅圖像恢復(fù)三維信息等三種方式。通過模擬人類視覺系統(tǒng),基于視差原理獲取圖像對應(yīng)點之間的位置偏差,恢復(fù)出三維信息。雙目立體視覺重建,在實際應(yīng)用情況優(yōu)于其他基于視覺的三維重建方法,也逐漸出現(xiàn)在一部分商業(yè)化產(chǎn)品上; 不足的是運算量仍然偏大,而且在基線距離較大的情況下重建效果明顯降低 。作為計算機(jī)視覺的關(guān)鍵技術(shù)之一,立體視覺法也其弊端。例如,立體視覺需要假設(shè)空間的平面是正平面,而實際情況卻與此相差甚遠(yuǎn)。除此之外,匹配還存在歧義性:對于一幅圖像上的某些特征點,另外的圖像可能存在若干個與之相似的特征點。那么如何選取最適配的匹配點,顯得較為棘手。除此之外,對于如相機(jī)運動參數(shù)的確定、大型場景重建需要獲取多幀圖像等問題,也極大的影響了立體視覺的深層次應(yīng)用。?主動式是指利用如激光、聲波、電磁波等光源或能量源發(fā)射至目標(biāo)物體,通過接收返回的光波來獲取物體的深度信息。主動測距有莫爾條紋法、飛行時間法、結(jié)構(gòu)光法和三角測距法等四種方法。
莫爾條紋在生活中比較常見,如兩層薄薄的絲綢重疊在一起,即可以看到不規(guī)則的莫爾(Morie)條紋。基本原理是將兩塊等間隔排列的直線簇或曲線簇圖案重疊起來,以非常小的角度進(jìn)行相對運動來形成莫爾條紋。因光線的透射與遮擋而產(chǎn)生不同的明暗帶,即莫爾條紋。莫爾條紋隨著光柵的左右平移而發(fā)生垂直位移,此時產(chǎn)生的條紋相位信息體現(xiàn)了待測物體表面的深度信息,再通過逆向的解調(diào)函數(shù),實現(xiàn)深度信息的恢復(fù)。這種方法具有精度高、實時性強的優(yōu)點,但是其對光照較為敏感,抗干擾能力弱。?飛行時間法(Time of Flight,ToF)指的是在光速及聲速一定的前提下,通過測量發(fā)射信號與接收信號的飛行時間間隔來獲得距離的方法。這種信號可以是超聲波,也可以是紅外線等。飛行時間法相較于立體視覺法而言,具有不受基線長度限制、與紋理無關(guān)、成像速度快等特點。但是其也有一定的缺點。首先,ToF相機(jī)的分辨率非常低。其次,ToF相機(jī)容易受到環(huán)境因素的影響,如混合像素、外界光源等,導(dǎo)致景物深度不準(zhǔn)確;最后,系統(tǒng)誤差與隨機(jī)誤差對測量結(jié)果的影響很大,需要進(jìn)行后期數(shù)據(jù)處理,主要體現(xiàn)在場景像素點的位置重合上。結(jié)構(gòu)光法(Structured Light)通過向表面光滑無特征的物體發(fā)射具有特征點的光線,依據(jù)光源中的立體信息輔助提取物體的深度信息。具體的過程包括兩個步驟,首先利用激光投影儀向目標(biāo)物體投射可編碼的光束,生成特征點;然后根據(jù)投射模式與投射光的幾何圖案,通過三角測量原理計算攝像機(jī)光心與特征點之間的距離,由此便可獲取生成特征點的深度信息,實現(xiàn)模型重建。這種可編碼的光束就是結(jié)構(gòu)光,包括各種特定樣式的點、線、面等圖案。結(jié)構(gòu)光法解決了物體表面平坦、紋理單一、灰度變化緩慢等問題。因為實現(xiàn)簡單且精度較高,所以結(jié)構(gòu)光法的應(yīng)用非常廣泛,如微軟公司的Kinect三角測距法是一種非接觸式的測距方法,以三角測量原理為基礎(chǔ)。紅外設(shè)備以一定的角度向物體投射紅外線,光遇到物體后發(fā)生反射并被CCD(Charge-coupled Device,電荷耦合元件)圖像傳感器所檢測。隨著目標(biāo)物體的移動,此時獲取的反射光線也會產(chǎn)生相應(yīng)的偏移值。根據(jù)發(fā)射角度、偏移距離、中心矩值和位置關(guān)系,便能計算出發(fā)射器到物體之間的距離。三角測距法在軍工測量、地形勘探等領(lǐng)域中應(yīng)用廣泛。
彩色圖像也叫作RGB圖像,R、G、B三個分量對應(yīng)于紅、綠、藍(lán)三個通道的顏色,它們的疊加組成了圖像像素的不同灰度級。RGB顏色空間是構(gòu)成多彩現(xiàn)實世界的基礎(chǔ)。深度圖像又被稱為距離圖像,與灰度圖像中像素點存儲亮度值不同,其像素點存儲的是該點到相機(jī)的距離,即深度值。下圖表示深度圖像與灰度圖像之間的關(guān)系。????
深度值指的目標(biāo)物體與測量器材之間的距離。深度值的大小只與距離有關(guān),而與環(huán)境、光線、方向等因素?zé)o關(guān),所以深度圖像能夠真實準(zhǔn)確的體現(xiàn)景物的幾何深度信息。通過建立物體的空間模型,能夠為深層次的計算機(jī)視覺應(yīng)用提供更堅實的基礎(chǔ)。PCL(Point Cloud Library,點云庫)是由斯坦福大學(xué)的Dr.Radu等學(xué)者基于ROS(Robot Operating System,機(jī)器人操作系統(tǒng))下開發(fā)與維護(hù)的開源項目,最初被用來輔助機(jī)器人傳感、認(rèn)知和驅(qū)動等領(lǐng)域的開發(fā)。隨著對三維點云算法的加入與擴(kuò)充,PCL逐步發(fā)展為免費、開源、大規(guī)模、跨平臺的C++編程庫。
PCL框架包括很多先進(jìn)的算法和典型的數(shù)據(jù)結(jié)構(gòu),如濾波、分割、配準(zhǔn)、識別、追蹤、可視化、模型擬合、表面重建等諸多功能。在算法方面,PCL是一套包括數(shù)據(jù)濾波、點云配準(zhǔn)、表面生成、圖像分割和定位搜索等一系列處理點云數(shù)據(jù)的算法。例如PCL中實現(xiàn)管道運算的接口流程:①創(chuàng)建處理對象,例如濾波、特征估計、圖像分割等;②通過setInputCloud輸入初始點云數(shù)據(jù),進(jìn)入處理模塊;?③設(shè)置算法相關(guān)參數(shù);?④調(diào)用不同功能的函數(shù)實現(xiàn)運算,并輸出結(jié)果。
libpcl I/O:完成數(shù)據(jù)的輸入、輸出過程,如點云數(shù)據(jù)的讀寫;libpcl filters:完成數(shù)據(jù)采樣、特征提取、參數(shù)擬合等過程;libpcl register:完成深度圖像的配準(zhǔn)過程,例如迭代最近點算法;libpcl surface:完成三維模型的表面生成過程,包括三角網(wǎng)格化、表面平滑等。如下圖所示,展示了典型的點云數(shù)據(jù)(Point Cloud Data,PCD)模型。
點云數(shù)據(jù)通常出現(xiàn)在逆向工程中,是由測距設(shè)備獲取的物體表面的信息集合。其掃描資料以點的形式進(jìn)行記錄,這些點既可以是三維坐標(biāo),也可以是顏色或者光照強度等信息。通常所使用的點云數(shù)據(jù)一般包括點坐標(biāo)精度、空間分辨率和表面法向量等內(nèi)容。點云一般以PCD格式進(jìn)行保存,這種格式的點云數(shù)據(jù)可操作性較強,同時能夠提高點云配準(zhǔn)融合的速度。本文研究的點云數(shù)據(jù)為非結(jié)構(gòu)化的散亂點云,屬于三維重建特有的點云特點。
使用Kinect采集景物的點云數(shù)據(jù),經(jīng)過深度圖像增強、點云計算與配準(zhǔn)、數(shù)據(jù)融合、表面生成等步驟,完成對景物的三維重建。

對獲取到的每一幀深度圖像均進(jìn)行前六步操作,直到處理完若干幀。最后完成紋理映射。下面對每個步驟作詳細(xì)的說明。景物的深度圖像由Kinect在Windows平臺下拍攝獲取,同時可以獲取其對應(yīng)的彩色圖像。為了獲取足夠多的圖像,需要變換不同的角度來拍攝同一景物,以保證包含景物的全部信息。具體方案既可以是固定Kinect傳感器來拍攝旋轉(zhuǎn)平臺上的物體;也可以是旋轉(zhuǎn)Kinect傳感器來拍攝固定的物體。受到設(shè)備分辨率等限制,它的深度信息也存在著許多缺點。為了更好的促進(jìn)后續(xù)基于深度圖像的應(yīng)用,必須對深度圖像進(jìn)行去噪和修復(fù)等圖像增強過程。作為本文的重點問題,具體的處理方法將在第四章進(jìn)行詳細(xì)的解釋說明。目前深度相機(jī)輸出的depth圖還有很多問題,比如對于光滑物體表面反射、半/透明物體、深色物體、超出量程等都會造成深度圖缺失。而且很多深度相機(jī)是大片的深度值缺失,這對于算法工程師來說非常頭疼。3. 由深度圖計算點云數(shù)據(jù)
? ? ? ? ? ? ??
,
預(yù)處理后的深度圖像具有二維信息,像素點的值是深度信息,表示物體表面到Kinect傳感器之間的直線距離,以毫米為單位。以攝像機(jī)成像原理為基礎(chǔ),可以計算出世界坐標(biāo)系與圖像像素坐標(biāo)系之間具有下式的轉(zhuǎn)換關(guān)系:
? ? ? ? ? ? ?
即
其中u,v為圖像坐標(biāo)系下的任意坐標(biāo)點。u0,v0分別為圖像的中心坐標(biāo)。xw,yw,zw表示世界坐標(biāo)系下的三維坐標(biāo)點。zc表示相機(jī)坐標(biāo)的z軸值,即目標(biāo)到相機(jī)的距離。R,T分別為外參矩陣的3x3旋轉(zhuǎn)矩陣和3x1平移矩陣。對外參矩陣的設(shè)置:由于世界坐標(biāo)原點和相機(jī)原點是重合的,即沒有旋轉(zhuǎn)和平移,所以:? ?
注意到,相機(jī)坐標(biāo)系和世界坐標(biāo)系的坐標(biāo)原點重合,因此相機(jī)坐標(biāo)和世界坐標(biāo)下的同一個物體具有相同的深度,即zc=zw.于是公式可進(jìn)一步簡化為:從以上的變換矩陣公式,可以計算得到圖像點[u,v]T 到世界坐標(biāo)點[xw,yw,zw]T的變換公式:M1稱為相機(jī)的內(nèi)參矩陣,包含內(nèi)參(fx,fy,u0,v0)。M2稱為相機(jī)的外參矩陣,包含外參(R:旋轉(zhuǎn)矩陣,T:平移矩陣)。
(u0, v0)是圖像坐標(biāo)系原點(圖像中心)在像素坐標(biāo)系(以左上角為原點)中的坐標(biāo),dx 和 dy分別是每個像素在圖像平面x和y方向上的物理尺寸。
f 為焦距(像平面與相機(jī)坐標(biāo)系原點的距離)。M稱之為內(nèi)參矩陣可以理解為矩陣內(nèi)各值只與相機(jī)內(nèi)部參數(shù)有關(guān),且不隨物體位置變化而變化。其中fx,fy的單位為個(像素數(shù)目)。用一幅圖來總結(jié)從世界坐標(biāo)系到像素坐標(biāo)系(不考慮畸變)的轉(zhuǎn)換關(guān)系:
?
相機(jī)坐標(biāo)系:在相機(jī)上建立的坐標(biāo)系,為了從相機(jī)的角度描述物體位置而定義,作為溝通世界坐標(biāo)系和圖像/像素坐標(biāo)系的中間一環(huán)。單位為m。以相機(jī)的光心為坐標(biāo)原點,X 軸和Y 軸分別平行于圖像坐標(biāo)系的 X 軸和Y 軸,相機(jī)的光軸為Z 軸,用(Xc, Yc, Zc)表示其坐標(biāo)值。圖像坐標(biāo)系(image coordinate system):描述物體從相機(jī)坐標(biāo)系到圖像坐標(biāo)系的投影透射關(guān)系,方便進(jìn)一步得到像素坐標(biāo)系下的坐標(biāo)。以圖像平面的中心為坐標(biāo)原點,X軸和Y 軸分別平行于圖像平面的兩條垂直邊,用( x , y )表示其坐標(biāo)值。圖像坐標(biāo)系是用物理單位(例如毫米)表示像素在圖像中的位置。像素坐標(biāo)系(pixel coordinate system):描述物體成像后的像點在數(shù)字圖像上(相片)的坐標(biāo),是我們真正從相機(jī)內(nèi)讀取到的信息所在的坐標(biāo)系。單位為個(像素數(shù)目)。以圖像平面的左上角頂點為原點,X 軸和Y 軸分別平行于圖像坐標(biāo)系的 X 軸和Y 軸,用(u , v )表示其坐標(biāo)值。數(shù)碼相機(jī)采集的圖像首先是形成標(biāo)準(zhǔn)電信號的形式,然后再通過模數(shù)轉(zhuǎn)換變換為數(shù)字圖像。每幅圖像的存儲形式是M × N的數(shù)組,M 行 N 列的圖像中的每一個元素的數(shù)值代表的是圖像點的灰度。這樣的每個元素叫像素,像素坐標(biāo)系就是以像素為單位的圖像坐標(biāo)系。對于多幀通過不同角度拍攝的景物圖像,各幀之間包含一定的公共部分。為了利用深度圖像進(jìn)行三維重建,需要對圖像進(jìn)行分析,求解各幀之間的變換參數(shù)。深度圖像的配準(zhǔn)是以場景的公共部分為基準(zhǔn),把不同時間、角度、照度獲取的多幀圖像疊加匹配到統(tǒng)一的坐標(biāo)系中。計算出相應(yīng)的平移向量與旋轉(zhuǎn)矩陣,同時消除冗余信息。點云配準(zhǔn)除了會制約三維重建的速度,也會影響到最終模型的精細(xì)程度和全局效果。因此必須提升點云配準(zhǔn)算法的性能。三維深度信息的配準(zhǔn)按不同的圖像輸入條件與重建輸出需求被分為:粗糙配準(zhǔn)、精細(xì)配準(zhǔn)和全局配準(zhǔn)等三類方法。(1)粗糙配準(zhǔn)(Coarse Registration)粗糙配準(zhǔn)研究的是多幀從不同角度采集的深度圖像。首先提取兩幀圖像之間的特征點,這種特征點可以是直線、拐點、曲線曲率等顯式特征,也可以是自定義的符號、旋轉(zhuǎn)圖形、軸心等類型的特征。隨后根據(jù)特征方程實現(xiàn)初步的配準(zhǔn)。粗糙配準(zhǔn)后的點云和目標(biāo)點云將處于同一尺度(像素采樣間隔)與參考坐標(biāo)系內(nèi),通過自動記錄坐標(biāo),得到粗匹配初始值。(2)精細(xì)配準(zhǔn)(Fine Registration)精細(xì)配準(zhǔn)是一種更深層次的配準(zhǔn)方法。經(jīng)過前一步粗配準(zhǔn),得到了變換估計值。將此值作為初始值,在經(jīng)過不斷收斂與迭代的精細(xì)配準(zhǔn)后,達(dá)到更加精準(zhǔn)的效果。以經(jīng)典的ICP(Iterative Closest Point,迭代最近點)算法為例,該算法首先計算初始點云上所有點與目標(biāo)點云的距離,保證這些點和目標(biāo)點云的最近點相互對應(yīng),同時構(gòu)造殘差平方和的目標(biāo)函數(shù)。基于最小二乘法對誤差函數(shù)進(jìn)行最小化處理,經(jīng)過反復(fù)迭代,直到均方誤差小于設(shè)定的閾值。ICP算法能夠獲得精正確無誤的配準(zhǔn)結(jié)果,對自由形態(tài)曲面配準(zhǔn)問題具有重要意義。另外還有如SAA(Simulate Anneal Arithmetic,模擬退火)算法、GA(Genetic Algorithm,遺傳)算法等也有各自的特點與使用范疇。(3)全局配準(zhǔn)(Global Registration)全局配準(zhǔn)是使用整幅圖像直接計算轉(zhuǎn)換矩陣。通過對兩幀精細(xì)配準(zhǔn)結(jié)果,按照一定的順序或一次性的進(jìn)行多幀圖像的配準(zhǔn)。這兩種配準(zhǔn)方式分別稱為序列配準(zhǔn)(Sequential Registration)和同步配準(zhǔn)(Simultaneous Registration)。配準(zhǔn)過程中,匹配誤差被均勻的分散到各個視角的多幀圖像中,達(dá)到削減多次迭代引起的累積誤差的效果。值得注意的是,雖然全局配準(zhǔn)可以減小誤差,但是其消耗了較大的內(nèi)存存儲空間,大幅度提升了算法的時間復(fù)雜度。經(jīng)過配準(zhǔn)后的深度信息仍為空間中散亂無序的點云數(shù)據(jù),僅能展現(xiàn)景物的部分信息。因此必須對點云數(shù)據(jù)進(jìn)行融合處理,以獲得更加精細(xì)的重建模型。以Kinect傳感器的初始位置為原點構(gòu)造體積網(wǎng)格,網(wǎng)格把點云空間分割成極多的細(xì)小立方體,這種立方體叫做體素(Voxel)。通過為所有體素賦予SDF(Signed Distance Field,有效距離場)值,來隱式的模擬表面。SDF值等于此體素到重建表面的最小距離值。當(dāng)SDF值大于零,表示該體素在表面前;當(dāng)SDF小于零時,表示該體素在表面后;當(dāng)SDF值越接近于零,表示該體素越貼近于場景的真實表面。KinectFusion技術(shù)雖然對場景的重建具有高效實時的性能,但是其可重建的空間范圍卻較小,主要體現(xiàn)在消耗了極大的空間用來存取數(shù)目繁多的體素。為了解決體素占用大量空間的問題,Curless[50]等人提出了TSDF (Truncated Signed Distance Field,截斷符號距離場)算法,該方法只存儲距真實表面較近的數(shù)層體素,而非所有體素。因此能夠大幅降低KinectFusion的內(nèi)存消耗,減少模型冗余點。
TSDF算法采用柵格立方體代表三維空間,每個柵格中存放的是其到物體表面的距離。TSDF值的正負(fù)分別代表被遮擋面與可見面,而表面上的點則經(jīng)過零點,如圖2-7中左側(cè)展示的是柵格立方體中的某個模型。若有另外的模型進(jìn)入立方體,則按照下式(2-9)與(2-10)實現(xiàn)融合處理。其中,指的是此時點云到柵格的距離,是柵格的初始距離,是用來對同一個柵格距離值進(jìn)行融合的權(quán)重。如圖2-7中右側(cè)所示,兩個權(quán)重之和為新的權(quán)重。對于KinectFusion算法而言,當(dāng)前點云的權(quán)重值設(shè)置為1。鑒于TSDF算法采用了最小二乘法進(jìn)行了優(yōu)化,點云融合時又利用了權(quán)重值,所有該算法對點云數(shù)據(jù)有著明顯的降噪功能。表面生成的目的是為了構(gòu)造物體的可視等值面,常用體素級方法直接處理原始灰度體數(shù)據(jù)。Lorensen[51]提出了經(jīng)典體素級重建算法:MC(Marching Cube,移動立方體)法。移動立方體法首先將數(shù)據(jù)場中八個位置相鄰的數(shù)據(jù)分別存放在一個四面體體元的八個頂點處。對于一個邊界體素上一條棱邊的兩個端點而言,當(dāng)其值一個大于給定的常數(shù)T,另一個小于T時,則這條棱邊上一定有等值面的一個頂點。然后計算該體元中十二條棱和等值面的交點,并構(gòu)造體元中的三角面片,所有的三角面片把體元分成了等值面內(nèi)與等值面外兩塊區(qū)域。最后連接此數(shù)據(jù)場中的所有體元的三角面片,構(gòu)成等值面。合并所有立方體的等值面便可生成完整的三維表面。https://www.cnblogs.com/wuyida/p/6301263.html
https://www.cnblogs.com/wuyida/p/6301262.html
推薦閱讀
添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳),即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群:每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~覺得有用麻煩給個在看啦~??