束慶霏
(國(guó)網(wǎng)江蘇省電力有限公司張家港供電公司,江蘇 張家港 215600)
桿塔精細(xì)化巡檢是無(wú)人機(jī)智能巡檢工作的重要一環(huán),激光點(diǎn)云技術(shù)是當(dāng)前桿塔三維建模的重要方法[1-4]。本文主要研究點(diǎn)云數(shù)據(jù)中桿塔坐標(biāo)的提取,以供無(wú)人機(jī)精細(xì)化巡檢的航跡規(guī)劃使用。
桿塔結(jié)構(gòu)特征明顯,可將點(diǎn)云數(shù)據(jù)在二維平面內(nèi)格網(wǎng)化,再基于桿塔特征進(jìn)行識(shí)別分析。文獻(xiàn)[5]基于格網(wǎng)特征對(duì)桿塔進(jìn)行識(shí)別,并通過(guò)分層切片法獲取桿塔的平面中心坐標(biāo)。文獻(xiàn)[6]基于點(diǎn)云中桿塔高密度、大坡度、大高差的特征,提出一種基于二維格網(wǎng)多維特征分析的輸電桿塔自動(dòng)定位方法。文獻(xiàn)[7]對(duì)點(diǎn)云構(gòu)建K-D 樹(shù)和二維格網(wǎng),根據(jù)密度、nDSM 統(tǒng)計(jì)興趣區(qū),最后根據(jù)其空間分布特征得到桿塔的坐標(biāo)。其他學(xué)者將點(diǎn)云數(shù)據(jù)中的導(dǎo)線、桿塔和地面點(diǎn)分離,再識(shí)別定位桿塔。文獻(xiàn)[8]通過(guò)K-means聚類(lèi)算法分別得到導(dǎo)線和桿塔的點(diǎn)云數(shù)據(jù),進(jìn)而為無(wú)人機(jī)自主巡線提供航跡規(guī)劃。文獻(xiàn)[9]圍繞點(diǎn)云的全局走向統(tǒng)計(jì)特征設(shè)計(jì)算法,通過(guò)K-means聚類(lèi)算法得到桿塔和導(dǎo)線的種子點(diǎn)簇,再根據(jù)桿塔種子點(diǎn)簇和桿塔結(jié)構(gòu)特征,向上向下利用區(qū)域生長(zhǎng)算法逐層生成最終桿塔。文獻(xiàn)[10]根據(jù)桿塔的橫擔(dān)寬和點(diǎn)云的屬性值,采用改進(jìn)的快速三維凸包構(gòu)造算法來(lái)確定桿塔位置,實(shí)現(xiàn)桿塔點(diǎn)云的提取分類(lèi)。
此外,還可通過(guò)其他方法識(shí)別定位點(diǎn)云中的桿塔。文獻(xiàn)[11-12]采用半自動(dòng)化方法,首先建立不同類(lèi)型的桿塔模型,計(jì)算點(diǎn)云分布的方向特征以確定輸電桿塔的主方向,再?gòu)臈U塔點(diǎn)云中捕捉桿塔關(guān)鍵點(diǎn),根據(jù)桿塔模型進(jìn)行匹配,確定最終桿塔。該方法需事先建立各類(lèi)桿塔的模型,人工處理干預(yù)較多。文獻(xiàn)[13]利用門(mén)型桿塔的圓柱部分得到門(mén)型桿塔的水平投影直線,再通過(guò)距離閾值判斷去除點(diǎn)云中多余的導(dǎo)線點(diǎn)云,并基于塔頂向下搜索去除地面點(diǎn)。已有研究一般將全局密度較大的位置判斷為桿塔,某些地形復(fù)雜處會(huì)被誤判為桿塔,通過(guò)設(shè)置單一高程閾值來(lái)過(guò)濾地面點(diǎn),容錯(cuò)率低[14],且致力于還原單個(gè)桿塔的點(diǎn)云模型,忽略了點(diǎn)云數(shù)據(jù)中桿塔數(shù)量的完整性。其中一些算法如K-means聚類(lèi)算法、區(qū)域生長(zhǎng)算法等需耗費(fèi)大量的時(shí)間成本。本文考慮桿塔、導(dǎo)線和地面點(diǎn)云的不同空間特征,能夠分離全部桿塔,適用于山地、丘陵、平原等各種地形的塔桿提取。通過(guò)基于空間特征的桿塔提取算法,可從龐大的點(diǎn)云數(shù)據(jù)中(1條線路約3億多點(diǎn))快速分離出桿塔,并獲取全部桿塔的坐標(biāo)。
采用某市電網(wǎng)2條220 kV輸電線路的激光點(diǎn)云為研究數(shù)據(jù),每條線路分為5段,每段點(diǎn)云數(shù)量為4 000萬(wàn)至9 000萬(wàn),數(shù)據(jù)為las格式。首先利用Python將數(shù)據(jù)轉(zhuǎn)換為PCD格式,以供后續(xù)編程處理。點(diǎn)云信息包括:被測(cè)點(diǎn)的平面位置和高程,RGB(紅、綠、藍(lán))顏色信息,反射強(qiáng)度等。每條線路的點(diǎn)云數(shù)據(jù)約3億多,數(shù)據(jù)大小達(dá)10 G多。通過(guò)Python的Laspy庫(kù)提取所有激光點(diǎn)云的平面位置和高程信息進(jìn)行研究。
平面位置采用CGCS2000(China Geodetic Coordinate System 2000)坐標(biāo)系,以地球?yàn)橹行?固定在地球上的右手3D坐標(biāo)由3個(gè)正交軸組成,其中x和y軸位于赤道平面,z軸平行于平均地球旋轉(zhuǎn)軸并指向北極。高程即海拔高度,單位為m。
由于激光點(diǎn)云數(shù)據(jù)龐大,需通過(guò)降采樣和初步過(guò)濾地面點(diǎn)云來(lái)預(yù)處理點(diǎn)云數(shù)據(jù),然后基于桿塔、導(dǎo)線和地面點(diǎn)云的不同空間特征來(lái)分離、粗提取每個(gè)桿塔,最后考慮桿塔的直立特性和對(duì)稱(chēng)特性精提取每個(gè)桿塔坐標(biāo)。
采用Open3d庫(kù)里的函數(shù)對(duì)激光點(diǎn)云數(shù)據(jù)降采樣處理。降采樣方法一般有均勻下采樣、體素下采樣和曲率下采樣,三者區(qū)別如下:
1)均勻下采樣首先需選取1個(gè)種子點(diǎn),并設(shè)置1個(gè)內(nèi)點(diǎn)集合,每次從點(diǎn)云中找出1個(gè)不屬于內(nèi)點(diǎn)集合且距離內(nèi)點(diǎn)最遠(yuǎn)的點(diǎn)。本文設(shè)置每30個(gè)點(diǎn)采樣1個(gè)點(diǎn)。此采樣方式時(shí)間短,效果較好。
2)體素下采樣是將三維空間體素化,然后在每個(gè)體素內(nèi)采樣1個(gè)點(diǎn),通常選用中心點(diǎn)作為采樣點(diǎn)。本文設(shè)置體素大小為3。此采樣方式時(shí)間短,但容易導(dǎo)致桿塔導(dǎo)線部分點(diǎn)云缺失。
3)曲率下采樣是在點(diǎn)云曲率越大的地方,采樣點(diǎn)越多。首先,計(jì)算每個(gè)點(diǎn)的鄰域;然后,計(jì)算點(diǎn)到鄰域點(diǎn)的法線夾角值,曲率越大的地方,該夾角值越大;接著設(shè)置1個(gè)角度閾值,點(diǎn)的鄰域夾角值大于該閾值的點(diǎn)為特征明顯的區(qū)域,其余為不明顯區(qū)域;最后,均勻采樣特征明顯區(qū)域和不明顯區(qū)域。本文設(shè)置鄰域點(diǎn)數(shù)為1 000,角度閾值為30°,特征明顯區(qū)域每30個(gè)點(diǎn)采樣1個(gè)點(diǎn),不明顯區(qū)域每100個(gè)點(diǎn)采樣1個(gè)點(diǎn)。此采樣方式效果好,但非常耗時(shí),以某段包含8萬(wàn)點(diǎn)云的線路為例,均勻下采樣和體素下采樣只需幾秒鐘,曲率下采樣需2 h左右。
3種采樣結(jié)果如圖1—圖3所示。圖2中大部分桿塔點(diǎn)云缺失,圖3中特征不明顯的導(dǎo)線點(diǎn)云部分缺失。綜合考慮采樣效果和時(shí)間成本,本文選用圖1的均勻下采樣。
圖1 均勻下采樣
圖2 體素下采樣
圖3 曲率下采樣
為去除多余地面點(diǎn),先對(duì)降采樣后的點(diǎn)云作初步的過(guò)濾地面點(diǎn)處理。某市地處平原地區(qū),平均海拔高度為7 m, 220 kV 的桿塔呼高至少達(dá)到20 m,因此設(shè)置高度閾值為12 m,容錯(cuò)率高,可保留全部桿塔,同時(shí)可過(guò)濾一半多的點(diǎn)云,大大提高后續(xù)程序處理效率。過(guò)濾地面點(diǎn)后的線路如圖4所示,地面點(diǎn)密度大大降低。
圖4 過(guò)濾地面點(diǎn)后的線路
本文基于桿塔、導(dǎo)線和地面點(diǎn)云的空間分布特征將每個(gè)桿塔分離。采集點(diǎn)云數(shù)據(jù)時(shí),無(wú)人機(jī)位于導(dǎo)線或桿塔的正上方,在一定范圍內(nèi)通過(guò)雷達(dá)發(fā)射激光點(diǎn),距離近的點(diǎn)會(huì)先反射回來(lái)被接收,距離遠(yuǎn)的點(diǎn)則反之,因此在一定范圍內(nèi),點(diǎn)云在空間里是無(wú)序的,但從全局看,沿著線路方向是有序的。本文設(shè)置4 000個(gè)點(diǎn)云為1個(gè)區(qū)間,根據(jù)其空間特征判斷是否存在桿塔,算法流程如下:
1)將這4 000個(gè)點(diǎn)按高程每2 m設(shè)置1個(gè)區(qū)間,區(qū)間范圍為12~100 m,保證不會(huì)遺漏塔頂點(diǎn)云。
2)計(jì)算每個(gè)區(qū)間內(nèi)點(diǎn)云的高程之和,并以列表形式儲(chǔ)存,如式(1)—式(4)所示,其中n1至n6為非零值。
[n1,n2,n3…0,0,0…n4,n5,n6…0,0,0]
(1)
[n1,n2,n3,n4,n5,n6…0,0,0]
(2)
[0,0,0…n1,n2,n3…0,0,0…n4,n5,n6…0,0,0]
(3)
[0,0,0…n1,n2,n3,n4,n5,n6…0,0,0]
(4)
3)通過(guò)列表值檢驗(yàn)這4 000個(gè)點(diǎn)內(nèi)是否存在桿塔,中間存在大量零值的即為非桿塔點(diǎn)云。對(duì)于式(1),n1至n3為地面點(diǎn),n4至n6為導(dǎo)線點(diǎn),需排除這4 000個(gè)點(diǎn)云;對(duì)于式(2),n1至n6為地面點(diǎn)和桿塔點(diǎn),需保留這4 000個(gè)點(diǎn)云。存在海拔較高的區(qū)域(>12 m),計(jì)算區(qū)間高程時(shí)開(kāi)始會(huì)出現(xiàn)零值,如式(3)—式(4),先去除前面的零值,再分別按式(1)、式(2)計(jì)算。
算法流程3中的計(jì)算方法如下:
1)通過(guò)索引函數(shù)得到列表中第一次出現(xiàn)零值的位置,記為P;
2)判斷P是否為0(Python索引從0開(kāi)始),若是,則刪除列表首位的零值,繼續(xù)計(jì)算P,直到P不為0;
3)通過(guò)計(jì)數(shù)函數(shù)得到列表中零值的個(gè)數(shù),記為T(mén),以第一次零值位置為分界點(diǎn),通過(guò)式5計(jì)算分界點(diǎn)后面列表的元素個(gè)數(shù),記為N(包括分界點(diǎn))
N=LEN(L)-P
(5)
式中:LEN為函數(shù),可得到列表L的元素個(gè)數(shù),L如式(1)—(4)所示。
4)判斷T是否等于N,若是,則保留這4 000個(gè)點(diǎn)云,否則去除。
每段線路按4 000個(gè)點(diǎn)云判斷計(jì)算,最終可分離所有桿塔,并過(guò)濾大量導(dǎo)線地面點(diǎn)云(可過(guò)濾接近一半的點(diǎn)云數(shù)量),如圖5所示。單個(gè)放大的桿塔如圖6所示,依舊包含大量的地面點(diǎn)云,需進(jìn)一步提取。在CGCS2000坐標(biāo)系下,圖5和圖6中,桿塔橫坐標(biāo)位置約為281 903~284 698 m,縱坐標(biāo)位置約為3 529 810~3 531 839 m,高程最高可達(dá)80 m。本文提取桿塔算法適用于該坐標(biāo)系下的所有地形地貌,不受坐標(biāo)位置影響,因此本文的圖例舍去了坐標(biāo)系,只展示三維提取效果。本文的區(qū)間大小4 000,根據(jù)點(diǎn)云采集密度、降采樣方式和桿塔密度設(shè)置。區(qū)間過(guò)小,容錯(cuò)率低,可能使桿塔不完整;區(qū)間過(guò)大,容錯(cuò)率高,能完整保留桿塔,但會(huì)多出導(dǎo)線地面點(diǎn)云。綜合考慮,設(shè)置區(qū)間大小為4 000,相同的點(diǎn)云采集密度和降采樣方式,可采用相同的區(qū)間大小,同時(shí)可根據(jù)桿塔密度進(jìn)行微調(diào)。
圖5 桿塔粗提取
圖6 桿塔點(diǎn)云
經(jīng)過(guò)桿塔粗提取后,可將所有桿塔分離,可通過(guò)Gaussian KDE 函數(shù)計(jì)算二維平面內(nèi)的點(diǎn)云密度分布,但此方法非常耗時(shí),60萬(wàn)的點(diǎn)云數(shù)量需計(jì)算4 h。因此本文直接遍歷粗提取后的點(diǎn)云,每2 000個(gè)點(diǎn)云確定1個(gè)位置,在該點(diǎn)云位置左右分別提取2 000個(gè)點(diǎn)云,以這4 000點(diǎn)云進(jìn)行桿塔精提取,通過(guò)縱向分層的方法確定桿塔中軸位置[15-17],再基于中心對(duì)稱(chēng)的思想進(jìn)一步去除雜點(diǎn),具體提取流程如下:
1)將粗提取后的點(diǎn)云按高程每2 m設(shè)置1個(gè)區(qū)間,計(jì)算該區(qū)間點(diǎn)云在二維平面的質(zhì)心,并存進(jìn)列表;
2)依次計(jì)算上下層區(qū)間質(zhì)心在垂直方向的tan閾值,設(shè)置tan閾值為0.5,即26.5°,判斷選取滿(mǎn)足tan小于0.5的相鄰幾段區(qū)間,計(jì)算這幾段區(qū)間的平均質(zhì)心作為桿塔的中軸,實(shí)際tan<1基本都能得到較好的結(jié)果;
3)步驟2中若不存在tan<閾值的區(qū)間,則表明這4 000點(diǎn)不存在完整的桿塔,直接進(jìn)入下一個(gè)循環(huán);
4)利用步驟2得到桿塔中軸,過(guò)濾中軸周?chē)^(guò)10 m的點(diǎn)云,可過(guò)濾掉大部分地面點(diǎn)云(可過(guò)濾接近一半的點(diǎn)云數(shù)量);
5)基于步驟2得到的桿塔中軸和步驟4過(guò)濾后的點(diǎn)云,根據(jù)桿塔的對(duì)稱(chēng)性,遍歷所有的點(diǎn)云,計(jì)算每個(gè)點(diǎn)云p關(guān)于桿塔中軸的中心對(duì)稱(chēng)點(diǎn)p′的位置,以p′位置為球心,若球心周?chē)? m不存在點(diǎn)云,則去除p。
步驟4處理得到的桿塔如圖7所示,地面點(diǎn)云基本被過(guò)濾干凈,底部少部分點(diǎn)云為樹(shù)木。經(jīng)過(guò)步驟4的過(guò)濾,步驟5的處理效率大大提高,步驟5處理得到的桿塔如圖8所示,只剩桿塔和部分導(dǎo)線點(diǎn)云,多出的導(dǎo)線點(diǎn)云不影響桿塔的精細(xì)化巡檢航跡規(guī)劃。為更好展示桿塔提取效果,本文圖例經(jīng)過(guò)一定的三維旋轉(zhuǎn),以第三視角呈現(xiàn),因此舍去了坐標(biāo)系。
圖7 桿塔精提取——步驟4
圖8 桿塔精提取——步驟5
根據(jù)點(diǎn)云采集密度、降采樣方式和桿塔粗提取方法,本文設(shè)置的區(qū)間4 000可完全包含整個(gè)桿塔點(diǎn)云,以每2 000點(diǎn)云遍歷粗提取后的點(diǎn)云可得到該段線路的全部桿塔。若桿塔非對(duì)稱(chēng),如上字型塔,可增大p′的球心半徑,以保證桿塔上部不會(huì)遺漏點(diǎn)云。從降采樣、過(guò)濾地面點(diǎn)、桿塔粗提取到桿塔精提取,平均每基桿塔耗時(shí)不超過(guò)2 min。
基于某市2條220 kV輸電線路的激光點(diǎn)云數(shù)據(jù),對(duì)輸電桿塔坐標(biāo)進(jìn)行了提取,得到如下結(jié)論:
1)相較于體素下采樣和曲率下采樣,均勻下采樣在時(shí)間成本和采樣效果上更有優(yōu)勢(shì)。
2)基于桿塔、導(dǎo)線和地面點(diǎn)云空間特征的粗提取方法可去除兩兩桿塔間的導(dǎo)線和地面點(diǎn)云,完整地分離提取出每個(gè)桿塔。
3)基于桿塔直立特性和對(duì)稱(chēng)特性的精提取方法可去除所有地面點(diǎn)云和其余雜點(diǎn),快速獲取每個(gè)桿塔坐標(biāo),單個(gè)桿塔建模效果較好,平均每基桿塔提取時(shí)間不超過(guò)2 min。
本文采用平原地區(qū)的輸電桿塔點(diǎn)云數(shù)據(jù)對(duì)算法進(jìn)行驗(yàn)證,實(shí)際對(duì)于位處山區(qū)或地形復(fù)雜的輸電線路,本文的算法依舊有效,只需去除過(guò)濾地面點(diǎn)這一步,然后調(diào)整桿塔提取的區(qū)間范圍即可。此外,若存在并行桿塔,本文基于桿塔中軸的精提取算法則失效,但基于空間分布特征的粗提取算法依舊有效,粗提取后再通過(guò)人工判斷精提取。