黃思捷,梁正友,2,孫宇,李軒昂
(1.廣西大學計算機與電子信息學院,南寧530004;2.廣西多媒體通信與網絡技術重點實驗室,南寧530004)
利用三維掃描技術對物體進行三維重建是當今游戲、影視、虛擬現實、增強現實中的一項新技術,已被廣泛應用到游戲、影視動漫、虛擬現實、產品展示、人機交互、機器人導航控制等諸多領域。在應用方面,劉振[1]利用Kinect 對地面進行土壤表面的三維點云形態結構模型構造通過彩色圖像、深度圖像和點云初始配準的方法。鄭立華[2]用Kinect 相機獲取不同視角下果樹的原始三維點云,針對傳統最近點迭代算法對待配準點云的空間位置要求苛刻的問題,提出了改進的點云配準算法,完成對蘋果書的建模。吳劍鋒[3]針對Kinect Fusion 硬件要求高,重建效率低,無法滿足快速地重建場景的缺點。提出基于點云融合算法的Kinect 快速三維重建算法,應用Kinect 的多深度圖像融合的三維重建算法實現目標物體的三維重建。
為重建出完整的三維模型,需要對建模物體從不同的視角進行掃描,每次掃描的獲得的點云(待配準點云)往往擁有獨立的局部坐標系統,需要轉換成統一的全局坐標,這一過程稱為點云配準[4]。點云配準是三維重建的核心步驟,配準精度會直接影響三維模型的整體精度[5]。
根據采集視角數的不同,點云配準可以分為雙視角配準和多視角配準。雙視角配準是在輸入點云和目標點云之間構造一個三維空間變換,使輸入點云在此變換作用下能夠最大限度地和目標點云整合成一個整體。其代表性的算法為迭代最近點(Iterative Closest Point,ICP)配準算法[6],其核心思想是以迭代最近點的方法,使兩個點云相互靠近,最終使兩個點云之間的距離誤差最小。ICP 算法存在的問題是容易陷入局部最優和缺少重疊區域導致配準精度不高。Kristijan Lenac等人[7]把遺傳算法和ICP 算法相結合起來,利用遺傳算法找到近似匹配點之后,使用ICP 算法來提高精度,收到較好效果。Zhang Hong 等人[8]提出一種半概率裁剪的ICP 改進算法,利用幀對模型方法和幀對幀方法之間轉換后,使用傳統ICP 算法對相機的姿態進行細化,最后使用TUM RGB-D 數據集來評估配準的精度。
在多視角點云配準下,多視角點云配準是通過計算各輸入點云和目標點云之間的剛體變換關系,然后利用變換關系讓各輸入點云向目標點云進行變換。其代表性的算法是Chen Yang 等人[9]提出的多個視角的順序配準算法。該算法先隨機選擇一個點云作為目標點云,然后按照點云之間的對應關系依次以此點云為基準,后一個點云為待配準點云,采用雙目視角的配準方法進行配準,依次完成多視角的點云配準。此算法操作方便、易上手,但是前、后點云配準之后會有誤差積累,在進行多次進行雙目視角的配準之后累計的誤差會被放大,最后影響三維模型整體的精度和可靠性[10-11]。針對這些問題,不少學者提出了解決方案。閆利等人[10]提出一種閉合條件約束的配準方法。該方法先采用“點-切平面”迭代最近點算法分別求解各點云之間的坐標轉換參數,再以單站點云為配準單元,以轉換參數作為I 觀測值構建條件方程,以條件平差方法對轉換參數作改正以達到全局最優。李健等人[11]提出結合轉臺約束下利用圖像幾何特征進行粗配準和使用迭代最近點ICP 算法實現點云的精確配準的方法,對累積誤差導致的閉環問題以及不同角度拍攝引起的色差問題,通過全局誤差修正與色差修正算法處理,提升重建結果的精度。徐思雨等人[12]設計一個目標函數,將多視角配準問題分解成多個雙視角配準問題,提出逐步求精的解決策略獲得精確的多視角配準結果。郭瑞科等人[13]提出一種基于KD-Tree(K-維樹)點云均勻采樣簡化算法,通過對傳統四點算法(4-Points Congruent Sets Algorithm,4PCS)中的閾值參數進行統一,確定了各誤差閾值參數和點云密度之間的關系;然后通過基于姿態校正的方法解決對稱視角點云引起的誤配準問題。
盡管多視角點云配準研究取得不錯的進展,但仍有進一步提高配準精度的需要。本文使用一臺Kinect V2 傳感器作為采集設備搭建了一套閉合多視角三維點云的配準系統。首先,將建模物體放在旋轉圓盒上,利用Kinect V2 對建模物體每隔60°進行一次點云采集,一共采集6 個點云,形成一個有序而且閉環的點云序列。其次,對建模物體0°到180°視角范圍內的3 個點云,通過兩邊的兩個點云分別與中間點云使用ICP算法進行兩兩配準生成前部點云。以同樣的方法對180°到360°視角范圍內的3 個點云進行處理后生成后部點云。再次,用基于圓盒特征和小型包圍盒約束的方法對前部點云和后部點云進行粗匹配。最后,使用基于圓盒特征和SVD(Singular Value Decomposition)奇異值剛性變換矩陣評估法對前部點云和后部進行細匹配。在進行多視角點云配準時,通過精心安排配準的順序,避免誤差累積的問題。同時,提出的粗配準方法和細配準方法都充分利用圓盒的幾何特征,通過圓盒穩定和明顯幾何特征進行基于特征的點云配準,克服傳統ICP 需要對前部點云進行迭代計算的缺點。實驗結果表明,所提出的方法克服了多視角點云配準的誤差累積問題,提高了三維點云的配準質量。
本文基于Kinect V2 的閉合多視角三維測量系統如圖1 所示。將待測物體置于圓盒上,Kinect V2 置于物體前方,測量時手動旋轉圓盒,Kinect V2 每間隔60°采集一幀圖像,待物體旋轉一周后采集結束。測量時,把圓盒和待測物體作為建模物體一起掃描。圓盒是一個幾何特征明顯并且外形變化有規律的物體,其外形在本研究中被當做一個在建模物體中人為加入的作為配準所需要的幾何特征。

