簡單說明影像中 edge detection 的原理,以及 Sobel Operator 在 edge detection 的應用。

要用什麼方法才能偵測出影像中的 edge?


首先,可以注意到上圖中被標示為 edge 的部分,可以看到像素灰階值有明顯的變化,要將該變化的大小以數字來表示,可以利用求 導數(derivative) 的方式,如果該區域的 gradient 變化很大,則表示該區域的灰階值有較大的變化。

以一維的影像舉例來說,如果圖中有 edge,則 edge 的灰階值變化會有一個 jump 的情況:


如果求上述的灰階值的導數,則 jump 的情況可以被輕易判斷出來 (會是一個區域極大值):


依上述理論,可以推導出在如果影像中的某個像素是 edge,則其 gradient 會大於其鄰近的像素(,通常會再以 threshold 來作判斷)。

而 Sobel Operator 包含 Gaussian smoothing 跟 differentiation,因此它可以用來計算影像中各像素灰階值的 gradient,所以影像在經過 Sobel Operator 之後,edge 區域部分的值,會較平滑區域部分的值較為大。。

假設以 I 表示影像的灰階值,則可以 Sobel Operator 計算影像的兩種 derivative:

Horizontal changes 可以由 I 與 Sobel Operator 作 convolution 求得 (以 kernel size 為 3 舉例):


Vertical changes 可以由 I 與 Sobel Operator 作 convolution 求得 (以 kernel size 為 3 舉例):


對每個點來說,計算其 gradient 的方法為:
G = sqrt(Gx2 + Gy2)
如果為了計算速度,也可以改用較簡單的方式:
G = |Gx| + |Gy|

程式執行範例 - 原圖:


Horizontal changes:


Vertical changes:


gradient :





Reference

Sobel Derivatives

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知,謝謝。
創作者介紹

拾人牙慧點滴

silverwind1982 發表在 痞客邦 PIXNET 留言(0) 人氣()