王連慶,錢 莉
(上海工程技術大學機械與汽車工程學院,上海 201620)
3D 視覺[1]的表達形式更為直觀,相比傳統的2D 視覺,可獲得物體更加全面的信息。獲得的信息以三維形式儲存,同時具有顏色、強度等特征,因此在文物重建、人臉識別、3D 打印、手勢識別[2-3]等方面都有著廣泛應用。
文獻[4]開發了一套樹木結構提取與分割系統,其利用地面激光雷達快速獲取樹木點云數據,從中提取與分割樹木結構(胸徑、樹高、材積等),并根據分割的數據判斷樹木生長情況;文獻[5]基于三維激光掃描技術,針對軍事領域中的覆土油罐建設,設計了一套輔助建設系統,具有油罐選址、預算控制等功能。但文獻[4]、[5]基于具體應用場景設計的點云處理系統應用場景單一,不易于擴展。文獻[6]利用OpenGL 開發的點云處理系統對拾取得到的型值點進行NURBS 曲線擬合,實驗證明處理10 萬個點僅需0.8s,因此可快速處理點云數據;文獻[7]設計了一種針對3D 掃描儀的點云處理系統,該系統點云重建功能強大,可恢復真實物體的紋理信息。文獻[6]、[7]中的系統在某一模塊功能強大,但是整體功能較少,無法對復雜情況下的點云數據進行處理。文獻[8]利用PCL 點云庫開發的點云處理系統集成了點云分割、濾波、重建等算法,系統功能較全,但軟件界面的交互性較差,當點云數據量較大時,點云處理速度較慢、效率較低。此外市場上多家3D 相機廠家都擁有自己的點云處理系統,如LMI、康耐視等,但相關系統往往需要與自己品牌的3D 相機配套使用,這種捆綁銷售的策略剝奪了用戶自主選擇的權利。
通過以上分析可以發現,目前針對激光雷達、3D 掃描儀開發的點云系統較多,而針對3D 相機開發的系統很少。針對具體項目集成的點云處理系統較多,但大多功能單一、擴展性較差,無法處理復雜狀態的點云數據。因此,針對該問題,本文利用QT 平臺與點云庫(Point Cloud Li?brary,PCL)開發了一套獨立的點云處理系統,可對獲得的點云數據進行去噪、優化、分割、重建等操作。此外,本軟件已集成康耐視、LMI、盛相、photoneo 等品牌的3D 相機進行實時圖像采集,并對采集的數據自動進行處理。
軟件系統運行的效率、速度和穩定性由處理點云的算法決定。PCL 點云庫具有開源、函數接口豐富等特點,適合作為此款軟件的底層算法,而QT 提供了強大的界面開發功能,并且還具有與點云可視化庫(Visualization Tool Kit,VTK)相結合的函數接口和插件,可以實現共同開發,適合作為此款軟件的界面開發工具。
QT 是一款跨平臺的界面設計軟件,在市面上的主流操作系統中都可以運行,目前通過QT 還衍生了Qt Designer/Creator 等優秀產品。QT 為使用者提供了已完成的封裝庫,通過信號槽機制連接按鍵及需要調用的函數,使得代碼與界面完美結合,可以讓使用者進行快速、高效的開發。
PCL 是一款用于處理三維點云數據的開源庫,起初是在一個機器人軟件平臺(Robot Operating System,ROS)環境下開發的,2011 年獨立成為一個完整的開源庫,如今已成為高校、研究所科研時必不可少的工具。它可以對3D相機、激光雷達等傳感器中的數據直接進行處理,常用方法有濾波[9]、分割、配準[10]、特征提取、曲面重建[11]、識別、追蹤等。
VS(Microsoft Visual Studio)是由微軟研發的一款程序編譯軟件,可支持C、C++、C#、Java 等主流語言,此外其還擁有程序生命周期中所需的絕大部分工具,如UML 工具、代碼管控工具、IDE 等,編寫的代碼在微軟所有平臺下均可運行。對于開發團隊而言,可實現同事間的相互協作,提高專注度與效率,讓整個開發過程變得更加簡單。
結合3D 相機的特性,對軟件功能進行整體設計。軟件功能主要包括點云數據格式轉換、點云分割、點云濾波、網格化重建、點云變換、點云選取。具體系統功能如圖1所示。

