田貝樂,牛宏俠,劉義健
(1. 蘭州交通大學 光電技術與智能控制教育部重點實驗室,蘭州 730070;2. 甘肅省高原交通信息工程及控制重點實驗室,蘭州 730070)
許多邊緣檢測所采用的算法其原理都是利用微分計算,將所需要的信息從含有噪聲的圖像的高頻部分中提取出來。但由于傳統(tǒng)的邊緣檢測算法較易受到噪聲的影響,往往造成邊緣檢測的結果中含有較多的噪聲信號,而所需要的有用信息不能被提取出來,導致檢測精度較低[1],例如,Laplace、Log、Prewitt、Sobel和Robert等 邊 緣 檢 測算 法[2]。與 這幾種邊緣檢測算法相比,Canny邊緣檢測算法的檢測精度更優(yōu),且檢測結果的信噪比較高,因此廣泛應用于各個領域[3]。
在實際應用過程中,照片拍攝時會受到拍攝環(huán)境光線強度和攝像機自身情況等各種外界因素的影響。如果利用傳統(tǒng)的Canny邊緣檢測算法對圖像進行邊緣信息的提取,會導致圖像過于光滑,不但使提取的局部信息的精確度降低,還無法較好地濾除噪聲,得到的邊緣信息中含有偽邊緣。綜上,本文研究了傳統(tǒng)Canny邊緣檢測算法提取邊緣信息的原理,對每個運算步驟進行分析,針對高斯濾波、梯度計算和高低閾值的確定3方面的不足,提出了一種優(yōu)化的Canny邊緣檢測算法。
傳統(tǒng)Canny邊緣檢測算法的流程為:(1)采用高斯濾波的方法對原始圖像作平滑處理[4];(2)計算降噪后圖像的梯度幅值與方向;(3)對梯度的幅值進行非極大值抑制;(4)用雙閾值法進行檢測并連接邊緣,從而形成一個完整的邊緣[5]。
Canny邊緣檢測算法使用高斯濾波對圖像進行平滑處理,其原理是鄰域平均法[6]。高斯函數(shù)如公式(1)所示:
其中,σ為高斯濾波的參數(shù),σ的選擇會直接影響濾波效果。若σ較大,會造成邊緣偏移嚴重,并使得運算量大幅增加;若σ較小,雖然邊緣的檢測精度較高,但圖像的平滑作用弱,使得降噪效果不好。
圖像平滑處理的流程為:(1)設置一個模板,在該模板內(nèi),求出所有像素灰度的加權平均值;(2)將該值賦給該模版中心像素點的灰度值;(3)按照同樣的方法,掃描圖像中的每個像素點,再進行加權平均計算。
Canny邊緣檢測算法利用2×2鄰域內(nèi)偏導數(shù)的有限差分來計算數(shù)列矩陣I(x,y)的梯度幅值與方向。計算的具體方法如下。
(1)求出點 (x,y) 處 兩個方向的偏導數(shù)Px(i,j)和Py(i,j)分別為:
(2)利用公式(4)和公式(5)得到像素的梯度幅值M(i,j) 和 方向 θ (i,j)。
由于梯度幅值的極大值附近會產(chǎn)生屋脊帶,故非極大值抑制的原理是通過細化幅值圖中的屋脊帶,更好地確定邊緣的位置[7]。
非極大值抑制過程為,將梯度幅值矩陣M(i,j)內(nèi)的每一個點都作為中心像素點,與其周圍8個方向鄰域中沿該中心點梯度方向上的兩個鄰域的梯度幅值進行比較。若中心像素點的幅值小于這兩個方向上鄰域的梯度幅值,則該中心像素點邊緣標志位的值為0。經(jīng)過非極大值抑制,不僅用一個像素的寬度替代了梯度幅值矩陣的屋脊帶寬度,還保留了屋脊的梯度幅值[8]。
經(jīng)上述處理后,還有較多偽邊緣的存在,需要通過閾值化處理來濾除噪聲,消除偽邊緣。
閾值化處理的具體步驟為:(1)設定兩個閾值,即一個高閾值、一個低閾值,將梯度幅值小于低閾值的像素點所對應的灰度值視為0;(2)將低閾值提取出的圖像設為A,將梯度幅值大于高閾值的圖像設為B,由于A為通過低閾值提取得到的圖像,故其邊緣的連續(xù)性較好,但會含有較多的偽邊緣,B為梯度幅值大于高閾值的圖像,故其不包含偽邊緣,但是其邊緣的連續(xù)性不佳;(3)以圖像B為基礎,圖像A為補充,通過遞歸追蹤法獲得邊緣信息。
綜上,高閾值和低閾值的選擇受人為因素影響較大,自適應性較差,在實際工程應用中存在明顯的缺陷。因此,需要提出一種可根據(jù)不同圖像,自適應地確定高低閾值的方法,排除人為因素的干擾[9]。
2.1.1 中值濾波優(yōu)化
傳統(tǒng)中值濾波的過程為,建立一個固定的滑動窗口,在這個窗口內(nèi)對圖像進行濾波,即求得一個中心鄰域內(nèi)的所有像素值的中值,用其替代中心像素點的像素值。
自適應中值濾波是在傳統(tǒng)中值濾波的基礎上,通過窗口中灰度值的大小來自適應地改變窗口的大小[10]。設定一個濾波窗口,Gmid代表該窗口內(nèi)的灰度中值,Gmax和Gmin分別代表窗口內(nèi)灰度值的最大值和最小值。如果滿足Gmid<Gmax且Gmid>Gmin,則窗口的尺寸不變,否則就將預先設定好的窗口尺寸增大,重復上述過程,直至找到合適的Gmid,或窗口尺寸不能增大為止。隨后,驗證中心點像素的灰度值G(x,y),若G(x,y)<Gmax且G(x,y)>Gmin,則G(x,y)為該窗口的灰度值,否則Gmid為該窗口的灰度值。
因Gmid的選取易受到噪聲的影響,不論是傳統(tǒng)中值濾波還是自適應中值濾波,都無法對噪聲進行預先判斷,導致有一定的濾波盲目性。針對上述不足,本文提出了一種優(yōu)化的中值濾波方法,使Gmid的選取不受噪聲的影響,具體步驟如下。
(1)求得窗口內(nèi)極值的平均值Gˉ:
(3)將異常點中的邊緣點提取出來。提取邊緣點的依據(jù)是像素點之間的距離,因為噪聲點是孤立存在的,而邊緣點通常都是連續(xù)存在的,所以根據(jù)公式(7)即可分離邊緣點和噪聲點:
(4)經(jīng)上述分離方法,可將噪聲點分離出來,取正常點的中值作為濾波結果。
2.1.2 小波變換優(yōu)化
小波變換是指把時間域和空間域上的信號轉換到小波域上面。噪聲經(jīng)過變換均勻的分布在小波域的所有部分,有用信號經(jīng)過變換只分布在小波域的部分區(qū)域[11]。因此,有用信號經(jīng)過小波變換所得到的區(qū)域內(nèi)存在噪聲。根據(jù)有用信號和噪聲小波系數(shù)大小不同的特性,設置合適的閾值,對有用信號和噪聲進行分類。圖像的三級小波分解如圖1所示。
圖1 圖像的三級小波分解
優(yōu)化后的小波變換濾波原理如下。
(1)對圖像進行小波分解。根據(jù)圖1可知,每經(jīng)過一次小波分解,都會得到低頻(LL)子圖像、水平高頻(HL)子圖像、垂直高頻(LH)子圖像、高頻(HH)子圖像。
(2)根據(jù)有用信號和噪聲在小波系數(shù)上的差異進行閾值化處理。由于經(jīng)過小波分解后的噪聲大多在高頻區(qū)域,所以對(1)中的LL子圖像不進行閾值化處理,僅對HL、LH、HH子圖像進行閾值化處理。
(3)對經(jīng)過閾值化處理的HL、LH、HH子圖像采用優(yōu)化后的自適應中值濾波方法進行濾波。HL子圖像中含有水平高頻和垂直低頻信息,因此,采用水平濾波進行處理,保留了垂直低頻信息,同時濾除了水平高頻信息;LH中含有垂直高頻和水平低頻信息,因此,采用垂直濾波進行處理,使得水平低頻信息得以保留;HH中含有水平高頻和垂直高頻信息,采用對角濾波的方法進行濾波。
(4)進行小波重構,得到去噪后的圖像。
上述方法,相比于傳統(tǒng)Canny邊緣檢測算法中的高斯濾波,能夠有效消除噪聲,更多地保留原圖像的信息。
2.1.3 濾波效果對比
高斯濾波和本文方法的濾波效果對比如圖2所示,其中,圖2(a)為軌道原圖像;圖2(b)為加入高斯噪聲后的圖像;圖2(c)為經(jīng)過高斯濾波后的效果圖;圖2(d)為經(jīng)過本文提出的優(yōu)化后小波變換處理后的圖像。
圖2 濾波效果對比
傳統(tǒng)Canny邊緣檢測算法在梯度幅值與方向的計算上對噪聲較為敏感,影響邊緣檢測效果。本文提出了一種梯度與幅值的優(yōu)化計算方法,具體步驟如下。
(1)計算水平方向和垂直方向上的偏導數(shù),分別用P0°和P90°表示:
(2)計算對角線(45°和1 35°)方向上的偏導數(shù),用P45°和P135°表示:
(3)利用公式(12)和公式(13)求得水平方向上的差分H0°(i,j)和 垂直方向上的差分H90°(i,j)分別為:
(4)得出梯度幅值W(i,j)為:
梯度的方向 φ (i,j)為:
上述方法與傳統(tǒng)Canny邊緣檢測算法計算梯度的方法相比,考慮了45°和1 35°兩個方向上偏導數(shù)的影響,抑制了噪聲,從而使邊緣定位更加準確。
傳統(tǒng)Canny邊緣檢測算法的高低閾值是依靠個人經(jīng)驗進行設定的,而在實際工程應用中,因受到各種條件(例如環(huán)境、光照等)影響,單純依靠個人經(jīng)驗設定的高低閾值會降低邊緣檢測結果的精度。故本文提出了一種改進迭代法,對高低閾值進行計算,具體流程如下:
(1)利用直方圖得到圖像灰度的最大值Wmax和最小值Wmin[12],計算二者的均值
(2)根據(jù)均值把原始圖像分成高灰度區(qū)域和低灰度區(qū)域,灰度值>K的區(qū)域為高灰度區(qū)域M,灰度值≤K的區(qū)域為低灰度區(qū)域N;
(3)求出M區(qū)域的灰度最大值W1和 最小值W2,令
(4)M區(qū)域內(nèi),灰度值>K1的區(qū)域為高灰度區(qū)域M1, 灰度值≤K1的 區(qū)域為低灰度區(qū)域M2;
(5)求出M1區(qū) 域內(nèi)的灰度最大值W3和最小值W4, 令根據(jù)K2把M1區(qū)域分成前景和背景,求出二者的灰度均值G1和G2:
其中,E(i,j)表 示圖像中點 (i,j)的 灰度值;F(i,j)為該點的權重系數(shù)。
(6)按照(5)的方法,求出M2區(qū)域內(nèi)的灰度最大、最小值W5和W6的 均值K3,根據(jù)K3把M2區(qū) 域分成前景和背景的灰度均值G3和G4,分別為:
(9)同理,可在N區(qū)域內(nèi)找到低閾值。
該算法具有較好的自適應性,可有效降低噪聲影響,從而更好地保留原始信息。
本文提出了一種優(yōu)化的Canny邊緣檢測算法,對高斯濾波、梯度計算和高低閾值的選定3個方面進行優(yōu)化,并運用MATLAB進行仿真實驗,對實驗結果進行對比與分析。測試圖像為風景圖像、地面圖像及紅細胞圖像,實驗結果如圖3~圖5所示。
圖3 風景圖像效果對比
圖5 紅細胞圖像效果對比
對比圖3(b)和圖3(c)可知,優(yōu)化的Canny邊緣檢測算法可以檢測到更多的邊緣細節(jié)信息,包括更多的木橋細節(jié)及木船輪廓;對比圖4(b)和圖4(c)可知,優(yōu)化的Canny邊緣檢測算法可以更好地抑制假邊緣信息,從而使得邊緣檢測的結果含有較少的無用信息;對比圖5(b)和圖5(c)可知,優(yōu)化的Canny邊緣檢測算法可以更好地消除雙邊緣的情況。
圖4 地面圖像效果對比
本文針對傳統(tǒng)的Canny邊緣檢測算法在高斯濾波、梯度計算和高低閾值選擇上的缺陷,提出了一種優(yōu)化的Canny邊緣檢測算法,改進后的Canny邊緣檢測算法利用優(yōu)化的小波變換代替高斯濾波,對梯度的計算方法進行了優(yōu)化,并采用改進的迭代法來確定高低閾值。MATLAB仿真實驗結果表明,本文提出的邊緣檢測算法在保留了傳統(tǒng)Canny邊緣檢測算法優(yōu)點的同時,還能明顯抑制噪聲,有效地保留原圖像的信息,消除檢測結果中的偽邊緣和雙邊緣,從而使得檢測結果更加連續(xù),有較強的實用性。