劉建興,胡全一,樂美燕,舒斯紅
(1. 江西核工業測繪院集團有限公司,江西 南昌 330038; 2. 江西省核工業地質調查院,江西 南昌 330038)
建筑物作為城市中最主要的組成部分,其地理信息獲取對智慧城市建設至關重要。建筑物輪廓線作為建筑物重要的基礎數據,廣泛應用于城市空間分析、建筑物統計、地產評估等方面[1]。如何從LiDAR數據中準確、快速提取建筑物輪廓線是研究熱點。
許多學者針對建筑物輪廓線進行了相關研究,大致將其分為不規則三角網法和特征法兩類。基于不規則三角網的建筑物輪廓線提取代表性的方法為Alpha shapes算法[2],主要思想是采用指定半徑以數據中兩點確定一個圓,若該圓中不存在其他點,則將這兩點確定為邊界,遍歷點集直至找到所有邊界點。文獻[3—4]利用Alpha Shapes算法提取建筑物輪廓線,證明了該算法能高精度地提取任何形狀的建筑物輪廓線。文獻[5]提出了一種雙閾值的Alpha Shapes算法,并利用最小二乘法簡化輪廓線,提高了輪廓線的精度。文獻[6]提出了一種可變半徑的Alpha Shapes建筑物輪廓線提取方法,該方法對于多拐角建筑物有著較好的效果,但是對于多長直線的建筑物提取效果一般。
點云特征法主要思想是利用點云數據的法向量、斜率、曲率等特征信息提取建筑物輪廓線。這類方法對凹槽處輪廓線不敏感,且計算特征消耗大量時間。文獻[7]提出在DSM的基礎上計算點云的垂直密度,利用Canny算法提取建筑物輪廓線。文獻[8]提出一種改進的最小邊界矩形算法,從機載LiDAR點云中提取完整且準確的正則化建筑物邊界,該算法可以忽略部分遮擋的建筑物。文獻[9]提出了一種自動建筑物輪廓正則化方法,該方法利用LiDAR點云數據的建筑物點自動生成二維正交的建筑物邊界。文獻[10]提出了一種最小外接矩形的建筑物輪廓線提取方法,利用垂距法進行邊界擬合,利用多邊形最小外接矩形優化線段提高建筑物邊界的精度。文獻[11]提出了一種基于主方向的建筑物輪廓提取方法,利用建筑物的正外接矩形確定主方向,利用主方向獲取建筑物輪廓線。此外,還有的學者利用LiDAR數據與光學影像融合進行建筑物邊界的提取。如文獻[12]充分利用了LiDAR數據與光學影像的互補優勢,從兩個數據源中提取不同的建筑物特征并融合形成最終完整的建筑物邊界分析現有算法。目前利用點云數據提取建筑物輪廓時存在耗時、精度不高的局限性。因此,本文提出一種新的點云建筑物輪廓線提取方法。該方法首先利用已經分類好的建筑物點云進行柵格化,并生成二值圖;然后對二值圖進行膨脹、腐蝕操作,消除二值圖中因柵格化產生的空洞區域;最后利用直線段檢測(line segment detector,LSD)算法進行直線檢測,獲取規則的建筑物輪廓線。
本文方法主要包括建筑物的提取、二值圖生成、空洞修補、LSD算法提取輪廓線4個步驟,具體的提取流程如圖1所示。

圖1 建筑物輪廓線提取流程
機載LiDAR獲取得到的激光點云數據主要包括植被、建筑物、地面點和其他地物類型,需對數據進行分類操作,提取數據中屬于建筑物類型的點云。本文使用TerraSolid軟件進行建筑物點云分類,并手動調整建筑物點云。
分類之后,將建筑物類別的點云數據進行柵格化得到二值圖。首先獲取數據在X軸、Y軸方向上的最大值與最小值,并依據一定的密度進行格網劃分;然后對點云數據進行分割,遍歷格網生成二值圖。
格網劃分主要依據公式為
(1)
式中,xstep、ystep分別為格網在X軸、Y軸方向上的密度;xmax、ymax分別為X軸、Y軸方向上的最大值;xmin、ymin分別為X軸、Y軸方向上的最小值;scale為比例因子。
在劃分格網后,首先對點云數據進行分割,同時根據格網在X軸、Y軸方向上的密度建立一個xstep×ystep大小的二維圖像矩陣;然后判別每個格子中是否存在點云,如果存在點云,則將二維圖像矩陣對應位置的值賦為0,反之則賦值為255。至此,點云數據的二值圖便建立成功。
由于點云數據離散且密度不均勻,因此利用格網劃分建立的二值圖會存在一定的空洞,如圖2(a)所示,需要對其進行處理,修補空洞區域。本文采用經典的形態學濾波算法對其進行空洞的修補,首先對點云二值圖進行膨脹操作,然后對圖像進行腐蝕操作。

