劉 建 興
(江西省核工業(yè)地質(zhì)調(diào)查院,330038,南昌)
機載激光雷達(Airborne Light Detection And Ranging, LiDAR)已經(jīng)成為構(gòu)建智慧城市獲取三維地理空間數(shù)據(jù)不可或缺的工具之一,并且在建筑物提取[1]、城市變化檢測[2]、城市三維建模[3]等取得了廣泛的應(yīng)用。建筑物作為構(gòu)建智慧城市最主要、最基本、最重要的組成部分,建筑物三維建模儼然已經(jīng)成為當前研究的一個熱點。建筑物是由多個屋頂面片構(gòu)成的,如何快速、精確地對建筑物屋頂面分割是三維建模必要的步驟。
近幾十年來,許多的學(xué)者對屋頂面分割進行了很多深入的研究,他們的研究大致可以分為兩類:特征聚類法、模型驅(qū)動法。特征聚類法主要方法有區(qū)域增長算法及其變種[4]、K-means[5]、DBSCAN[6]等。如Sampath等[5]使用K-means從非地面點中分割建筑物,提取建筑物屋頂面片。周欽坤等[7]通過主成分分析計算點云可靠性指標,利用k-means算法利用法向量進行聚類提取建筑物屋頂面。Xu等[8]提出一種改進DBSCAN的平面分割算法,該方法使用自適應(yīng)的閾值改進DBSCAN算法,然后使用法向量精細化分割平面。這類方法是首先計算點云的特征,如法向量、曲率、密度等特征,然后根據(jù)相似性進行分割數(shù)據(jù)。這類方法在特征計算準確的時候,能夠有著較好的分割結(jié)果,但是局限性也正是在這里,很多時候需要依賴點搜索鄰域值的設(shè)定,同時這類方法對噪聲非常敏感。
模型驅(qū)動法主要是隨機采樣一致性(Random Sample Consensus,RANSAC)和Hough變換(Hough Transform,HT)。如艾效夷等[9]使用3D Hough變換從機載LiDAR數(shù)據(jù)中提取平面特征。章大勇等[10]利用以3D Hough變換基礎(chǔ),加入了參數(shù)空間的對偶性,提出了一種基于對偶空間分割的三維Hough 變換算法,進行點云平面地標的提取。李娜等[11]引入角度、距離約束使用RANSAC算法對建筑物立面進行提取。何明等[12]使用形態(tài)學(xué)濾波改進RANSAC算法從點云中提取平面。周嘉俊等[13]提出了使用高差閾值來改進RANSAC算法來進行建筑物平面的提取。這2種方法利用平面數(shù)學(xué)模型進行屋頂面片的提取,其對噪聲和異常值具有穩(wěn)健性,可以同時得到優(yōu)化后的屋頂面片模型參數(shù),但是這類方法對分割參數(shù)的設(shè)置非常敏感,容易得到偽平面,且算法耗時長。
針對上述方法所存在的問題,本文基于5種不同復(fù)雜程度的建筑機載點云數(shù)據(jù),提出了一種結(jié)合改進區(qū)域增長和RANSAC由粗到精的建筑物分割方法。該方法首先基于LRSCPK計算點云法向量,然后利用最小曲率區(qū)域增長算法進行屋頂面粗分割,最后利用RANSAC進行小平面的分割和屋頂面的優(yōu)化。
本文方法主要包括3個步驟,點云預(yù)處理、屋頂面粗分割、屋頂面精分割,具體的分割流程如圖1所示。LiDAR數(shù)據(jù)是采用有人機搭載Leica ALS60激光雷達掃描系統(tǒng)獲取的某城區(qū)點云數(shù)據(jù),然后通過Leica CloudPro軟件進行點云解算與誤差檢校。
圖1 屋頂面分割流程
預(yù)處理的目的是將LiDAR數(shù)據(jù)中建筑物屋頂點云提取出來。目前國內(nèi)外針對從機載LiDAR數(shù)據(jù)中提取建筑物的問題已經(jīng)進行了大量的研究。本文采用文獻[1]提出的反向迭代數(shù)學(xué)形態(tài)學(xué)(RIMM)算法進行建筑物點云的提取,該算法相較于著名的點云數(shù)據(jù)處理軟件Terrasoild中傳統(tǒng)的建筑物點云提取算法更為方便,該方法不需要對LiDAR數(shù)據(jù)進行濾波處理,且參數(shù)設(shè)置更為簡單,該方法不需要設(shè)置窗口大小閾值,只需要設(shè)定一個高程差閾值,后續(xù)窗口大小閾值與高程差閾值在迭代過程中自動計算。進行建筑物提取之后,將建筑物劃分格網(wǎng)投影至二維圖像,存在點云數(shù)據(jù)的格網(wǎng)對應(yīng)賦值為1,反之賦值為0,最后生成一張二值圖。之后再進行連通性分析,實現(xiàn)建筑物點云的單體化分割。
1.2.1 基于LRSCPK的法向量計算 法向量是描述屋頂面中一個重要的特征,在分割屋頂面中起著至關(guān)重要的作用。許多的算法中都需要計算點云的法向量,所以某種程度上來說法向量計算的好壞也會影響到數(shù)據(jù)處理的精度。目前,應(yīng)用最廣泛的法向量計算方法主要是主成分分析法(principle component analysis,PCA),但是該方法計算出來的法向量在面片交界處并不準確(如圖2),所以在進行屋頂面分割的時候,在屋脊線附近數(shù)據(jù)不能準確劃分[14]。
(a)PCA法向量計算
(b)LRSCPK法向量計算圖2 法向量估算對比示意圖
針對這個問題,本文采用一種具有先驗知識的低秩子空間聚類框架的法向量估算方法(low-rank subspace clustering framework with prior-knowledge, LRSCPK)[15],該方法在將主成分分析法估算的法向量作為先驗知識進行領(lǐng)域聚類,然后利用引導(dǎo)矩陣(式(1))的低秩子空間聚類將各向異性鄰域分割成幾個各向同性鄰域,并為當前點識別一致的子鄰域。最后將擬合一致子鄰域的平面的法線作為當前點在尖銳特征附近的法線。
min‖Z‖*+β‖PΩ(Z)‖1+γ‖E‖2,1
(1)
式中:‖·‖*表示奇異值之和,‖·‖2,1表示范數(shù)之和,Z是向量矩陣,Ω是引導(dǎo)矩陣(guiding matrix),E是融合約束條件,β和γ是2個參數(shù),文獻[15]中設(shè)置為1。
1.2.2 最小曲率區(qū)域增長法 在估算出點云穩(wěn)健的法向量之后,本文采用PCL庫中區(qū)域增長算法(Region Growing,RG)進行建筑物屋頂面的分割。該算法主要思路是對點云按照曲率值進行排序,將最小曲率值作為種子點開始增長,直到?jīng)]有標記的點為止。詳細步驟如下。
1)輸入單棟建筑物點云數(shù)據(jù)及其法向量n和曲率c,設(shè)置曲率閾值cth、法向量夾角閾值θth、搜索鄰域點數(shù)目k,根據(jù)曲率從小到大進行排序生成隊列VP,將最小曲率值作為初始種子點,初始標記為0。
2)對于每個種子點,若該點標記不為-1,則初始化一個種子點隊列SC,利用Kd-tree找到它的相鄰點{BC},依次遍歷{BC},逐一計算相鄰點與種子點的曲率閾值cth和法向量夾角閾值θth,將符合條件的點添加到隊列SC中且進行標記。
3)遍歷種子點隊列SC,重復(fù)步驟2)直至隊列SC為空。
4)再次從隊列VP中查找種子點,重復(fù)步驟2)、3)直到遍歷完隊列VP。
1.3.1 RANSAC分割小面片 在進行區(qū)域增長之后,大面積的屋頂面片基本會分割出來,但是還存在一部分小面積的屋頂面片不能分割出來,同時一些變化角度小的屋頂面片區(qū)域增長算法也不能識別。針對這兩點問題,采用RANSAC算法對上一步分割后的結(jié)果進行優(yōu)化。具體步驟如下。
1)上一節(jié)方法分割后數(shù)據(jù)可以分為兩類:分割出的數(shù)據(jù)集{Ri}和分割后留下的數(shù)據(jù)Q,遍歷數(shù)據(jù)集{Ri},利用RANSAC進行屋頂面片分割,確定分割出的數(shù)據(jù)為單個平面數(shù)據(jù);反之,則將其分割成多個面片,將提取的面片數(shù)據(jù)添加到面片集{Pi}中。
2)遍歷的面片集{Pi},利用點到平面的距離從數(shù)據(jù)Q中將符合條件的點添加至該集合。
3)利用RANSAC算法從分割后的數(shù)據(jù)屋頂面片分割,將小面積的屋頂面片分割出來,將其加入面片集{Pi},直到平面分割完成,輸出面片集{Pi}。
1.3.2 屋頂面優(yōu)化 通過前面的步驟中基本能夠?qū)?shù)據(jù)中屋頂面片全部分割出來,但是可能分割出來的數(shù)量會比真實的屋頂面片數(shù)量多,還需要進行屋頂面合并工作。由于上一步已經(jīng)獲取到每個平面的參數(shù)方程,可以通過平面的法向量和距離來進行合并屋頂面。具體步驟如下。
1)遍歷面片集{Pi},依次計算Pi與集合中其他面片的法向量夾角,如果存在Pj與Pi法向量夾角小于閾值,則進入步驟2。
2)計算面片Pj與Pi之間的距離,如果距離小于閾值,則同時標記面片Pj與Pi,將這2個面片合并成一個面片添加至面片集{Pi}out,。反之則標記面片Pi,將添加到面片集{Pi}out。
3)繼續(xù)遍歷面片集{Pi},直至所有面片標記完成,輸出{Pi}out將其作為最終分割結(jié)果。
為了驗證本文方法的有效性與適用性,本次實驗數(shù)據(jù)選取T字型建筑物、人型建筑、復(fù)雜建筑等具有代表性的建筑物(數(shù)據(jù)詳細描述見表1)。本文實驗的硬件環(huán)境:Intel(R)CoreTMi7-11800H處理器、16G內(nèi)存,軟件環(huán)境:Visual Studio2015 C++和PCL1.8.1(Point Cloud Libary)。同時將本文算法分割結(jié)果與RANSAC[16]、區(qū)域增長[17]進行對比分析。本文以舒敏等[14]人的研究成果,不斷調(diào)整算法參數(shù)進行試驗,最終確定參數(shù)如下:搜索鄰近點數(shù)目為20,區(qū)域增長法向量夾角閾值θth為0.03°,曲率閾值cth為0.1,屋面優(yōu)化中點到面的距離為0.1 m。
表1 代表性建筑物相關(guān)信息
為了定量地評價屋頂分割結(jié)果,本文采用文獻[18]的方法與人工分割結(jié)果對比,計算分割后的屋頂面的完整性(Comp)、正確性(Corr)和質(zhì)量(Quality)來評估分割點結(jié)果:
(2)
其中:TP(True Positive)是指分割結(jié)果中發(fā)現(xiàn)的真實平面數(shù)值,F(xiàn)N(False Negative)是指分割結(jié)果中發(fā)現(xiàn)的錯誤平面數(shù)值,F(xiàn)P(False Positive)是指分割結(jié)果中未發(fā)現(xiàn)的平面數(shù)值。
本文了利用3種不同方法對5棟具有代表性的建筑物點云數(shù)據(jù)進行了分割,其結(jié)果如圖3所示。圖3中原始數(shù)據(jù)按高程進行著色,其中白色實線為建筑物屋脊線(參考分割線)。
圖3 分割結(jié)果對比
在屋頂面片法向量夾角較小的建筑物上,如B1對應(yīng)的分割結(jié)果,可以發(fā)現(xiàn)區(qū)域增長算法可能會存在2個屋頂面無法區(qū)分的情況;本文算法與 RANSAC算法卻能夠較好地分割。在常見的T型建筑物中,3種算法都能夠比較好地對建筑物進行分割,但是在細節(jié)方面,本文的算法分割效果更好,B2中紅色方框部分,由于數(shù)據(jù)法向量之間的角度偏差較小,區(qū)域增長算法和RANSAC算法將其分割為同一屋頂面數(shù)據(jù)。在規(guī)則對稱的數(shù)據(jù)上,如B3對應(yīng)的分割結(jié)果,可以發(fā)現(xiàn)區(qū)域增長算法和RANSAC算法能夠很好地將面積較大的屋頂面分割出來,但是在較小的屋頂面卻不能較好地完成分割,本文算法卻能夠較好地將這部分小面積的屋頂面分割出來,但是對于較小的煙囪,這部分數(shù)據(jù)量較少,也不能進行分割。在人型建筑物較多且屋頂面片法向量夾角較小的建筑物上,如B4對應(yīng)分割結(jié)果,區(qū)域增長算法與本文算法分割效果都較好,但是RANSAC算法會存在分割錯誤的情況。對于屋頂面多且大小不一的復(fù)雜建筑物,如B5對應(yīng)的分割結(jié)果,區(qū)域增長算法能夠較好地分割出面積較大的屋頂面,對于面積較小的屋頂面則會失敗,但是本算法卻能夠很好地將這一部分分割出來。
總的來說,與區(qū)域增長算法相比,在夾角較小的屋頂面上,區(qū)域增長算法可能會分割失敗,將其識別為同一個平面,如B1和B5所示,由于本算法能夠精確計算每個點多法向量,能夠精確地分割屋頂面,也能夠為每個屋頂面分割得到更多的點。針對小范圍的屋頂面數(shù)據(jù),還利用RANSAC對區(qū)域增長后數(shù)據(jù)進行了優(yōu)化,也能夠精確到將這部分分割出來。與RANSAC算法相比,RANSAC可能會存在屋頂面競爭的問題,如B3分割后效果所示,由于該算法需要隨機采樣確定起始平面,這樣先分割的屋頂面會將其他屋頂面的數(shù)據(jù)分割到該平面中,造成局部錯誤分割,而本方法是先進行區(qū)域增長,再利用RANSAC算法對區(qū)域增長后的數(shù)據(jù)進行優(yōu)化,由于分割后數(shù)據(jù)一般只存在1個或者2個屋頂面,這時候就能減少許多屋頂面競爭的問題。
為了定量評估不同方法的屋面風(fēng)格性能,以屋頂面為單元統(tǒng)計了分割的完整性(Comp)、正確性(Corr)和質(zhì)量(Quality),如表2所示。
表2 精度對比
由表2可知,從整體上來看,本文方法分割相較于區(qū)域增長算法和RANSAC算法有著較好的分割效果,完整性、正確性、質(zhì)量的平均值分別為:100%、94.6%、94.6%。反觀區(qū)域增長和RANSAC算法在完整性、正確性、質(zhì)量的平均值數(shù)值均不高,分別為:84.9%/84%、70.2%/63.6%、65.2%/60.2%。從細節(jié)上來看,本文算法在B1、B3、B4數(shù)據(jù)上能夠達到100%的完整性、正確性、質(zhì)量,對于B2、B5中存在著點云數(shù)目較小的人型煙囪,完整性還是100%,但是正確性和質(zhì)量分別為77.8%和95.2%,這是數(shù)據(jù)本身缺陷造成的。區(qū)域增長和RANSAC算法在單個數(shù)據(jù)集上并未有很好的表現(xiàn)。
本文提出了一種結(jié)合改進區(qū)域增長和RANSAC由粗到精的建筑物分割方法。該方法首先基于LRSCPK計算點云法向量,然后利用最小曲率區(qū)域增長算法進行屋頂面粗分割,最后利用RANSAC進行小平面的分割和屋頂面的優(yōu)化。試驗表明,所提出的方法能夠有效地分割不同程度的復(fù)雜建筑物,且在小面積的屋頂面有著較好的分割效果。本文的方法未能考慮到精分割中RANSAC分割小面片中相鄰面片可能會存在面片競爭的情況,這也是下一步研究需要優(yōu)化改進的地方。同時由于機載LiDAR對建筑物側(cè)面信息的獲取能力有限,本文方法未應(yīng)用于建筑側(cè)面點云數(shù)據(jù)分割,下一步可考慮通過多源點云數(shù)據(jù)進行融合,獲取空地一體化建筑點云進行建筑物分割。