圖1 測量系統
為實現對被測目標的閉合多視角三維測量,建立如圖2 所示的方法框架,下面對各個主要步驟做一簡要說明:
步驟一:采集及預處理。將待測物體放置在一個圓盒上,對圓盒和待測物體每隔60°采集點云一次,獲得6 個點云,它們形成一個有序而且閉環的點云序列。然后去除建模物體(含圓盒和待測物體)以外的點云,為隨后配準做準備。
步驟二:生成前部點云和后部點云。對建模物體0°到180°視角范圍內的3 個點云,用兩邊的兩個點云分別與中間點云用ICP 算法進行兩兩配準生成前部點云。以同樣的方法對180°到360°角范圍內的3 個點云進行處理后生成后部點云。
步驟三:粗配準。對前部點云和后部點云的圓盒點云重疊部分分別提取重疊的特征區域,用本文提出的小型包圍盒約束粗配準方法前部點云和后部點云進行粗配準。
步驟四:細配準。完成粗配準之后,對前部點云和后部點云的圓盒點云重疊部分分別提取重疊的特征區域,得到重疊特征區域分別記為然后使用基于SVD 奇異值剛性變換矩陣評估法求出的剛性變化矩陣,剛性變化矩陣包括旋轉矩陣R和平移矩陣T。并利用求出的旋轉矩陣R和平移矩陣T對后部點云進行剛性變換,使它向前部點云進行變換,完成配準。
對建模物體進行點云配準需要采集完整的點云。由于Kinect V2 一次只能采集建模物體一部分的點云;因此,本文采用六面采集方法,對建模物體按圓周順序每隔60°的不同角度采集六個點云,這些點云包含建模對象的完整點云信息。
Kinect V2 的深度攝像頭一般采集范圍為z軸方向0.5 米到 4.5 米,y軸方向±60°,x軸方向±70°(根據需求,可適當擴大其采集范圍,一定條件下,距離越近精度越高)。由于Kinect V2 采集范圍非常大,所以采集到的點云將會包括地面、背景、場景內其他物體等不需要的點云。這些不必要的點云會影響點云配準、特征提取等操作,最后對三維建模的精度造成不良影響。為避免采集到多余的點云,本文對Kinect V2 的采集范圍進行精確的設置:z軸范圍設定在0.05 米到2 米,x軸范圍設定在-0.5 米到0.5 米。同時,還需要對地面點云進行單獨采集,以便去除其中包含的地面點云。對建模物體點云進行采集步驟如下:
步驟一:設置Kinect V2 采集的有效范圍。將Kinect V2 放置在一個物體上,如圖6 所示,使Kinect V2達到一定的高度,因為所采集的物體隨后要放在一個圓盒之上。如果Kinect V2 的高度不夠,會導致目標物體部分區域無法采集到,導致生成的點云產生殘缺和空洞,最終影響隨后點云配準精度。
步驟二:對地面進行點云采集,獲取地面點云G。
步驟三:將圓盒放置于地面上并進行點云采集,采集圓盒點云C。
步驟四:將目標物體放置在圓盒之上,對目標物體按圖3 所示方向以0→1→2→3→4→5 順序采集點云,獲得建模物體的6 個閉合多視角點云序列Mi,i∈{1,2,3,4,5,6}。建模對象點云采集完成。

