傳統(tǒng)的Canny邊緣檢測算法是一種有效而又相對簡單的算法,可以得到很好的結(jié)果。但是Canny算法本身也有一些缺陷,可以有改進(jìn)的地方。
1. Canny邊緣檢測第一步用高斯模糊來去掉噪聲,但是同時也會平滑邊緣,使得邊緣信息減弱,有可能使得在后面的步驟中漏掉一些需要的邊緣,特別是弱邊緣和孤立的邊緣,可能在雙閥值和聯(lián)通計算中被剔除。很自然地可以預(yù)見,如果加大高斯模糊的半徑,對噪聲的平滑力度加大,但也會使得最后得到的邊緣圖中的邊緣明顯減少。這里依然用Lena圖為例,保持Canny算法中高閥值 100 ,低閥值 50 不變,高斯半徑分別為 2,3,5 的Canny邊緣二值圖像如下??芍咚鼓:押芏嘤杏玫倪吘壭畔⒁材:袅?,因此如何精確的選擇高斯半徑就相當(dāng)重要。
高斯半徑2
高斯半徑3
高斯半徑5
2. 在最初的Canny算法中是使用的最小的 2 x 2 領(lǐng)域來計算梯度幅值的。這種方法對噪聲很敏感,比較容易檢測到偽邊緣或漏掉真是邊緣。
3. 傳統(tǒng)Canny算法的雙閥值是全局固定的,因此雙閥值大小的選取對最終的結(jié)果影響很大,也有一些經(jīng)驗,比如選擇低閥值是高閥值的 0.4 或 0.5 。然而這畢竟是一種經(jīng)驗選擇,閥值的確定仍然很難決定一個最優(yōu)值。而且一個圖像的不同局部區(qū)域可能需要各不相同的閥值來精確地找到真實邊緣,因此全局閥值就不太合適了。
4. 傳統(tǒng)算法仍然可能產(chǎn)生一條寬度大于 1 的邊緣,達(dá)不到滿意的高精度單點響應(yīng)。也就是需要繼續(xù)細(xì)化邊緣。
下面就一些可以改進(jìn)的地方做一些討論。
代替高斯模糊
噪聲是高頻信號,邊緣信號也屬于高頻信號。既然高斯模糊不加區(qū)分的對所有的高頻信息進(jìn)行了模糊,效果自然不盡如人意。那么自然就想到了帶有保留邊緣功能的各種選擇性平滑方法,似乎在這里比高斯模糊會更加合適,那我們就來試一試。帶有保留邊緣功能的平滑方法的基本思想不是讓領(lǐng)域范圍內(nèi)的所有像素都參與該種平滑方法的計算,而是設(shè)定一個閥值,僅僅讓和中心像素灰度的差值小于這個閥值的像素參與計算。這樣和中心像素相差過大的像素被認(rèn)為是帶有有效的信息,而不是噪聲,不會參與平滑計算,從而保留了這些有用的高頻信號,那么邊緣信號自然也在保留的范圍。具體的算法可以參考這篇文章http://www.cnblogs.com/Imageshop/p/4694540.html,已經(jīng)講得很清楚了。無論是均值平滑,中值平滑,表面模糊,都可以參考這種算法來實現(xiàn)選擇性模糊。
應(yīng)用有保留邊緣的選擇性模糊來代替高斯模糊后,可以發(fā)現(xiàn),模糊領(lǐng)域的半徑值基本影響不了Canny檢測的結(jié)果,最后的結(jié)果只跟選擇模糊設(shè)定的閥值有關(guān)。下面以均值模糊為例,Canny檢測的高閥值 100 低閥值 50 不變,均值模糊閥值 30 ,不同模糊半徑的結(jié)果。在均值模糊閥值不變的情況下,不同領(lǐng)域半徑下,最后的結(jié)果差別不大。
均值模糊半徑2,閥值30
均值模糊半徑5,閥值30
均值模糊半徑15,閥值30
均值模糊半徑5,閥值40
均值模糊半徑5,閥值50
相對于高斯模糊,在相同半徑下,可以看出應(yīng)用有保留邊緣功能的選擇性模糊,明顯能保留了更多的邊緣細(xì)節(jié),使得很多相對較弱的邊緣得意保留下來了。我另外還實驗了選擇性的中值模糊,表面模糊,他們和選擇性的均值模糊都能達(dá)到類似的效果。這里就不一一列舉結(jié)果了。其中選擇性的表面模糊,因為中心像素的權(quán)重高,最后Canny檢測結(jié)果在參數(shù)相同的情況下,保留的邊緣相對較多一些。總的來說,應(yīng)用有保留邊緣功能的選擇性模糊來代替高斯模糊,參數(shù)的選擇(領(lǐng)域半徑和閥值門限)不像高斯模糊半徑參數(shù)選擇那么嚴(yán)格,所以檢測結(jié)果更穩(wěn)定一些。但是參數(shù)要多了一個。
梯度算子選擇
對于算法中梯度的計算,梯度算子可以有多種選擇。我試了一下,如果用一階梯度算子,Robert交叉算子,他們都是 2 x 2 的算子,來代替Sobel,保持高斯模糊半徑 2,高閥值 100 低閥值 50 不變,結(jié)果如下。要注意的是,由于一階梯度算子和Robert算子都是 2 x 2 的算子,他們算出來的梯度在幅度上都要小于Sobel算子。即使用同樣的高低閥值,最后的結(jié)果也不具有可比性。因此,參照Sobel算子的幅度,2 x 2 算子的 x,y 方向梯度都乘以相應(yīng)地倍數(shù)(4倍),最后進(jìn)行比較。
一階差分Canny二值圖
Robert交叉梯度Canny二值圖
Sobel算子Canny二值圖
可以看到,一階差分最后的結(jié)果在邊緣的連通性上是最差的,Robert算子要好一些,Sobel算子最好。在這幾種選擇當(dāng)中,似乎Sobel算子是最好的選擇。另外還可以使用Prewitt算子和 5 x 5 Sobel算子。Prewitt算子也是 3 x 3 的,僅僅參數(shù)不同,在平滑性能上略微不如Sobel算子。一般來說,比如在Lena圖上,Canny邊緣結(jié)果和用Sobel算子的結(jié)果差別不大。5x5Sobel算子在平滑性能上要更強一些。
-
算法
+關(guān)注
關(guān)注
23文章
4613瀏覽量
92957 -
邊緣檢測
+關(guān)注
關(guān)注
0文章
92瀏覽量
18213 -
Canny
+關(guān)注
關(guān)注
0文章
14瀏覽量
9709
原文標(biāo)題:Canny邊緣檢測算法的一些改進(jìn)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論