圖2 圖像空洞修補
1.3.1 膨脹操作

(2)

1.3.2 腐蝕操作
腐蝕操作的定義[13]為
F⊙Bs={x,y|Bxy?F}
(3)

經過膨脹和腐蝕操作之后,可以明顯地看到建筑物內部的空洞區域被修補,且處理之后建筑物尺寸不變,如圖2(b)、(c)所示。
進行膨脹、腐蝕操作后的二值圖在建筑物區域不存在空洞,本文采用LSD算法[14]從二值圖中提取二維線段,其流程如下。
(1)計算輸入圖像的梯度值與梯度方向,根據梯度方向和梯度值對像素點進行分組,生成一張由1024張鏈表組成的梯度圖。
(2)設定梯度閾值,將梯度值小于的像素點標記為USED。
(3)選取每張鏈表的頭部像素作為種子點,根據梯度角相似性搜索周邊的像素點,將搜索到的像素點都標記為USED,并利用矩形進行擬合。
(4)重復從鏈表中選取種子點,從剩下的圖像進行區域搜索,直至圖像完全遍歷,得到所有檢測到的直線。
以單棟建筑物數據為例,本文方法可以非常快速、精確地檢測出建筑物的輪廓,如圖3(a)所示,將檢測出的輪廓與建筑物點云疊加顯示,如圖3(b)所示,可以直觀地發現本文方法的效果較好,精度達亞像素級。

圖3 直線檢測結果
選擇江西某地區城市的機載LiDAR數據作為試驗數據,數據尺寸為970 m×720 m,數據點云數為4 743 612,點云密度為8.5點/m2,建筑物為92棟。數據如圖4所示,圖4(a)為原始點云數據,圖4(b)為提取的建筑物點云。本文試驗的硬件環境:Intel(R)CoreTMi7-11800H處理器、16 GB內存,軟件環境:Visual Studio2015 C++、PCL1.8.1(Point Cloud Libary)、OpenCV3.4.9。將本文方法與經典的Canny算法[15]進行建筑物輪廓線提取的對比試驗。本文方法涉及的參數設置如下:比例因子(scale)設置為0.5 m,形態學濾波算法內核為3×3,Canny算法下界閾值設置為40,上界閾值設置為80,圖像梯度的Sobel核的大小為3。

圖4 數據顯示
試驗結果對比如圖5所示,圖5(a)為利用本文方法提取出的建筑物輪廓線,圖5(b)為利用Canny算法提取的結果,可以明顯看出本文的算法優于Canny算法提取的結果。

圖5 試驗結果對比分析
本文從圖5(b)中分別選取了4個感興趣區域進行對比。如圖5(c)所示,對于簡單的長條形建筑物(區域A),本文方法和Canny算法都能將建筑物邊界檢測出來,但Canny算法線段彎曲,轉角處還存在噪聲;針對復雜建筑物(區域B),Canny算法存在的噪聲值更大,甚至建筑物內部還存在一些誤差,而本文方法提取的結果是直線;針對相對復雜的回形建筑物(區域C),Canny算法的結果在一些比較短的邊界處噪聲會變大;針對不同的簡單的正方形建筑物(區域D),Canny算法的噪聲存在于轉角,本文方法取得的效果明顯好于Canny算法。整體而言,Canny算法能識別建筑物的邊界,但是在建筑物拐角處存在噪聲,且得到的邊界不是筆直的,而本文方法提取的建筑物輪廓線都是連續的直線,不需要再進行其他處理(如正則化)。
為了更好地驗證本文方法的精度,從圖5的4個區域分別選用方形、L形、回字形、復雜形的建筑物進行精度評定,結果見表1。將提取的建筑物輪廓線疊加點云顯示,可以看出提取效果較好。此外,采用建筑物面積和輪廓線進行定量的精度評測。可以發現面積和長度的精度與建筑物的復雜程度成反比,建筑物越簡單,提取的精度就越高。

表1 精度分析
為了更好地驗證本文的算法,依據房屋的數量將本次試驗數據分成4組,分別為:20棟、40棟、80棟、92棟。對比試驗結果見表2。本文方法提取花費的時間較短,約為Canny算法的1/50,說明本文方法能夠快速地提取建筑物的輪廓線。

表2 運行時間對比
本文提出了一種基于LSD算法的機載LiDAR數據建筑物輪廓線提取方法。利用已經分類好的建筑物點云進行柵格化生成二值圖,對二值圖進行膨脹、腐蝕操作消除因柵格化產生的空洞區域,再利用LSD算法快速、精確地獲取建筑物輪廓線。試驗表明,本文方法提取效率約為傳統Canny算法的50倍。但是,本文方法僅針對規整的建筑物,若建筑物邊界為弧形、圓形等,本文方法將會失效,這也是其局限所在。