圖3 點云的采集
由于采集到的建模物體多視角點云含有地面點云信息以及離群點,需要去除這些干擾配準的點。
對地面點云G遍歷其中每一個點并求出在y軸坐標(高度)中最大的值,設為yG_max。然后,對建模物體多視角點云中每一個點進行遍歷,若點(x,y,z)的y坐標值小于yG_max,則該點為地面點云,將該點從建模物體多視角點云中去除。
在除去地面點云之后,對建模物體多視角點云還要去除離群點。本文采用PCL(Point Cloud Library)點云庫中RadiusOutlierRemoval 濾波器[14]對點云進行采樣濾波,其原理是:首先,設置濾波器的兩個參數,一個參數為圓的半徑長度r,另外一個參數為以r為半徑生成圓內包含點云的個數n。然后,在建模物體多視角點云中任取一點云為圓心、半徑為r的圓,如果在領域內的點云數量大于n,那么認定該點是非離群點;否則判斷該點為離群點,并將其去除。例如,在圖3,設半徑為r,n為1 時,如圖4 中的點云A 將判定為離群點將其去除,而B 和C 的點云將判斷為非離群點將其保留。

圖4 除去離群點
作為多視角點云配準代表性,順序配準算法[9]直接易行,但前后配準點云之間有誤差累積,影響整體配準的精度與可靠性[10-11]。在順序配準算法基礎上,文獻[10-11]采用各種全局優化措施減少誤差累計問題,但是計算復雜。本文提出一種解決累積誤差的方案,對于采集到的6 個有序閉合視角點云序列,我們對0°至180°的三個點云中的兩個兩邊點云分別與中間點云用ICP 算法進行兩兩配準生成前部點云。以同樣的方法對180°到360°視角范圍內的3 個點云進行處理后生成后部點云(本小節)。由于采用兩個兩邊點云分別與中間點云用ICP 算法進行兩兩配準,而不是對三個點云順序配準,因此沒有產生累積誤差。最后,對生成的前部點云和后部點云進行配準(2.4 小節),最終完成閉環多視角點云的配準。
當兩個點云有一定的重疊(重疊率超60%情況下),ICP 算法能得到正確的配準結果[15]。按照2.1 小節方案采集點云時,兩個相鄰的點云有非常大的重疊,可用直接用ICP 算法進行配準。
將采集到的0°至180°的三個點云預處理后記為Ml(左邊)、Mm(中間)、Mr(右邊)。從上下文可知Ml和Mm兩個點云之間在視角上有theta=60°的角度差,Mr和Mm兩個點云之間在視角上有theta=-60°的角度差。對Ml(作為輸入點云)和Mm(作為目標點云)進行配準,首先使用公式(1)進行旋轉操作對輸入點云進行變換,隨后再使用ICP 進行配準。

