張匡宇 , 田 慶
(陜西鐵路工程職業技術學院,陜西 渭南 714000)
在地面三維激光掃描儀采集數據時,受掃描對象的表面反射、實測環境等的影響,采集得到的點云包含一小部分噪聲,噪聲點混雜在目標物體表面點云中,從而導致被測物體細節特征丟失[1-3]。另外,通常掃描點云密度大,這些數據會造成處理效率低下。由于以上原因,需要對點云數據進行去噪和精簡處理,從而提高模型精度和數據處理效率。
在三維激光點云去噪方面,國內外學者進行了廣泛的研究,Fleishman等[4]提出局部鄰域格網頂點法線向量濾波的去噪算法,先計算法向量,再由法向量值決定去噪強度,該算法有較好的平滑效果,但運算效率較低;蘇志勛等[5]提出了一種基于法向修正的點云平滑算法,此算法適用于少量噪聲點的情況,但當模型中噪聲點較多時,法向量修正的偏差會影響點云平滑效果;曹爽等[6]將改進的移動最小二乘法去噪擴展到三維空間,由鄰域點之間的相關系數計算權值向量,由向量判別平曲,從而去除噪聲,該方法具有較好的魯棒性;王金志等[7]針對點云噪聲在尺寸上的特點,將其分為大尺寸噪聲和小尺寸噪聲,大尺寸噪聲采用統計濾波的方法去除,小尺寸噪聲則采用雙邊濾波的方法進行平滑。
在三維激光點云精簡方面,相關的研究有:Martin等[8]提出,將全部點云映射到一網格平面,將點云均勻分配到其中,此時可將原始數據替換為網格中值點,但在進行精簡的過程中,并沒有分析點云特征,會導致部分細節特征丟失;袁小翠等[9]以高斯映射為依據實現點云聚類,把所有聚類劃分為平坦區域、非平坦區域,再多次細劃非平坦區域,由聚類中心點代替聚類所有點;張雨禾等[10]提出基于泊松分布進行點云精簡,先判斷每個點云在等距離上的法向量,再根據法向量的變化得出因子檢測曲率的大小,對不同的曲率平面差別進行精簡。
常見點云算法中,點云去噪與精簡分開進行,運算量大。課題組提出一種基于曲率判別的點云去噪與精簡統一的算法,首先估算點云的法向量,依據曲率對點云進行分類,對不同區域采用不同的去噪方法,然后依據曲率對點云進行不均勻精簡,達到較高精簡率的同時保留點云細節信息。
主成分分析法(Principal Components Analysis,PCA)估算點云的法向量如下:設P為所有點云數據的集合,P={P1,P2,…,Pn},其中點云總數為n,任一點Pi的K鄰域的點集合為:Pk={Pk1,Pk2,…,Pkk},G表示鄰域點云的重心,那么:

點Pi的協方差矩陣C定義為:

協方差矩陣C是一個對稱的半正定矩陣,求解下面方程:

可以得到協方差矩陣C的三個特征值λ1,λ2,λ3,以及三個特征值所對應的三個特征向量α1,α2,α3。假設大小λ1<λ2<λ3,那么λ1為最小特征值,λ1所對應的特征向量α1就是點Pi的K鄰域模擬的點云虛擬平面的法向量。
在Matlab中采用PCA計算出的點云向量如圖1所示:(a)為整體點云中每個點與所對應法向量;(b)為圖(a)圈中的放大圖。一個個點組成點云,點向外的小箭頭是各個點擬合平面的法向量。整體上看,圖中各點的法向量方向和點所在鄰域平面基本呈垂直狀態,說明PCA對于點云法向量的估計有較好的效果。

圖1 點云向量示意圖
為了有效進行后續的去噪與精簡算法,同時達到較好的特征保留效果,需要先將三維點云劃分為平緩區域和特征區域。課題組采用基于點云平均曲率的方法對三維點云數據進行鄰域劃分。假設任意點Qi處的平均曲率為Hi,則定義采樣點在k近鄰域內的局部特征權值如式(4)所示:

其中H為采樣點鄰域內的平均曲率:

根據點云的實際情況,首先設定閾值M,若任意點Q處的局部特征權值小于設定閾值M,則判定該點位于平緩區域;如果若任意點Q處的局部特征權值大于設定閾值M,則判定該點位于特征區域。
對于平滑區域,曲率變化較小,采用一種基于采樣點到近鄰點平均距離的統計濾波算法,可以去除遠離該區域的離散點。統計濾波算法統計點云數據中任一被查詢點在其鄰域內所有點集之間的距離并處理,設三維點云數據模型中的任意一點記為,i=1,2,3,…,n(n為點云總數)。P的K鄰域內任意點 ,j=1,2,3,…,K(K為鄰域內點云數),Pi到Pj的距離為Sj,則:

認為得到的結果滿足正態分布,均值以及標準差分別為S和σ,Pi到其鄰域每個點的平均距離S為:

鄰域距離的標準差σ為:

正態分布形狀由均值S和標準差σ決定,定義S+σ小于標準范圍的點為有效點,平均距離在標準范圍之外的點可被定義為離散點,并從數據集中刪除。
拉普拉斯濾波法是一種優秀的點云去噪算法,其原理是對三維點云的每一個點采用Laplace算子,Laplace算子定義如下所示:

設Pi為點云中任意一個待處理點:

對上式積分后,模型曲面中存在的小的變化特征、鄰點云噪聲數據就會快速發散到該點的鄰域中,通過這種方法來提高模型曲面平整度。顯式歐拉積分法表達式:

采用該方法處理每一個點云數據,使其逐步移動到鄰域的質心處:

其中,Qj為Pi的第j個鄰域點,λ為較小的正數,點云濾波中wj為鄰近點至點Pi的距離的倒數。采樣點進行若干次迭代后,使高頻采樣點逐漸向其鄰域范圍內擴散,從而消除噪聲。
課題組采用不均勻網格法進行點云精簡,其思想是在點云平緩區域采用步長較大的網格,在點云數據起伏較大或是特征明顯的地方將網格再次細分,采用步長較小的網格,每個網格只保留中心點,在特征區域會保留更多的點云,以描繪點云的細節,在平緩區域可以實現較高的精簡率。由于已經將點云劃分成了平緩區域和特征區域,只需要在平緩區域和特征區域用不同步長網格進行精簡即可。
為了驗證本算法,對兔子點云模型進行實驗。首先,在原始點云中加入少量的白噪聲,得到帶有噪聲點的待處理點云,再運行算法,得到去噪精簡后的點云數據,如圖2所示。圖2(a)為原始兔子點云數,圖2(b)為去噪精簡運算后的點云,可以很直觀地看到點云數量的減少,說明有較好的精簡效果。為了更客觀地說明點云的去噪效果,利用Geomagic軟件對原始點云和去噪精簡后的點云分別進行封裝,得到點云立體模型,由軟件可以計算出兩個立體模型之間的偏差。從表1的數據可以看出,課題組所用的方法誤差較小,很好地保持了原模型的特征,既避免產生過度光滑導致模型失真,又較好地去除了噪聲點云。

圖2 點云對比

表1 點云模型偏差與精簡效果
課題組提出一種基于曲率判別的點云去噪與精簡統一的算法。首先通過主成分分析法估算點云的法向量,由此對點云進行分類;然后對于曲率較小的平滑區域采用統計濾波算法處理,對于曲率較大的特征區域采用拉普拉斯濾波法進行濾波;最后依據曲率對點云進行不均勻精簡,曲率較小的平滑區精簡率較高,曲率較大的特征區精簡率較低,達到較高精簡率的同時保留點云細節信息。對兔子點云模型用算法進行實驗,結果表明:課題組提出的算法有較好的去噪效果,點云誤差較小,精簡效果良好。