呂 萌
(燕山大學 信息科學與工程學院,河北 秦皇島 066004)
在遙感圖像中,對江河上橋梁目標的識別具有重要意義。由于橋梁的最突出特征在于橋體的平行直線,所以對平行直線的實時檢測十分重要。經典的Hough變換是一種常用的檢測直線的方法,它具有可對目標進行有效檢測與識別、可并行實現、對噪聲不敏感等優(yōu)點,但是由于其自身的設計缺陷,無法完成對平行直線的實時性檢測。本文在經典Hough變換的基礎上,提出了一種平行直線改進算法,如圖1所示。經試驗證明,該算法能準確地檢測識別出平行直線,且實時性較好。
圖1 平行線檢測方法流程圖
將灰度圖像轉換為黑白的二值化圖像是圖像數字化處理的重要環(huán)節(jié)之一。目前常用的算法是采用閾值法對圖像進行二值化處理,即通過設定某個T閾值,并以該閾值為門限,把灰度圖像轉換成二灰度級的黑白圖像。在處理過程中,不同的樣品圖像根據灰度分布峰值的不同,按圖像特征的相應要求,可以選擇不同的二值化轉換閾值T。對于256級的灰度圖像,將圖像上位于n處的灰度值記為 Tn(0≤Tn≤255),則設定二值化閾值為Tn。則:由式(1)即得到以二值化數據Tn標定的二值化圖像fn,從而完成了圖像的二值化處理。
經典Hough變換使用Canny算子進行邊緣檢測。雖然Canny算子能較好地檢測出圖像中的各個邊緣信息,但是在處理之后的圖像中,顯示了許多無用的邊緣信息,從而導致處理時間過長,失去了實時性意義。本文算法在對圖像二值化處理的基礎上,采用Sobel算子檢測圖像。
Sobel算子利用圖2中的掩模以數字化近似一階導數值 Gx和 Gy[1]。 即 :
其邊緣檢測的實現過程是:使用圖2(a)的掩模對圖像fn進行濾波,再使用圖2(b)掩模對fn濾波,然后計算每個濾波后的圖像中的像素值的平方,并將兩幅圖像的結果相加,最后計算相加結果的平方根。
圖2 Sobel邊緣檢測器掩模及實現的一階導數
經典Hough變換是一種線描述方法,將笛卡兒坐標空間中的線變換為極坐標空間中的點。如圖3所示,如x、y 是像素的直角坐標, 用 ρ1、ρ2直線 l1、l2距原點的法線距離,θ為l1、l2的法線與 X軸的夾角。經過如下坐標變換公式[2]:直線對應極坐標空間中能找到某個極大值點 (ρ,θ)[3-4]。如圖4所示,圖 3中的 l1、l2上的 A、B兩點對應于圖 4中的點(ρ1,θ)和(ρ2,θ)。
圖3 笛卡爾坐標空間中的平行線 l1、l2
圖4 極坐標空間中的θ值相等的點
Hough變換先將(ρ,θ)量化,并相應設置一個二維累加器矩陣。累加器中的每個元素描述了(ρ,θ)平面上的一個離散點。將圖像中的每一個特征點代入θ的各個量化值,計算出對應的ρ,計算所得值(經量化)落在某個小格內,即對參數空間累加器進行加1,使得圖像空間中直線的提取問題轉化為累加器計數求極大值問題。
無論是經典的Hough變換,還是改進的Hough變換,都要經過變換空間來檢測。對于直線而言,只要這一組直線是平行線,都有一個顯著的特征:即兩條直線的斜率是相等的,基于這一特征,設計了以下的算法:
(1)為了得到效果更好的邊緣圖像,首先要對圖像進行預處理,得到二值化圖像。
(2)再根據二值化圖像,設定合適的閾值 T,對其進行邊緣檢測。
(3)運用Hough變換,將笛卡爾坐標空間轉換成極坐標空間(ρ,θ),找出若干峰值點,檢測出圖像中的直線。
(4)由于在采集時圖像會受到光照、大氣紊流等自然因素的影響,當一幅遙感圖像中的所有直線被檢測出來后,一條直線會被分割成若干個小段。為了復原這種直線,可以設定閾值T2,計算同一直線上相鄰兩條直線段的距離,如果這個值小于閾值T2,將兩道路段進行連接,否則不作處理。
(5)檢測出各個直線段的起止點。
(6)在復原所有的直線段后,根據橋梁的特點,設定大閾值T3,用來檢測出較長的直線段(即橋體的其中一邊);并利用直線段端點坐標值,計算所有有用直線段的斜率K。即:
(7)當其中一條直線段的斜率與已經檢測出來的直線段(橋體其中一邊)的斜率之間的誤差≤0.1%時,即檢測出了橋體的另一邊,從而完成了實時檢測和識別橋梁。
本文選用某河流上的某橋梁作為實驗對象。兩種算法在相同條件下運行,硬件環(huán)境:CPU為Pentium○R4,主頻為 3.2 GHz,內存為 1 GB;軟件環(huán)境為 Matlab 7.1版本,操作系統(tǒng)為中文Windows XP,掃描圖像像素為449×617。圖5(a)為運用經典Hough變換,在極坐標空間下的峰值點檢測效果圖,圖5(b)為使用本文改進算法下的峰值點檢測效果圖。圖6(a)為經典Hough變換算法下的檢測結果,圖6(b)為本文改進算法檢測的結果,圖6的閾值T2為35像素,大閾值 T3為 300像素。
從多次的實驗結果可知,經典Hough變換所檢測的結果正確率不高,且使用時間較長,不能完成實時檢測和識別,也不能確定所檢測出的直線是否為平行線。利用本文算法所檢測出的直線,經過斜率計算,兩直線的斜率差小于0.1%,可以視為斜率相等,故能判定這兩條直線為平行線,而且正確率與所用時間都優(yōu)于經典Hough變換,如表1所示。
表1 兩種算法結果比較
本文基于斜率判斷的Hough變換算法不但在時間上要比經典的Hough變換快,而且正確率要比經典Hough變換高,對于一般實時性目標的檢測和識別均能取得較高的精度控制。但本文的算法在計算和存儲空間上有很大的可壓縮性,所以還有很多方面需要改進,尤其是對3個閾值的選取上,對算法的效率及最后的結果都有重要的影響。
[1]GONZALEZ R C, WOODS R E, EDDINS S L.Digital image processing using MATLAB[M].Beijing:Publishing House of Electronics Industry,2005.
[2]呂健剛,韋春桃.基于 Hough變換的高分辨率遙感影像城市直線道路提取[J].遙感應用,2009(3):15-16.
[3]FERNANDES L A F,OLIVEIRA M M.Real-time line detection through an improved Hough transform voting scheme[J].Pattern Recognition, 2008,41:299-314.
[4]MOCHIZUKI Y, TORII A, IMIYA A.N-point Hough transform for line detection[J].Communication.Image R,2009,20:242-253.