其中data為輸入點云,new_data為變換后的點云,theta為輸入點云到目標點云的視角差。
對Mr(作為輸入點云)和Mm(作為目標點云)Ml(作為輸入點云)和Mm(作為目標點云)進行配準,使用公式(1)進行旋轉操作對輸入點云進行變換,隨后再使用ICP 算法進行配準。
通過以上操作,將0°至180°的三個點云配準成前部點云S。用同樣的方法將180°至360°視角范圍內的3 個點云進行處理后生成后部點云P。生成的前部點云和后部點云為完成建模物體的閉環多視角點云配準打下基礎。
前部點云和后部點云視角差為180°,如圖5 所示。兩個點云之間重疊區域非常稀少,直接使用ICP算法會由于缺少重疊區域中的特征,造成配準效果差,甚至配準失敗。針對以上問題,我們利用建模物體中圓盒具有幾何特征穩定的特點,提出利用圓盒特征和小型包圍盒約束相結合的粗配準算法,基于圓盒交接區域特征和SVD 奇異值剛性變換矩陣評估法相結合的細配準算法。先用提出的粗匹配算法進行配準,獲得良好的初始位置;然后,再用提出的細配準算法進行配準,有效解決上述問題。
2.4.1 基于局部角度閾值的特征提取
前部點云S和后部點云P位置關系如圖5 所示(從y軸截面上看)。其中,兩圓弧分別代表圓盒前部和后部,4 個圓圈分別是前部點云S、后部點云P在后續配置中要用到的特征區域。我們采用基于角度閾值的特征提取方法提取前部點云S和后部點云P分別對應的特征區域,該方法形式化描述如下:設點云B∈{S,P} ,vector(1 , 0,0 )是x軸正方向向量 (vector正),vector(- 1,0,0 )是x軸負方向向量(vector負),圓盒點云C在y軸的最大值與最小值分別為ymax和ymin,用公式(2)對點云B進行特征區域的提取,得到特征區域記為Bt。公式(2)中γ為預設的角度閾值。


圖5 前部點云S和后部點云P
2.4.2 使用圓盒特征和小型包圍盒約束的粗配準
基于特征的粗配準方法首先要確定要靠攏的特征區域。由于每次建模物體不一樣,導致每一個建模物體交接區中的域特征區域的幾何特征有很大區別,魯棒性不高。這種擁有幾何特征不明顯會的特征區域會導致點云配準精度不高。針對上述問題,本文把建模物體放置在圓盒之上,將前部點云的圓盒部分和后部點云的圓盒部分的特征區域進行點云配準,求解它們的出剛性變換矩陣,隨后通過剛性變換矩陣對建模對象和圓盒作為一個整體進行變換。由于使用圓盒,從不同位置分割都不會破壞其幾何特征,具有很高的魯棒性。
設點云S為目標點云,點云P為輸入點云,粗匹配的目標是將輸入點云P通過平移變換移動到與S交接的位置上。粗匹配的過程如下:
步驟一:對點云S用公式(2)提取到特征區域St,計算出St在x軸的最大值Smax_x和z軸的最大值Smax_z,設定一個包圍盒大小的閾值h,如圖5 所示。并設包圍盒的 4 個頂點分別為:(Smax_x+h,Smax_z+h)、(Smax_x+h,Smax_z-h)、(Smax_x-h,Smax_z+h)、(Smax_x-h,Smax_z-h)。
步驟二:對點云P用公式(2)提取到特征區域Pt,然后計算出其在x軸最大值Pmax_x和在z軸最小值Pmin_z。
步驟三:設閾值Δx為在x軸上P每次移動的量,Δz為在z軸上P每次移動的量。Pmax_x當前所處于位置的x軸坐標值大于(Smax_x+h),Δx應設負值,Pmax_x當前所處于位置的x軸坐標值小于(Smax_x-h),Δx應設正值。Pmin_z和Δz也做同樣的處理。如果Δx和Δz設置過大,可能會導致每次平移中讓Pmax_x和Pmin_z都無法有效進入包圍盒范圍內。如果Δx和Δz設置過小,會增加迭代的次數。所以設置Δx和Δz合適大小的數值,不僅能讓Pmax_x和Pmin_z有效進入包圍盒范圍內完成粗配準,而且還能減少迭代的次數。對P中的每個點(x,z)進行平移操作使用公式(3):

