王 娟
(貴陽學(xué)院,貴州貴陽550005)
近幾十年來,人們對高壓電線損耗的擔(dān)憂明顯增加,在最大的電力輸送公司,工程師面臨的主要問題就是對抗電暈放電,而電暈放電是一個自發(fā)的過程,當(dāng)電壓等于或大于其最小值時,它發(fā)生在曲率半徑很小的電極周圍。這個值取決于電極的幾何特性和放電發(fā)生的環(huán)境。電暈放電產(chǎn)生的條件是在電極表面存在足夠強(qiáng)的電場,它是由線路電壓、導(dǎo)線直徑、導(dǎo)線間距以及當(dāng)時的天氣狀況等各種因素所引起的。電暈放電不僅會造成電力傳輸過程中的能量損耗,還會對無線電產(chǎn)生干擾,使有源電力線路產(chǎn)生巨大的損耗,使空氣發(fā)生化學(xué)反應(yīng),生成臭氧、氮氧化物等強(qiáng)氧化劑和腐蝕劑,對氣體中的固體介質(zhì)及金屬電極造成損傷或腐蝕。為了有效地跟蹤和監(jiān)視高壓電線,使用固定翼無人駕駛飛行器(下稱“無人機(jī)”)無疑是一個非常好的選擇,無人機(jī)上配備光學(xué)攝像設(shè)備、發(fā)射機(jī)、接收機(jī)、傳感器、輸入輸出設(shè)備等。
本文的大部分研究都是在Matlab中進(jìn)行的,通過分析飛機(jī)發(fā)送的每一幅圖像來檢測這幅圖像中的高壓電線,主要目的是為無人機(jī)創(chuàng)建一個Matlab命令從獲取的圖像中檢測到高壓線路,然后通過Radon變換來實(shí)現(xiàn)線路還原。
Radon變換(拉東變換),就是將數(shù)字圖像矩陣在某一指定角度射線方向上做投影變換。這就是說,可以沿著任意角度θ來作Radon變換。Radon變換可以理解為圖像在空間的投影,空間上的每一點(diǎn)對應(yīng)(x,y)空間中的一條直線。Radon變換可以用于直線檢測,針對非二值圖像,灰度值高的線段會在P空間中形成亮點(diǎn),而低灰度值的直線會在P空間中形成暗點(diǎn)[1]。
在圖像變換中,Radon變換的實(shí)質(zhì)就是計(jì)算圖像矩陣在某個方向上的投影。投影函數(shù)為:
式中,δ是Delta函數(shù)[2]。
結(jié)合直線方程,則Delta函數(shù)可以表示為:
例如圖像矩陣如果是二維的,在某個方向上的投影,就是在其垂直方向上的線積分。
事實(shí)上,Radon變換最常用的是其逆變換,因?yàn)橐粋€物體的投影可以通過光線照射得到。如果我們能得到該物體不同方向上的投影,就可以對這些投影圖像進(jìn)行Radon逆變換,來重建其二維結(jié)構(gòu)或三維結(jié)構(gòu)。
Radon變換是如何從圖像中檢測到一條直線的?基于Radon變換的直線檢測就是檢測角度變化時出現(xiàn)的“局部峰值”,即可確定直線的方向,同時,峰值大小能夠確定直線上點(diǎn)的個數(shù),如圖1所示。
圖1 雷達(dá)檢測平行線
圖1 中兩個圖像顯示,每個點(diǎn)都有相應(yīng)的正弦曲線。在Radon平面上,如果檢測到有更多的點(diǎn)共線,它們的正弦曲線相交于一點(diǎn),那么它就是直線[3]。
Radon變換可以利用Matlab直接實(shí)現(xiàn)。首先將飛機(jī)上的光學(xué)傳感器接收到的原始圖像輸入到Matlab中,之后需要將原始的圖像轉(zhuǎn)為灰度圖像。利用Radon函數(shù)在消除攝像飽和度并保持亮度的情況下,將RGB圖像轉(zhuǎn)換為灰度圖像。
Matlab中自帶的Radon函數(shù)使用方法如下:
[R,x]=radon(F,theta)式中,F(xiàn)為待檢測的圖像,需為灰度圖像;theta為檢測的角度范圍,通常取0:179;R為Radon變換的結(jié)果,是一個M×N的二維矩陣,M與x相等,是平行直線距離原點(diǎn)的距離(需結(jié)合原理理解),N是變換的角度范圍,theta取0:179時,N為180。
變換后可對結(jié)果進(jìn)行顯示。進(jìn)行Radon變換后,會得到一個二維矩陣,矩陣中峰值所在表征了原圖中直線的信息,如圖2所示,其中圈出的點(diǎn)表示峰值,只要檢測出峰值所在的位置,就可以得到直線的位置信息。
峰值檢測使用函數(shù)findpeaks(),由于該函數(shù)只能對一維向量進(jìn)行檢測,因此需事先對Radon變換結(jié)果進(jìn)行處理:
J=reshape(R,M*N,1);
圖2 Radon變換圖像
[PKS,LOCS]=findpeaks(J,'THRESHOLD',6);
使用findpeaks()函數(shù)時,可以通過閾值控制檢測結(jié)果的個數(shù)。其中LOCS會返回一維向量中峰值所在的位置,根據(jù)原矩陣大小,我們可以計(jì)算出相應(yīng)的直線信息:
d=mod(LOCS(i),M)-(M-1)/2;
theta=fix(LOCS(i)/M);
從圖像中檢測出一條直線,下一步的任務(wù)就是根據(jù)直線信息將直線在原圖中繪出。圖2中顯示了應(yīng)用Radon變換的最終圖像,我們可以看到在Radon變換矩陣中有很強(qiáng)的峰值,這些峰值的位置對應(yīng)于原始圖像中的直線位置。
在后續(xù)的研究當(dāng)中,我們將嘗試在采集圖像的過程中添加適當(dāng)?shù)倪^濾器,以減少復(fù)雜的背景環(huán)境所造成的影響,只突出電力線路。我們還可以做的是使用Matlab編譯器將Matlab代碼轉(zhuǎn)換為C++代碼,翻譯后的代碼還可以編譯成獨(dú)立于Matlab運(yùn)行的應(yīng)用程序,或作為共享庫與C++現(xiàn)有的任何一個應(yīng)用程序相集成,也可通過Matlab引擎從C++程序中調(diào)用Matlab。