段鎖林,殷聰聰,李大偉
(常州大學 機器人研究所,江蘇 常州 213164)
邊緣檢測是很多其它圖像處理技術的基礎[1]。傳統(tǒng)的邊緣檢測算法有Roberts、Sobel、Prewitt、Kirsch、Canny等。其中Canny算法相對于其它幾種算法具有較好的去噪能力和較高的檢測精度,應用范圍較廣[2]。但是,傳統(tǒng)Canny算法存在需要設定參數(shù)、椒鹽噪聲環(huán)境下檢測效果不佳等問題。近年來,許多學者針對Canny算法存在的問題進行了改進。文獻[3]提出用窗口大小為3×3的改進后中值濾波器替代高斯濾波器,減少了運算量,但是對不同程度的椒鹽噪音適應性較差且對高斯噪聲的濾波效果不佳;文獻[4,5]提出用自適應中值濾波器替代高斯濾波器,對椒鹽噪聲自適應性較好,但是運算量較大,對高斯噪聲的去噪效果不佳;文獻[3,6]在計算梯度時將模板擴大為3×3,增加計算45°和135°方向的梯度,增加了算法的抗噪性,但是沒有充分利用45°和135°方向的數(shù)據(jù)來計算梯度的方向;文獻[4,7]引入Otsu算法根據(jù)像素梯度值的分布情況計算高、低閾值,增加了算法的自適應性,但是傳統(tǒng)Otsu算法需要遍歷每個像素梯度等級來確定最大類間方差值,效率較低。
針對上述問題,通過改進自適應中值濾波器、增加梯度計算模板和在Otsu算法中引入二分查找法等手段來改進傳統(tǒng)Canny算法。實驗結(jié)果表明,該算法在椒鹽噪聲和高斯噪聲環(huán)境下都有較好的邊緣檢測效果,自適應性強,在一定程度上減少了算法的計算機耗時。
(1)Canny算法采用二維零均值高斯濾波器對圖像進行去噪處理,濾波器函數(shù)表達式如下
(1)
式中:σ——高斯濾波器分布參數(shù),當σ取值較小時,邊緣定位精度較高,但抑制噪聲能力差。在噪聲較大時,需要增大σ的值和增大模板,但會使邊緣位置偏離實際位置,邊緣定位精度降低[8]。因此,需要根據(jù)圖像含有噪聲的具體情況人為設置σ的取值大小,同時,高斯濾波器對椒鹽噪聲的濾波效果不佳。
(2)傳統(tǒng)Canny算法采用2×2大小的模板來計算平滑后灰度圖像的梯度幅值和梯度方向。其中,點(i,j)處的灰度值為I(i,j),則水平和垂直兩個方向上的梯度值分別為
Gx(i,j)=[I(i,j+1)-I(i,j)+I(i+1,
j+1)-I(i+1,j)]/2
(2)
Gy(i,j)=[I(i,j)-I(i+1,j)+I(i,
j+1)-I(i+1,j+1)]/2
(3)
此時,點(i,j)處的梯度幅值G(i,j)和梯度方向θ(i,j)分別為
(4)
(5)
由于采用了2×2梯度計算模板,使得對噪聲比較敏感,容易檢測出很多偽邊緣和丟失真實邊緣,造成邊緣定位精度降低,并且所計算出來的其實是內(nèi)插點(i+1/2,j+1/2)處的梯度幅值和方向[6]。
(3)傳統(tǒng)Canny算法根據(jù)雙閾值從候選邊緣點中尋找最終的邊緣點。雙閾值的選擇需要根據(jù)圖像梯度分布的具體情況預先設定高閾值Th和低閾值Tl。對于邊緣強度不同的圖像,用同一組高、低閾值分割,效果相差很大[9]。因此,傳統(tǒng)Canny算法對邊緣強度分布不同的圖像,適應性差。
針對上文所分析的問題,在已有的改進方法基礎之上,提出了進一步的改進方法,旨在提高邊緣檢測算法的自適應性,降低運算量,提高算法的實時性。
傳統(tǒng)中值濾波是基于數(shù)據(jù)整體排序的方法找出最大值、最小值和中值,隨著濾波窗口的增大,運算量會急劇增加,并且對高斯噪聲的濾波效果不佳。利用分治法思想和相鄰窗口排序信息相關性的原理改進傳統(tǒng)自適應中值濾波器,可以大大減小排序時的比較次數(shù),再結(jié)合IMF(improved median filter)算法可以使其對高斯噪聲也具有較好的濾波效果[10]。具體改進方法如下:
設濾波窗口為Wn,窗口中像素點的灰度值為aij,則有
(6)
首先利用分治法思想對Wn中元素進行排序[11]。將Wn中每一列分別進行由小到大排列得到新的矩陣Xn,使得Xn的第1行為Wn中每一列的最小值,第2n-1行為Wn中每一列的最大值,第n行為Wn中每一列的中值。接著對Xn中的第1行、第n行和第2n-1行分別進行由小到大排列得到矩陣Yn,則Yn中的a11和a(2n-1)(2n-1)分別是Wn中的最小值和最大值,ann是Wn中的近似中值。實驗結(jié)果表明,這樣得到的近似中值不影響濾波效果。若濾波窗口為N×N,則傳統(tǒng)中值濾波算法最壞需要N2(N2-1)/2次比較才能找到中值,通過上述改進后最壞只需要N(N-1)(N+3)/2次比較計算。
為了進一步降低運算量,提高算法實時性,根據(jù)相鄰濾波窗口排序信息相關性的原理,利用前一個濾波窗口已排列好的數(shù)據(jù)代入下一個濾波窗口,減少下一個濾波窗口的比較次數(shù)。設當前濾波窗口為經(jīng)過上文重新排序后的Y(i,j),下一個濾波窗口為沿水平方向往右移動一個像素點的Y(i,j+1)。如圖1所示,Y(i,j+1)為Y(i,j)移除其第1列數(shù)據(jù),同時移入下一列新像素構成的新的濾波窗口。