步驟四:用公式(3)對點(Pmax_x,Pmin_z)進行平移得到的點用公式(4)判斷是否落在包圍盒內:

(3)使用圓盒交接區域特征的細配準
在完成前部點云和后部點云粗配準后,前部點云和后云部點集獲得良好初始位置,已經具備進行細配準的條件。接下來要對前部點云和后部點云進行基于特征的細配準。
本文所采用細配準方法是把包含建模對象和圓盒的點云作為一個整體來進行剛性變換。首先,設粗配準后的前部點云為S,后部點云為P。使用公式(2)進行分別對S和P特征提取,分別得到相應的特征區域St和Pt。使用SVD 奇異值剛性變換矩陣評估法對St和Pt求出旋轉矩陣R和平移矩陣T。最后對后部點云P使用剛性變換公式(公式(5))進行剛性變換。

其中R為旋轉矩陣,T為平移矩陣,Pl是剛性變換后的點云。
由于本文是利用特征區域St和Pt進行SVD 奇異值剛性變換矩陣評估法來獲取旋轉矩陣R和平移矩陣T。而傳統ICP 算法中必須對建模物體特征區域的每一個點進行遍歷計算,而本文只需要對圓盒的特征區域進行計算,需要計算的點數量比傳統ICP 要少,因此,本文的細配準算法計算效率比傳統的ICP 算法要高。同時由于引進擁有幾何特征明顯的圓盒作為特征,避免傳統ICP 算法在少量特征點云的情況下配準精度不高的問題,解決了建模物體的前部點云和后面點云配準精度低的問題。
本文使用Kinect V2 作為深度數據采集的設備。Kinect V2 的深度攝像頭適用于室內弱光的環境下,所以本文選擇在白天關閉照明的室內進行深度信息采集。在程序實現,本文采用Visual Studio 2015 作為編譯環境,并且使用PCL 點云庫和OpenCV 作為第三方編程庫。所有程序代碼在PCL 點云庫基礎上進行算法改進,采用C++實現,運行于Windows 10 64 位系統、Intel Core i7-7700HQ CPU@2.80GHz 處理器、8G 內存的筆記本電腦上。圖6 為本文Kinect V2 拍攝場景和采集目標水果籃子、打印機。

圖6 Kinect拍攝場景和采集對象水果籃子、打印機
圖6 中,圓盒高3 厘米、直徑10 厘米。KinectV2放置在高6 厘米上的矩形石塊上,圓盒距離KinectV2 23 厘米。水果籃子高5 厘米、長軸15 厘米、短軸11 厘米。打印機長17 厘米、寬7 厘米、高5 厘米。
3.2.1 實驗處理過程
分別用2.2 小節方法對6 個閉合多視角點云序列去背景、除離群點;用2.3 小節方法對分別對0°-180°的三個點云配準生成前部點云(圖7 左圖),用2.3 小節方法對分別對180°-360°的三個點云配準生成后部點云(圖7 右圖);用2.4 小節方法對前部點云和后部點云進行前后配準,得到配準后的點云,如圖8 第三列。

圖7 配準獲得點云
3.2.2 實驗效果分析
我們將本文提出的方法與用順序配準算法[6]、傳統ICP 算法進行對比,實驗效果如圖8 所示。

