何昕諭,秦麗娟(通迅作者)
(沈陽理工大學信息與科學工程學院 遼寧 沈陽 110159)
如何使三維重建準確對目標點云進行濾波處理一直是國內外研究的主要方向,傳統方法一般是確定搜索點云體素重心將其他點云進行濾除。近年來,基于三維重建技術的點云數據處理有了很大進展,本文提出用原始點云信息中的體素網格中心點代替體素重心點,這樣可進一步提高點云信息的表達準確度,再采用高斯濾波增加目標點云平滑特征。
通過Kinect深度相機傳感器獲取目標物體三維點云數據,三維點云數據能夠對應二維圖像之間的像素點。在三維圖像里,能夠通過目標物體信息表面得到點云信息,對應二維圖像里物體表面的像素點。實際上,點云是指在同一個坐標空間下,來展示出目標表面物體的特征信息和存在空間分布的點集。三維點云的數據不僅僅包含了空間點的坐標,而且也涵蓋了一些色彩和強度等物理相關信息,通過RGB相機得到的彩色圖片內的像素與數據內的色彩對應到賦予的點而獲得的。通過三維激光掃描儀采集到的回波強度被稱之為強度信息,利用強度信息可以區分不同表面的材質、粗糙度等。點云主要有以下4種常見分類方式[1]。
如圖1(a)所示,無規則點云在空間分布中是雜亂無序的,每個點云之間毫無特殊的聯系和結構規律,這種點云一般在采集過程中很容易出現,因此被研究的也比較多,通過深度視覺相機一般得到此類點云數據。
如圖1(b)所示,掃描線點云主要會出現在線性掃描儀器設備中,線性掃描儀器會發射一束激光然后掃描一周,此光劃過的平面會獲取多個掃描點信息,將這些點進行結合得到一條掃描線,最終構成掃描線點云。
如圖1(c)所示,為網格化點云,此類點云的數據中,點和點之間有著明顯的拓撲結構,將每個點連接起來就得到了網格化點云。
如圖1(d)所示,為多邊形的點云,但這種點云是無法直接在設備采集中進行提取而得到,通常是在經過大數據分析之后才獲得,它的特征主要是點云集合的點在不同的平面上,每個平面且彼此平行。
PCL是指吸取了從近代以來對點云研發技術基礎上發展得到的大規模開發平臺以及C++編程庫支持的各種操作系統,平臺如Windows、Android、Mac OS X、Linux。PCL在3D信息獲取中,與Opencv在2D信息獲取中具有同樣重要的地位,并且用于測繪技術、無人駕駛技術、人工智能領域、人機交互鄰域、逆向設計以及一些工程自動化技術領域中。點云的處理流程一般是通過對點云信息加以提煉,點云濾波,點云數據處理,點云分割,點云配準,點云特征值的獲取,點云跟蹤,點云三維重建以及可視化等技術,PCL點云也可以結合機器學習、模式識別、深度學習等AI智能化算法解決實際問題。在點云進行大數據分析領域里,PCL也是開源的重要工具。PCL官方把PCL分類為一個很詳細的代碼庫目的是為了實現模塊化使用,因為這樣提高了代碼的可讀性,也提高了代碼配置性,從而極大地簡化了開發的工作過程。具體代碼編譯如下。
(1)libpclfilters:可以實現采樣并且剔除離散點、進行特征提取和擬合估計濾波器。
(2)libpclsurface:能夠進行節點云的三維表面重構技術包括了網格重構和凸包重構。
(3)libpclI/O:能夠實現點云數據進行輸入和輸出操做。
(4)libpclsurface:可以實現點云的三維表面重建技術比如網格重建和凸包重建。
(5)libpclregisteration:能夠實現三維點云配準功能。
(6)libpclkeypoints:能夠實現不同的三維點云,關鍵點特征提取。
(7)libpclrangeimage:將三維點云數據集變成深度圖像。
由于通過Kinect相機收集到大量的點云數據,同時又因為深度相機設備精良,使用深度相機操作者經驗有限以及電磁波的強放射性對于被測量目標物的表面數據性質產生變化,以及在對點云數據處理進行操作配準過程中產生影響會對點云數據處理產生噪聲點云。因此對點云進行濾波預先處理,對噪聲點和離散點、數據壓縮、空洞等進行后續處理,才能有效地進行點云配準和點云特征值提取,最后進行點云的三維重建以及可視化。其結構原理與信號處理中濾波方法類似。
體素濾波法可以不損害點云本身的結構性功能,而且可以實現下采樣,但可能會移動點云的位置,使用此方法能夠消除離散點和噪聲的點云。它的工作原理是先通過對點云信號進行運算得出一個完全覆蓋住了該點云的小正方體,再按照我們所得的分辨率將點云劃分為若干個的小立方體,而后求得小立方體的質心,再使用質心位置近似求得在此正方形內的一個點。而ApproximateVoxelGrid的方法和這種方式有所不同的地方是將每個小立方體重心點近似為該正方體的若干點[2]。
體素濾波法過程[2-3]如下。
(1)通過點云坐標值可以得到X、Y、Z在3個方向坐標系上的最大值Xmax、Ymax、Zmax,最小值Xmin、Ymin、Zmin。然后利用最大值減去最小值算出包圍盒邊長lx、ly、lz,見公式(1)。
(2)設置體素小立方體邊長cell3個方向X、Y、Z坐標軸切割成M、N、L份,因此一共得到SUM=M*N*L體素小立方體,其中表示向下方向取整。
(3)將每個體素小立方體進行標號為(x,y,z),得到每個對應數據點的體素小立方體。
(4)計算每個點云的重心,只保留每個體素立方體的重心點云,將其他點云去除。cijk為體素立方體重心,點云信息,k 為點云點數。
在對傳統點云濾波過程中,高斯濾波是比較常用的濾波方法之一。高斯濾波即噪聲的概率密度服從高斯正態分布。高斯無論是在opencv、圖像處理和各種領域都有著相當廣泛應用[4]。高斯濾波點云的優勢如下。
(1)在進行點云濾波過程中,噪聲點云邊緣并不明確。為了使PCL點云有著更好的濾波效果,在每個邊緣特征處理中做到均勻化,但高斯濾波具有均衡的濾波特性,而且高斯正態分布函數性質也能滿足這個要求。所以,這是高斯濾波過程優勢之一。
(2)因為高斯濾波是單值函數,所以經過高斯濾波處理后的信噪比通常都采用加權平均方式加以表示,各個點的大小根據點與中心點相互之間的遠近而單調改變,確保了在低濾波區域中的有效性能。對鄰域曲線上的點具有不同的過濾作用,提高了對點云過濾的準確性。
(3)利用高斯濾波達到的濾波效果是由標準差σ進行決定,曲線的平滑程度和σ有著密切的聯系,σ的值越大表示高斯濾波效果越好。
高斯濾波相當于一個具有平滑特性的低通濾波器(LPF),經過此類方法處理后的點云比較平滑。標準差和均值見公式(6)、公式(7)。
體素濾波方法一般為了保持目標點云的原有特征,在這樣前提下減少目標點云的三維數據量,但是由于本文內容豬的點云數量比較多。因此,為了提升對點云的后續處理速率,而且該重心點不一定是原始點云中的點,有失原始點云的細小特征。我們采樣將體素網格的重心替換成小立方體的重心鄰近點來實現下采樣濾波方法,使用改進體素濾波法,實現了下采樣濾波法,而且保持了原始點云之間的數據特征[5]。
改進體素濾波法結合高斯濾波算法主要步驟如下。
(1)先用高斯濾波法對目標點云進行濾波處理。
(2)首先對豬點云集合P實現kd-tree,統計目標點云的總體數量,得到目標點云的實現最小包圍盒,并且算出包圍盒的體積V,把包圍盒的3個方向x、y、z上的長度分別用Lx、Ly、Lz來進行表示。
(4)算出每個體素小立方體的重心p0(x0,y0,z0),構建新的豬點云集合{Pc,c=1,2......,n}。其中
(5)使用Kdtree用循環語句遍歷點云P,尋找與Pc重心點最鄰近的點,最后構成新的集合Pe。
依據上述步驟設計改進體素濾波算法模型。基于改進體素算法設計思路如下,通過Kinect深度視覺相機獲取點云就可以根據下面流程圖2進行操作。
(1)首先輸入待處理點云信息圖像,將其點云圖像進行高斯濾波,濾除服從高斯正態分布噪聲點云,將點云圖像中不屬于真實圖像的點進行平滑。
(2)采用改進體素濾波法進行點云濾波,搜索進鄰近下采樣點把點云重心點換成體素中心鄰近點,目的是減少點云數據數量并且保留點云特征,為后續點云配準提升速率[5]。
改進體素濾波法濾波結合高斯濾波方法與體素濾波法效果相比,濾波效果更加精確,并且輪廓比較明顯,仿真圖可見圖3、圖4。
高斯濾波和改進體素濾波法結合,目標點云通過高斯濾波,適合正態分布函數點云數據。由于離群點的特征,可以把某處的點云數據小于此密度,則點云即為無效點云。算出每個點和最近的K個點之間平均距離。點云中點呈現高斯分布,設定好均值方程來移除3∑之外的點,通過高斯濾波可以讓點云數據更加平滑。然后采樣改進體素濾波法,保留體素濾波法的特點,將目標點云數目減少,方便后續處理。同時,將點云的鄰近點代替點云的重心點,使目標點云信息輪廓更加完整。通過改進體素濾波法和高斯濾波法結合,目標點云信息預處理的效果對比傳統濾波方法濾波效果更好。通過二種濾波方法的結合,方便了后續點云信息的處理。