范 晞,費勝巍,儲有兵
(東華大學 機械工程學院,上海 201620)
圖像的最基本特征是邊緣,即像素灰度級的階梯變化或屋頂變化的像素點集合。目前,常用的邊緣提取算子大致分為兩類:一階差分邊緣檢測算子和二階微分邊緣檢測算子。常見的一階差分邊緣檢測算子主要包括Sobel算子、Prewitt算子和Roberts算子。二階微分邊緣檢測算子主要有LoG算子、Laplace算子等。在常見的邊緣檢測算子中,Laplace算子產生雙邊界,而其他算子如Sobel算子,會形成一個非封閉區域,且對噪聲敏感。
與傳統的微分算子相比,基于優化算法的Canny邊緣檢測算子由于具有信噪比大、檢測精度高的優點而得到了廣泛的應用,然而傳統的Canny算子在實際濾波過程中會造成邊緣模糊。許多學者對此進行了深入的研究,并提出了一些改進型的Canny算法。例如,文獻[1]用中值濾波替代高斯濾波;文獻[2]使用基于梯度方向的檢測方法替代雙閾值法;文獻[3]通過形態學來細化邊緣。在此提出的改進型算法使用雙邊濾波器代替傳統Canny算法中的高斯濾波器,可以在去除噪聲的同時保留更多邊緣信息,并增加了45°和135°兩個方向的梯度模板來計算梯度幅值,從而可以檢測到更多的邊緣,同時采用Curvelet變換增強圖像邊緣,減少假邊緣的產生。
Canny邊緣檢測算法是Canny[4]在1986年提出的一種多邊緣檢測算法,并給出了判斷邊緣檢測性能的3個標準:
信噪比標準主要作用是提高邊緣檢測的正確性,使得錯檢或者漏檢的邊緣錯誤率下降。
最佳定位標準目的是使標記得出的邊緣盡可能地接近圖像真正的邊緣,從而提高定位的精度。
單邊應答標準是為了確保在單個邊緣上只有一個像素應答,并最大程度地抑制假邊緣的應答。
步驟1高斯濾波器平滑圖像。傳統Canny算法采用高斯濾波器[5],利用其一階導數分別按行和列對原始圖像進行卷積處理,由此平滑圖像。

式中:σ為高斯函數的標準差,用于調節平滑程度;f(x,y)為原始圖像;I(x,y)為平滑圖像。
步驟2計算梯度的幅值和方向。采用2×2鄰域一階偏導的有限差分,計算I(x,y)的二維高斯函數 G(x,y)的梯度矢量▽G,即

根據高斯函數的可分離性,將梯度矢量的卷積模板分解為2個一維的行和列濾波器,即

將式(4)(5)分別與 f(x,y)卷積,得到

令

式中:A(i,j),?(i,j)分別為圖像上點(i, j)處的梯度幅值和方向角。
步驟3對梯度幅值應用非極大值抑制。在3×3的窗口范圍內插值像素。如圖1所示,將周圍像素分解為8個方向鄰域,并以A(i,j)為中心計算總共9個像素的梯度,并在梯度方向上插值結果。對于每個像素,A(i,j)與沿著梯度方向的2個梯度幅值進行比較。如果A(i,j)值小于在梯度方向上的2個插值結果,則 A(i,j)的邊緣被標記為0;如果 A(i,j)值大于等于在梯度方向上的2個插值結果,則A(i, j)的邊緣被納入候選對象。

圖1 像素點鄰域Fig.1 Pixel point neighborhood
步驟4用雙閾值算法檢測和連接邊緣。經非極大值抑制得到的結果,仍存在許多噪聲和假邊緣,需要進一步閾值處理,以消除假邊緣。通常的做法是確定1個高閾值Th和1個低閾值Tb,即在灰度直方圖中像素點個數沿梯度方向累加,當像素累加個數達到像素總個數的80%時,將該處的閾值設定為Th,Tb則為Th的 40%。
傳統Canny算法采用高斯函數濾波,在去除噪聲的同時會造成邊緣模糊,而且會丟失一些細節信息。針對這一問題,在此提出采用雙邊濾波代替高斯濾波,以達到增強保邊的目的,并增加45°和135°兩個方向的梯度模板,以確保檢測出更多的真實邊緣,再結合Curvelet變換增強圖像邊緣,減少假邊緣的產生。
Tomasi在1998年提出雙邊濾波算法[6]。雙邊濾波(Bilateral filter)是一種非線性的濾波方法,它結合了圖像的空間鄰近性和像素值的相似性,并考慮了空間信息和灰度的相似性,從而達到了保留邊緣和去噪的目的。它比高斯濾波器多了1個高斯方差sigma-d,其基于高斯濾波函數的空間分布,所以在邊緣附近,距離較遠的像素不會過多影響到邊緣上的像素值,這樣就確保了邊緣附近像素值的保存。
雙邊濾波的像素輸出值取決于鄰域像素值的加權組合,即:

式中:p(i,j)為像素輸出值; f(k,l)為像素輸入值;ω(i,j,k,l)為加權系數。
傳統的Canny算子在計算梯度時僅計算水平方向和垂直方向上的像素梯度值,從而導致邊緣像素丟失。為了能夠檢測更多的方向像素,在此提出在Sobel卷積的情況下,添加45°和135°兩個方向的梯度模板,如圖2所示。

圖2 四方向梯度模板Fig.2 Four-direction gradient template
圖中,4個方向的梯度模板分別為

式中:Qx為水平方向的梯度模板;Qy為垂直方向的梯度模板;Qxy為45°方向的梯度模板;Qyx為135°方向的梯度模板。
4個方向上的梯度分量 Ex,Ey,Exy,Eyx可以分別由 Qx,Qy,Qxy,Qyx卷積得到,則該像素點的梯度幅值E為

2002年文獻[7]給出第二代Curvelet變換,并在其基礎上提出了一種快速離散變換算法。Curvelet變換是基于傅里葉變換和小波變換的改進,它具有高度各向異性,并且具有很好的沿邊緣表達信息的能力,這對于恢復形狀的沿邊緣的主要結構和抑制周邊噪聲具有優勢。其過程如圖3所示。

圖3 Curvelet變換過程Fig.3 Curvelet transformation process
文獻[7]所提出的離散Curvelet變換有USFFT法和Wrapping法2種實現方法。在此采用了Wrapping法,其實現步驟如下:
步驟1笛卡爾坐標系中任意函數f的二維FFT 變換,得到 f[n1,n2],-n/2≤n1,n2≤n/2。
步驟2針對頻域中的尺度j和方向l參數,進行重采樣,得到 f[n1,n2-n1tanθl]。
步驟3將步驟2中的f與方形窗相乘,并在原點附近對 f[n1,n2]局部化。
步驟4利用二維快速傅里葉逆變換(IFFT),得到離散Curvelet變換系數集。
選用像素大小為512×512的Barbara圖像作為試驗對象,并加入1%的椒鹽噪聲,通過MatLab 2013a仿真軟件作為實驗平臺,傳統的Canny算子檢測效果如圖4所示,試驗中選取Th=120,sigma=1。由圖4(c)可見經過傳統Canny算子檢測圖像去噪的同時存在明顯的模糊邊緣。

圖4 傳統Canny算子檢測效果Fig.4 Traditional Canny operator detection effect
圖5為本文改進型Canny算子。由圖5(a)可以看出,在進行雙邊濾波后圖像保留了更多的邊緣信息,同時減少了噪聲的干擾。在sobel邊緣檢測中,增加2個方向的梯度幅值保留了更多的真實邊緣,接著進行的Curvelet變換將圖像分解為高頻子帶和低頻子帶。通過對高頻子帶進行非線性閾值去噪;對低頻子帶進行分段非線性增強,最后完成Curvelet逆變換以增強圖像邊緣。
圖5(d)為本文改進型Canny算法的檢測結果。對比傳統Canny算法,本文算法檢測的邊緣更加清晰和真實,同時具有較強的抗噪聲干擾檢測能力。

圖5 改進型Canny算子檢測效果Fig.5 Improved Canny operator detection effect
為了定性分析試驗效果,選取均值、方差、信息熵以及平均梯度作為衡量指標。方差能夠度量圖像灰度值分散程度,信息熵能夠度量圖像灰度值的一致性,平均梯度作為衡量圖像清晰程度的標準。評價參數見表1。
由表可知,高斯濾波后圖像的均值有所下降,表明圖像亮度改變較大;而雙邊濾波后的均值與原始圖像基本相同,圖像亮度基本不變。Cuevelet變換后的圖像均值略有下降,但圖像亮度基本與原始圖像一致。根據信息熵可看出,對雙邊濾波后的圖像進行Curvelet變換的圖像信息熵遠高于高斯濾波圖像。這表明本文改進型算法能夠最大程度地保持圖像灰度的一致性。由平均梯度可看出,Curvelet變換后圖像的平均梯度值最大,說明本文算法在保留邊緣細節信息上效果最佳。

表1 試驗結果評價參數Tab.1 Test result evaluation parameters
分析了傳統Canny邊緣檢測算子存在的不足之處,在此基礎上提出了一種改進型Canny邊緣檢測算子。試驗結果表明,該算法能夠有效地減少假邊緣的產生,保留更多的真實邊緣,提高了邊緣檢測的精確度。同時在抗噪聲干擾方面也優于傳統Canny算子。由對比試驗結果可以看出,本文算法為邊緣檢測提供了一種新思路。該算法尚存在一些問題,比如:增加2個方向的梯度幅值后,對于梯度模板的選取因人而異,其效果對于先驗知識依賴較大;在進行非極大值抑制時,對于高低閾值的選取,其自適應能力較差。對此有待于進行深入的研究。