圖8 水果籃子配準效果圖
圖8 第一列是文獻[6]順序配準獲得的效果圖。用2.1 小節采集到的點云,以 1→0→2→4→3→5 按圓周順序兩兩用ICP 算法進行配準得到的效果圖。在順序配準的正面視圖(圖8 第一列第一張圖)和反面視圖(圖8 第一列第三張圖)中可以看出,前部點云和后部點云出現嚴重的穿模,但是點云0、點云1、點云2 利用順序配準得到配準精度不錯的前部點云,后部點云也是亦然。但是順序配準的問題在于點云2 和點云4 配準的時候,由于這兩個點云缺少足夠的特征導致配準的精度低下,從左視圖(圖8 第一列第二張圖)和右視圖(圖8 第一列第四張圖)更容易看出前部點云和后部點云嚴重穿模的程度。并且在隨后點云4 與點云3 配準的時候,由于點云4 已經在處于誤差非常大的位置上,導致點云3 在點云4 基礎上繼續配準導致配準的誤差被放大。
在前部點云和后部點云形成之后(2.3 小節),需要對前部點云和后部點云進行配準,本文將使用ICP 算法與本文提出的方法(2.4 小節)進行對比,實驗效果如圖8(第二列、第三列)所示。
圖8(第三列)中的第一張圖、第二張圖、第三張圖、第四張圖是使用本文方法進行前部點云和后部點云配準的效果圖(對應 0°、90°、180°、270°視角),明顯可以看到前部點云和后部點云的交接區域能很好地拼接在一起,交接區域并無明顯的錯位。圖8(第二列)中的第一張圖、第二張圖、第三張圖、第四張是直接使用ICP算法進行拼接的效果圖(對應 0°、90°、180°、270°視角)。由于ICP 算法一般應用于同一面的點云配準,對本文前部點云和后部點云這樣具有局部重疊區域且重疊區域比較少的情況,導致配準的精度不高。在圖8(第二列第一張圖)中后部點云已經開始發生偏移,圖8(第二列第二張圖)中前部點云和后部點云的交接區域有明顯的錯位。圖8(第二列第三張圖)中后部點云已經跟的前部點云有穿模現象,圖8(第二列第四張圖)中前部點云和后部點云交接區域穿模更加明顯。

圖9 打印機配準效果圖
圖9 第一列為順序配準對打印機進行配準的效果圖。用2.1 小節采集到的點云,以1→0→2→4→3→5按圓周順序兩兩使用ICP 算法進行配準得到的效果圖。在順序配準的正面視圖(圖9 第一列第一張圖)可以看到前部點云配準獲得不錯的配準效果。但是由于點云2 和點云4 缺少特征,點云2 和點云4 配準誤差開始增大,從而導致點云3 的配準精度低下。在反面視圖(圖9 第一列第三張圖)后部點云的右邊部分已經向前部點云傾斜的。
圖9 第二列為ICP 算法對打印機前部點云和后部點云配準的效果圖。在左視圖和右視圖中(圖9 第二列第二張圖、第二列第四張圖)明顯看出前部點云和后部點云的圓盒的交接區域已經出現上下錯位,并且正面效果圖(圖9 第二列第一張圖),前部點云看出已經向右邊偏斜。圖9 第三列是使用本文方法(2.4.1 小節到2.4.2 小節)對打印機前部點云和后部點云配準的效果圖,可以看到前部點云和后部點云配準的交接區域能很好地拼接在一起,交接區域并無明顯的錯位。
從以上實例可看出,本文方法利用圓盒點云作為特征點進行配準,依賴于圓盒穩定的幾何特征,配準效果明顯比ICP 算法好。
本文提出了一個Kinect V2 閉合多視角三維點云的配準方法。首先,將建模物體放在旋轉圓盒上,利用Kinect V2 對建模物體進行每隔60°進行一次點云數據采集,獲得一個含有6 個點云的有序而且閉環的點云序列。其次,對建模物體0°到180°視角范圍內的3個點云(180°到360°角范圍內的3 個點云)進行配準生成前部點云(后部點云)。再次,用基于圓盒特征和小型包圍盒約束的方法對前部點云和后部點云進行粗匹配。最后,用基于圓盒特征和SVD 奇異值剛性變換矩陣評估法對前部點云和后部進行細匹配。理論分析和實驗結果表明,所提出的方法克服了多視角點云配準的誤差累積問題,該配準方法提高了三維點云的配準質量,為在點云上進一步進行曲面重建創造了良好的條件。