王 娟
(貴陽學院,貴州貴陽550005)
近幾十年來,人們對高壓電線損耗的擔憂明顯增加,在最大的電力輸送公司,工程師面臨的主要問題就是對抗電暈放電,而電暈放電是一個自發的過程,當電壓等于或大于其最小值時,它發生在曲率半徑很小的電極周圍。這個值取決于電極的幾何特性和放電發生的環境。電暈放電產生的條件是在電極表面存在足夠強的電場,它是由線路電壓、導線直徑、導線間距以及當時的天氣狀況等各種因素所引起的。電暈放電不僅會造成電力傳輸過程中的能量損耗,還會對無線電產生干擾,使有源電力線路產生巨大的損耗,使空氣發生化學反應,生成臭氧、氮氧化物等強氧化劑和腐蝕劑,對氣體中的固體介質及金屬電極造成損傷或腐蝕。為了有效地跟蹤和監視高壓電線,使用固定翼無人駕駛飛行器(下稱“無人機”)無疑是一個非常好的選擇,無人機上配備光學攝像設備、發射機、接收機、傳感器、輸入輸出設備等。
本文的大部分研究都是在Matlab中進行的,通過分析飛機發送的每一幅圖像來檢測這幅圖像中的高壓電線,主要目的是為無人機創建一個Matlab命令從獲取的圖像中檢測到高壓線路,然后通過Radon變換來實現線路還原。
Radon變換(拉東變換),就是將數字圖像矩陣在某一指定角度射線方向上做投影變換。這就是說,可以沿著任意角度θ來作Radon變換。Radon變換可以理解為圖像在空間的投影,空間上的每一點對應(x,y)空間中的一條直線。Radon變換可以用于直線檢測,針對非二值圖像,灰度值高的線段會在P空間中形成亮點,而低灰度值的直線會在P空間中形成暗點[1]。
在圖像變換中,Radon變換的實質就是計算圖像矩陣在某個方向上的投影。投影函數為:

式中,δ是Delta函數[2]。
結合直線方程,則Delta函數可以表示為:

例如圖像矩陣如果是二維的,在某個方向上的投影,就是在其垂直方向上的線積分。
事實上,Radon變換最常用的是其逆變換,因為一個物體的投影可以通過光線照射得到。如果我們能得到該物體不同方向上的投影,就可以對這些投影圖像進行Radon逆變換,來重建其二維結構或三維結構。
Radon變換是如何從圖像中檢測到一條直線的?基于Radon變換的直線檢測就是檢測角度變化時出現的“局部峰值”,即可確定直線的方向,同時,峰值大小能夠確定直線上點的個數,如圖1所示。

圖1 雷達檢測平行線
圖1 中兩個圖像顯示,每個點都有相應的正弦曲線。在Radon平面上,如果檢測到有更多的點共線,它們的正弦曲線相交于一點,那么它就是直線[3]。
Radon變換可以利用Matlab直接實現。首先將飛機上的光學傳感器接收到的原始圖像輸入到Matlab中,之后需要將原始的圖像轉為灰度圖像。利用Radon函數在消除攝像飽和度并保持亮度的情況下,將RGB圖像轉換為灰度圖像。
Matlab中自帶的Radon函數使用方法如下:
[R,x]=radon(F,theta)式中,F為待檢測的圖像,需為灰度圖像;theta為檢測的角度范圍,通常取0:179;R為Radon變換的結果,是一個M×N的二維矩陣,M與x相等,是平行直線距離原點的距離(需結合原理理解),N是變換的角度范圍,theta取0:179時,N為180。
變換后可對結果進行顯示。進行Radon變換后,會得到一個二維矩陣,矩陣中峰值所在表征了原圖中直線的信息,如圖2所示,其中圈出的點表示峰值,只要檢測出峰值所在的位置,就可以得到直線的位置信息。
峰值檢測使用函數findpeaks(),由于該函數只能對一維向量進行檢測,因此需事先對Radon變換結果進行處理:
J=reshape(R,M*N,1);

圖2 Radon變換圖像
[PKS,LOCS]=findpeaks(J,'THRESHOLD',6);
使用findpeaks()函數時,可以通過閾值控制檢測結果的個數。其中LOCS會返回一維向量中峰值所在的位置,根據原矩陣大小,我們可以計算出相應的直線信息:
d=mod(LOCS(i),M)-(M-1)/2;
theta=fix(LOCS(i)/M);
從圖像中檢測出一條直線,下一步的任務就是根據直線信息將直線在原圖中繪出。圖2中顯示了應用Radon變換的最終圖像,我們可以看到在Radon變換矩陣中有很強的峰值,這些峰值的位置對應于原始圖像中的直線位置。
在后續的研究當中,我們將嘗試在采集圖像的過程中添加適當的過濾器,以減少復雜的背景環境所造成的影響,只突出電力線路。我們還可以做的是使用Matlab編譯器將Matlab代碼轉換為C++代碼,翻譯后的代碼還可以編譯成獨立于Matlab運行的應用程序,或作為共享庫與C++現有的任何一個應用程序相集成,也可通過Matlab引擎從C++程序中調用Matlab。