Fig.1 Function of point cloud system圖1 點云系統功能
該軟件可以直接從3D 相機中獲取實時數據(本軟件已集成康耐視、LMI、盛相、Photoneo 等品牌3D 相機的取像SDK),或直接導入電腦中的三維點云數據,利用QT 中的可視化控件VTK Widget 對點云進行顯示。導入后可通過鍵盤操作實現上下左右前后6 種視圖切換,還可通過拖按鼠標左鍵對點云進行縮放,拖按鼠標右鍵對點云進行旋轉,拖動鼠標中鍵對點云進行平移。此外,可通過界面左側的菜單設置點云旋轉的軸和角度,以及平移的方向和距離。復位按鍵提供給用戶在丟失點云的情況下使用。在實際使用時,由于采集數據會存在大量噪點,因此需要先運用濾波算法對點云進行精簡,之后對點云進行分割、重建、匹配等操作,可大大提升算法的準確性。
該款軟件實現了3 種濾波算法,包括直通濾波、體素柵格濾波和統計濾波算法[12]。各種濾波算法各有優缺點,需在處理點云數據之前選擇最優的濾波算法使點云更加均勻,噪聲更小。
直通濾波可以去除指定方向上指定值域內的點云數據,其原理是遍歷所有點云,并判斷其是否在輸入的值域內,如果在,則保留該點云,相反則將其刪除。直通濾波器運行速度快、原理簡單,對于去除圖像背景有著很好的效果。
體素柵格濾波的原理是對采集的點云實現降采樣,在有效減少點云數量的同時,不改變點云原有幾何結構。一般用于稠密點云的預處理,以加快后續粗配準、精匹配、重建等算法速度。該濾波器的主要思想是建立一個體素立方體,將體素立方體內所有點云的重心近似看作體素里的點云,將所有重心點當作濾波完成后的點云,通過設置體素參數決定點云數量。該濾波器相比直通濾波器運算速度較慢、效率較低。
統計濾波的主要作用是去除由觀測噪聲產生的離群噪點,這些離群噪點在點云空間中稀疏分布。在估算點云曲率變化率[13]或法向量時,該類噪點會導致估算錯誤,使得后期操作產生較大誤差。該濾波器的思想是假設點云中所有點與其最近k 個鄰近點的平均距離滿足高斯分布,可根據方差和均值得出一個距離閾值,當某個點與其最近k 個點的平均距離大于該閾值時,認定該點為噪點并刪除。
點云分割的常見算法有平面分割、歐式聚類分割[14]、區域生長分割[15]與區域蔓延分割算法等。本軟件系統提供了3 種點云分割算法的接口,分別是區域生長分割算法、歐式聚類分割算法,以及在平面分割基礎上開發的立方體分割算法。其中,區域生長分割算法是通過比較點與點之間的法線,將符合平滑約束的點云合并在一起,最終以點集形式輸出,每個點集被當作同一平面。立方體分割算法是基于VTK 顯示模塊實現的,通過鼠標控制立方體的6 個面進行拉伸、旋轉等操作,框選出需要的點云實現分割。如在利用3D 視覺技術引導機器人抓取過程中,該分割算法可分割出需要抓取物體的點云,引導機械手進行抓取。
三維重建的主要方法有貪婪投影三角重建、泊松重建[16]與最小二乘移動重建,本軟件提供了上述3 種方法的接口,可根據不同情況加以使用。
貪婪投影法使用了生長法中的曲面建模算法,將空間中的點及其鄰域內的點投影到切平面上,從而得到三維空間內點與點之間的連接關系。該算法首先通過kd-tree[17]建立空間內點云與點云之間的索引關系,利用此關系可快速查找出目標點四周點集的索引,之后隨機定義一個初始三角形,通過計算生長邊中點的鄰域獲得該生長邊的投影面,并確定閾值K,將生長邊最鄰近的K 個點投影到該平面上。在平面上選擇投影點與生長邊所構成夾角余弦值最小的點作為最優擴展點,并將該點加入到三角網格中組成新的三角形。不斷重復上述步驟,直至形成網格曲面。
在曲面重建中會產生漏洞,表面較為粗糙,此時則需要采用最小二乘移動法,先對點云進行重采樣,設置多項式階數,然后用高階多項式插值法使重建表面更加平滑、完整。
手動選取單個點云功能是通過PCL 提供的選點回調函數,同時對鼠標事件進行響應,對于選中點通過vector 容器傳回函數中實現標記,并利用可視化工具VTK 界面進行顯示。
特征點是點云數據集中與其它點云特征差異較大的點,只有尋找到具有最有效特征的點才能方便后續的跟蹤配準,提高軟件處理速度。本軟件可提取點云的NARF(Normal Aligned Radial Feature)關鍵點、SIFT3D(Scale-in?variant feature transform)關鍵點[18]與Harris3D 關鍵點。NARF 關鍵點是為了從深度圖像中識別物體而提出的,SIFT3D、Harris3D 關鍵點是基于經典匹配算法SIFT、Harris擴展而來的。
本文利用康耐視EA-5000 相機對零件進行數據采集,軟件運行環境為:Window10 Visual Studio 2017 C++,CPU為Inteli5-4800,RAM 為4GB。
3D 相機點云處理軟件系統界面由菜單欄、功能區和顯示區組成,最上側是菜單欄,左側是功能選擇區,右側是顯示窗口。其中,左側功能選擇區有濾波工具、重建工具、分割工具、選點工具、格式轉換工具等,界面內容如圖2 所示。
將零件放在載物臺上,3D 相機固定在載物臺上方50cm 處,對機械零件進行取像,得到的三維點云如圖2 所示。由于機械零件放在載物臺上,所以獲取的點云會受到載物臺底面干擾,同時也會受到采樣噪聲的影響。首先使用直通濾波去除零件背景,去除效果如圖3 所示,接著利用體素柵格濾波對點云進行精簡,最后利用貪婪投影三角網格算法對機械零件進行重建,重建效果如圖4 所示。通過圖片可以看出,重建效果與原零件結構基本符合,可以較好地還原出零件結構。但在細節處理方面較差,需要進一步對算法進行優化。