圖1 濾波窗口平移
由于新的濾波窗口Y(i,j+1)中除了最后一列是新移入的數(shù)據(jù),其它每一列都是在Y(i,j)中已經(jīng)排序好的數(shù)據(jù),所以只要將Y(i,j+1)中最后一列數(shù)據(jù)由小到大排序后,再把Y(i,j+1)第1行、第n行和第2n-1行分別進行由小到大排列,即可得到最小值、最大值和近似中值。由于Y(i,j+1)中第1行、第n行和第2n-1行的前2n-2個數(shù)據(jù)在Y(i,j)中已經(jīng)排列好了,是一組有序的數(shù)據(jù),所以最壞只需要2n-2次比較即可完成排序。結(jié)合上一步的改進方法,對于大小為N×N的濾波窗口最壞只需要N(N-1)/2+3(N-1)次比較就可以找到最小值、最大值和近似中值。由此可知,改進后算法第1步迭代計算的復雜度為O(N3)=N(N-1)(N+3)/2,第2至k步迭代計算的復雜度為O(N2)=N(N-1) /2+3(N-1)。當?shù)螖?shù)k遠大于1時,改進后算法最差平均復雜度為O(N2)。而傳統(tǒng)中值濾波的復雜度為O(N4)=N2(N2-1)/2??梢?,改進后的算法復雜度由O(N4)降低到了O(N2),大大降低了運算量。以大小為5×5的濾波窗口為例,Y(i,j+1)最壞只需要進行3×(5-1)+5×(5-1)/2=22次比較即可得到最小值、最大值和近似中值。相對于傳統(tǒng)中值濾波的25(25-1)/2=300,改進后的算法把比較次數(shù)減小到原來的1/13左右,且窗口越大越能體現(xiàn)出該改進方法的優(yōu)勢。
通過上述改進后,可以快速找到窗口內(nèi)的最小值、最大值和近似中值。接著,借用文獻[10]中提到的IMF算法思想對窗口的像素點的灰度值做加權平均,目的是使濾波器對高斯噪聲也有一定的濾波效果。假設濾波窗口大小為N×N,對像素點(m,n)進行濾波。先用上文改進后的方法找到窗口內(nèi)的最小值amin、最大值amax和近似中值amed,然后計算出窗口內(nèi)各像素灰度值a(i,j)與amed的方差D(i,j),接著使用如下公式計算各像素點灰度的權重r(i,j)
(7)
最后的濾波輸出為

(8)
經(jīng)過上述改進后的自適應中值濾波結(jié)合了均值濾波的優(yōu)點,在加權求和時像素點的灰度值與中值相差越大,其權重越小,這樣不僅可以濾去椒鹽噪聲,還可以抑制高斯噪聲。
改進后的自適應中值濾波具體實施步驟如下:
步驟1 設濾波窗口大小為w=3;
步驟2 按改進后的方法計算當前窗口內(nèi)灰度值的最小值amin、最大值amax和近似中值amed;