數字圖像 - 邊緣檢測原理 - Sobel, Laplace, Canny算子

先來看張圖,左邊是原圖,右邊是邊緣檢測后的圖,邊緣檢測就是檢測出圖像上的邊緣信息,右圖用白色的程度表示邊緣的深淺。

sobel.png

邊緣其實就是圖像上灰度級變化很快的點的集合。
如何計算出這些變化率很快的點?

1.導數,連續函數上某點斜率,導數越大表示變化率越大,變化率越大的地方就越是“邊緣”,但是在計算機中不常用,因為在斜率90度的地方,導數無窮大,計算機很難表示這些無窮大的東西。

2.微分,連續函數上x變化了dx,導致y變化了dy,dy值越大表示變化的越大,那么計算整幅圖像的微分,dy的大小就是邊緣的強弱了。
微分與導數的關系:dy = f '(x) dx

舉個例子:

在連續函數里叫微分,因為圖像是離散的,叫差分,和微分是一個意思,也是求變化率。
差分的定義,f '(x) = f(x + 1) - f(x),用后一項減前一項。
按先后排列 -f(x) + f(x + 1)
提出系數 [-1, 1] 作為濾波模板,跟原圖 f(x) 做卷積運算就可以檢測邊緣了

模板為什么要是奇數的?

因為模板是偶數的話,卷積出來的結果應該是放在中間的,不方便表示。
例如:圖像 [10, 20, 30] 跟 [-1, 1] 卷積后的值,應該放在圖像 10 跟 20 中間的位置,就是應該放在 0 和 1 號位置的中間,也就是 0.5 號位,但是圖像是離散的,中間沒得放,只能放在 0 號位,也就是 10 的位置,就偏差了 0.5 的位置,為了方便處理,濾波模板一般都是奇數個的,3,5,7 個的。

Sobel 邊緣檢測算子

所以用 f '(x) = f(x + 1) - f(x - 1) 近似計算一階差分。

排好序:[-1 * f(x-1),0 * f(x),1 * f(x+1)]
提出系數:[-1, 0, 1]

所以模板 [-1, 1] 被改造成了 [-1, 0, 1]
二維情況下就是

-1, 0, 1
-1, 0, 1
-1, 0, 1

這個就是 Prewitt 邊緣檢測算子了。

f(x-1, y-1),  f(x, y-1),  f(x+1, y-1)
f(x-1, y),    f(x, y),    f(x+1, y)
f(x-1, y+1),  f(x, y+1),  f(x+1, y+1)

中心點 f(x, y) 是重點考慮的,它的權重應該多一些,所以改進成下面這樣的

-1, 0, 1
-2, 0, 2
-1, 0, 1

這就是 Sobel 邊緣檢測算子,偏 x 方向的。(類似二元函數的偏導數,偏x,偏y)
同理可得

-1, -2, -1
 0,  0,  0
 1,  2,  1

是 sobel 偏 y 方向的算子。

分別計算偏 x 方向的 Gx,偏 y 方向的 Gy,求絕對值,壓縮到 [0, 255]
區間,即 G(x, y) = Gx + Gy 就是 sobel 邊緣檢測后的圖像了

Laplace 邊緣檢測算子

拉普拉斯是用二階差分計算邊緣的,看連續函數的情況下
在一階微分圖中極大值或極小值處,認為是邊緣。
在二階微分圖中極大值和極小值之間的過 0 點,被認為是邊緣。

拉普拉斯算子推導:
一階差分:f '(x) = f(x) - f(x - 1)
二階差分:f '(x) = (f(x + 1) - f(x)) - (f(x) - f(x - 1))
化簡后:f '(x) = f(x - 1) - 2 f(x)) + f(x + 1)
提取前面的系數:[1, -2, 1]

二維的情況下,同理可得
f '(x, y) = -4 f(x, y) + f(x-1, y) + f(x+1, y) + f(x, y-1) + f(x, y+1)
提取各個系數,寫成模板的形式

0,  1, 0
1, -4, 1
0,  1, 0

考慮兩個斜對角的情況

1,  1, 1
1, -8, 1
1,  1, 1

這就是拉普拉斯算子,與原圖卷積運算即可求出邊緣。

Canny 邊緣檢測算子

canny計算過程
1.高斯濾波器平滑圖像。
2.一階差分偏導計算梯度值和方向。
3.對梯度值不是極大值的地方進行抑制。
4.用雙閾值連接圖上的聯通點。

通俗說一下,
1.用高斯濾波主要是去掉圖像上的噪聲。
2.計算一階差分,OpenCV 源碼中也是用 sobel 算子來算的。
3.算出來的梯度值,把不是極值的點,全部置0,去掉了大部分弱的邊緣。所以圖像邊緣會變細。
4.雙閾值 t1, t2, 是這樣的,t1 <= t2
大于 t2 的點肯定是邊緣
小于 t1 的點肯定不是邊緣
在 t1, t2 之間的點,通過已確定的邊緣點,發起8領域方向的搜索(廣搜),圖中可達的是邊緣,不可達的點不是邊緣。
最后得出 canny 邊緣圖。

三個算子區別

sobel 產生的邊緣有強弱,抗噪性好
laplace 對邊緣敏感,可能有些是噪聲的邊緣,也被算進來了
canny 產生的邊緣很細,可能就一個像素那么細,沒有強弱之分。

下面三張圖分別是 sobel,canny,laplace 結果圖。


sobel算子
canny算子
laplace算子
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 不同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 13,920評論 0 29
  • 1、閾值分割 1.1 簡介 圖像閾值化分割是一種傳統的最常用的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成...
    木夜溯閱讀 22,628評論 9 15
  • 前言 本文是關于OpenGL ES的系統性學習過程,記錄了自己在學習OpenGL ES時的收獲。這篇文章的目標是學...
    秦明Qinmin閱讀 3,935評論 1 13
  • 這篇文章總結比較全面:http://blog.csdn.net/timidsmile/article/detail...
    rogerwu1228閱讀 1,865評論 0 3
  • 1 沒想到我在簡書上分享的第一篇文章是關于考研失敗的話題。 雖然不想承認,但終歸一句話:我考研失敗了。 因為家里的...
    沙小年閱讀 468評論 8 4