梁周雁,焦寧,鄧先睿,姜海峰
(1.山東省國土測繪院,山東 濟南 250013;2.山東永平測繪有限公司,山東 威海 264300)
近年來許多城市開展了地下空間及市政基礎設施資源和信息化項目,從而查清城市地下空間及市政基礎設施種類、構成、規(guī)模、空間分布、屬性信息等基本情況,繪制城市地上地下三維立體“一張圖”,為城市地下空間及市政基礎設施建設和管理提供數(shù)據(jù)支撐,促進地下空間資源合理利用和有序開發(fā),進一步健全城市市政基礎設施工作體系,提高城市建設管理水平。管廊作為城市地下空間的重要基礎設施,承載著城市中各式各樣物質的輸送、各種信息傳輸和交換等工作,已經(jīng)成為了社會和人們生產(chǎn)生活中不可缺少的物質條件,在城市的建設和發(fā)展過程中所發(fā)揮的作用越來越大[1-2]。
管廊是由管線、儀器和設備構成的一個龐大而復雜的系統(tǒng),設備錯綜復雜,管道縱橫交疊交錯,空間關系復雜,傳統(tǒng)的二維符號或者線條描述方式已不能完整地展示管線的全部信息[3-5]。三維激光掃描技術作為一種新興的測量技術,在國外已被廣泛地應用到石油化工、建筑工程、軍事科技等領域,但在管廊數(shù)據(jù)獲取及逆向建模等方面的應用實例較少[6]。本文將三維激光掃描技術應用于管廊數(shù)據(jù)的獲取中。
三維激光掃描技術雖然可以快速獲取目標表面的點云數(shù)據(jù),但是如何將海量的管道點云數(shù)據(jù)快速構建為管道模型成為亟待解決的問題。李岸等[7]采用過渡特征提取原理獲得管道面的一系列截面線,然后獲得光滑均勻的脊線點列。用三次B樣條曲線擬合采樣點列而獲得脊線。劉煥彬等[8]提出一種局部擬合管道圓柱面的方法,將點云數(shù)據(jù)分塊擬合局部中心軸線的點,然后擬合中心軸線,最后根據(jù)中線軸線繪制管道。劉勝男等[9]通過三維激光掃描技術獲取管道點云,并使用Cyclone軟件對管線進行配準和建模。陳林[10]將地下管線抽象成圓柱體,使用WebGL開源框架Three.js針對從后臺獲取到的二維管線矢量數(shù)據(jù)進行批量建??梢暬?。本文提出一種基于點云的管道三維自動建模方法,采用三維激光掃描技術獲取管廊的點云數(shù)據(jù),并對點云數(shù)據(jù)中存在的噪點采用拉普拉斯算法進行去除,以提高管道中心線的提取效率。在此基礎上提出一種基于RANSAC算法的管道中心線提取方法,并對提取的中心線進行等平面處理,基于OpenGL和MFC框架開源庫結合RANSAC算法研發(fā)了利用點云進行管道三維自動建模模塊,以便解決管廊的三維自動建模與可視化。圖1為本文管道建模及可視化的基本流程。
圖1 管道建模及可視化流程
RANSAC(random sample consensus)隨機采樣一致性算法是一種隨機參數(shù)估計算法。RANSAC算法最早由Fischler和Bolles(1981)提出[11]。
RANSAC從樣本中隨機抽選出一個樣本點子集,使用最小方差估算法對這個子集計算模型參數(shù),然后計算所有樣本與該模型的偏差,在使用一個預先設定好的閾值與偏差比較,當偏差小于閾值時,該樣本點屬于模型內(nèi)樣本點(inliers),本文中簡稱局內(nèi)點,否則為模型外樣本點(outliers),文中簡稱為局外點。記錄下當前的局內(nèi)點的個數(shù),然后重復這一過程。每次重復都記錄當前最佳的模型參數(shù),所謂最佳即局內(nèi)點個數(shù)最多。迭代結束后,最佳模型參數(shù)就是最終的模型參數(shù)估計值。如圖2為RANSAC算法的流程圖。
圖2 RANSAC算法流程圖
圖3展示了RANSAC算法在二維數(shù)據(jù)集中的搜索過程。圖3(a)示一組既包含局內(nèi)點又包含局外點的數(shù)據(jù)集。紅色點為局內(nèi)點,藍色點為局外點。圖3(b)中紅色線就是基于RANSAC得到的結果,此例中最終估計的模型是一條直線。
a—二維數(shù)據(jù)集;b—RANSAC算法估計結果
本文依據(jù)RANSAC算法建立管道圓柱面模型,提取管道中心線。并利用OpengGL和MFC實現(xiàn)管道可視化。
三維激光掃描儀獲取的點云數(shù)據(jù)難免會存在噪聲點,噪聲信息屬于無用信息,信息量較小,使得估計點云特征時導致錯誤的數(shù)值結果,從而可能導致點云后期處理失敗。所以離群點表達的信息需要剔除。
本算法采用拉普拉斯算法[12-13]解決該問題:通過將高頻幾何噪聲能量擴散到局部鄰域中的其他點上實現(xiàn),即通過多次迭代的方法將點移動到其鄰域的幾何重心處,其實質是通過把噪聲能量轉移到其鄰域的其他點上而最終達到濾波的目的。
圖4為原始的管道點云數(shù)據(jù)和去噪后的管道點云,左圖紅色區(qū)域為原始點云存在的噪點。
圖4 點云去噪前后對比圖
如果以拐彎處作為分割點,可以把管道看做是圓柱面的組合(圖5)??臻g圓柱面的數(shù)學表達式可表示為公式(1):
圖5 空間圓柱示意圖
(x-x0)2+(y-y0)2+(z-z0)2-r2=
(1)
式中:(x0,y0,z0)為圓柱軸線L上的任意一點;(l,m,n)為圓柱軸線L方向向量;r為圓柱的半徑,而(x,y,z)則為要擬合該圓柱面的點云數(shù)據(jù)中的某一點坐標。這7個參數(shù)可以確定以圓柱方程,即可識別出該圓柱面。
根據(jù)圓柱面的空間表達式,建立RANSAC算法的估計參數(shù)。本文借助于PCL(Point Cloud Library)[14]中的Sample_consensus模塊,為管道點云的假定圓柱面建立參數(shù)。
PCL中提供了SACMODEL_CYLI,DER模型,此模型為圓柱面模型,共設置7個參數(shù):
(1)從點集數(shù)據(jù)中隨機取出n個點,用這n個點進行空間圓柱面擬合,用一個圓柱面模型適應于假設的局內(nèi)點,可以計算出中心軸線上的點(x0,y0,z0)、軸線的方向向量(l,m,n)以及圓柱面的半徑r。即所有的未知參數(shù)都能從假設的局內(nèi)點計算得出,并將得到的帶參數(shù)的圓柱面記為最佳圓柱面。
(2)用步驟(1)中得到的模型去測試所有的其他數(shù)據(jù),并計算點到模型的誤差,所以設置了點到圓柱面的距離閾值T1,如果這個誤差小于閾值T1,則認為是有效點,把這個點放進最佳模型中,遍歷點集中所有的點。
(3)如果有足夠多的點被歸類為假設的局內(nèi)點,即局內(nèi)點數(shù)不小于總數(shù)的80%,就可以認為估計的模型就足夠合理。
(4)然后,用所有假設的局內(nèi)點去重新估計模型,重新計算一下它的參數(shù),因為它僅僅被初始的假設局內(nèi)點估計過。
(5)如果此次遍歷并沒有達到可靠模型的最低點數(shù)要求,則返回第一步重新計算。
管道點云數(shù)據(jù)經(jīng)RANSAC算法估計后已經(jīng)能夠得到最為可靠的圓柱面參數(shù),根據(jù)圓柱面參數(shù)即可建立中心線的方程,進而提取中心線。中心線方程為公式(2):
(2)
經(jīng)過RANSAC算法分析和處理,已經(jīng)可以提取出各個圓柱面的中心軸線(圖6)。
圖6 圓柱面的中心軸線
但是提取出來的各中心軸線(如圖7所示橙色線)因為誤差原因不會在一個平面上(理想情況是一個平面),因此需要處理到相同的平面。因此,本算法首先計算這2個線段之間的公垂線,然后將2個點移動到公垂線的一半。這樣保證所有相鄰2個管道在一個平面上。
圖7 等平面處理
通過以上處理得到管道中心線的結果如圖8(a)中的綠線所示。其實誤差比較小,該圖指示為了說明經(jīng)過處理后,不可能完全不保證直角,但整個誤差很小,對后續(xù)的管道重構影響可以忽略。
a—等平面處理后結果; b—拐彎弧線處理
理想的實際管道應如圖8(b)所示。因此后續(xù)需要對管道弧度彎角處進行處理,本文采用了較簡單的方法,直接給出拐角的弧度,圖8(a)中綠色的中心線進行截取,然后通過圓環(huán)進行即可。在本程序中,拐角圓弧的半徑設置為管道半徑的1.4倍,也可以通過操作界面人為進行設置,從而得到整個管道的中心線,整個步驟如圖9所示。
圖9 OpenGL圖形操作步驟
得到管道的中心線以后,根據(jù)擬合出的管道中心線構建管道模型,劉煥彬[8]曾經(jīng)用四元數(shù)法根據(jù)中心線繪制圓的方法來構建管道模型,本文借助OpenGL實現(xiàn)管道模型的重構。OpenGL的全稱是Open Graphics Library,它是圖形硬件的軟件接口,具有高度的可移植性,并具有非??斓匿秩舅俣?允許創(chuàng)建交互式的程序,產(chǎn)生移動物體的彩色三維圖像[15-16]。所有的數(shù)據(jù)經(jīng)OpenGL處理之后都要將處理結果輸出到二維屏幕上,其操作過程如圖9所示。城市地下空間中的管線大部分都是呈圓柱形,而且其幾何屬性包括位置、管徑、長度、厚等參數(shù)[17-19],本文在進行管道建模是暫時不考慮管壁的厚度。在OpenGL庫中,內(nèi)置函數(shù)gluCylinder( )可以快速實現(xiàn)圓柱面的繪制[20]。
平移操作的函數(shù)原型為: void glTranslate(GLTYPEx,GLTYPEy,GLTYPEz)
其中:x,y,z分別表示x軸、y軸、z軸方向的平移量。平移矩陣T可用以下公式(3)計算。
(3)
旋轉操作的函數(shù)原型為: void glRotate(GLTYPE angle,GLTYPEx,GLTYPEy,GLTYPEz)
其中:x,y,z分別指定的旋轉軸;angle為指定的旋轉角度。
縮放操作的函數(shù)原型為: void glScale(GLTYPEx,GLTYPEy,GLTYPEz)
其中:x,y,z分別表示3個坐標軸方向的縮放比例因子。當x,y,z的值大于1.0時,表示沿坐標軸方向放大,當x,y,z的值小于1.0時,表示沿坐標軸方向縮小??s放矩陣S可以用公式(4)計算。
(4)
本文借助openGL開源庫和MFC框架,結合RANSAC中心線擬合算法,研發(fā)了利用點云進行管線三維建模的模塊,模塊的功能包括讀取點云數(shù)據(jù),點云濾波,點云精簡,中心線擬合,以及管道模型可視化等(圖10)。
(a)軟件界面;(b)管道點云數(shù)據(jù)顯示;(c)RANSAC算法提取管道中心線;(d)管道重構
(1)三維激光掃描技術可以快速獲取地下空間復雜詳盡的管道三維空間信息,采用拉普拉斯算法實現(xiàn)密集點云的去噪工作,從而得到純凈的管線的點云,提高了后續(xù)提取管道中心線的效率。
(2)提出基于RANSAC算法的管道中心線提取方法,實現(xiàn)了單一管道中心線的快速、自動提取。
(3)利用OpenGL開源庫和MFC框架,結合RANSAC中心線提取算法,實現(xiàn)了利用點云進行管線三維自動建模,該模塊的功能包括讀取點云數(shù)據(jù)、點云濾波、點云精簡、中心線擬合以及管道模型可視化等,取得了較好的可視化效果。