Fig.2 3D camera capturing point cloud圖2 3D 相機獲取點云

Fig.3 Point cloud of mechanical parts after filiter圖3 機械零件濾波后的點云
將幾個軸零件無序地放在載物臺上,3D 相機固定在載物臺上方50cm 處,對軸進行取像。需要獲取其中一個軸的點云,用來實現機械臂對軸的抓取,獲得的點云如圖5所示。可以看到由于采樣誤差,獲取的點云有許多噪點,因此用統計濾波設置閾值,將大于閾值的點作為噪點去除。接著使用立方體分割算法,截取所需軸的點云數據,截取的點云如圖6 中的紅色部分所示,最后將截取的點云保存成pcd 格式導出。由圖7 可以看出,提取出的點云可以達到要求。
使用3D 相機采集凸臺數據,對采集的數據進行去噪處理后,擬合出凸臺上表面平面與桌面所在平面,可測量出凸臺高度如圖8 所示。此外,系統還可以進行點云配準,綠色點云是模板,灰色點云是采集到的點云,可看出經過點云配準后,兩塊點云完全重合,如圖9 所示。

Fig.4 Reconstruction drawing of mechanical parts圖4 機械零件重建效果

Fig.5 3D camera capturing point cloud圖5 3D 相機獲取點云

Fig.6 Divided axis圖6 立方體分割出的軸

Fig.7 final effect圖7 最終效果

Fig.8 Visual display of measuring product height圖8 測量產品高度可視化顯示

Fig.9 Visual display of point cloud registration圖9 點云配準可視化顯示
本文采用可視化界面開發工具QT 設計了一套點云數據處理系統。由于PCL 點云庫在點云處理方面的高效性,配合QT 的界面設計,可同時兼顧軟件的可靠性與界面的美觀性。相比其它軟件,本軟件可實現與相機獨立使用,同時兼容大多數品牌的3D 相機。在點云數據量達到百萬數量級時,運行速度可得到保證。在功能方面,系統提供的點云濾波、點云分割、點云重建等功能操作簡單,便于使用。該軟件實用性較強,但在大規模點云數據處理過程中運行速度較慢、效率較低,而且在重建模塊中,物體重建的細節特征不夠準確,需要在未來研究中進一步完善。