1. 程式人生 > >數字影象處理筆記(十一):邊緣檢測演算法

數字影象處理筆記(十一):邊緣檢測演算法

1 - 引言

在影象識別中,如果可以將影象感興趣的物體或區別分割出來,無疑可以增加我們影象識別的準確率,傳統的數字影象處理中的分割方法多數基於灰度值的兩個基本性質

  • 不連續性、
    以灰度突變為基礎分割一副影象,比如影象的邊緣
  • 相似性
    根據一組預定義的準則將一副影象分割為相似的區域。閾值處理、區域生長、區域分裂和區域聚合都是這類方法的例子。

2 - 點、線和邊緣檢測基礎

雖然許多檢測演算法都被opencv封裝成函式可以直接呼叫,但是理解其背後的理論依據可以更好地幫助我們理解和改進演算法

2.1 背景知識

  1. 一階導數通常在影象中產生較粗的邊緣;
  2. 二階導數對精細細線,如細線、孤立點和噪聲有較強的響應;
  3. 二階導數在灰度斜坡和灰度臺階過渡出會產生雙邊響應;
  4. 二階導數的符號可以用於確定邊緣的過渡是從亮到暗還是從暗到亮

用於計算影象中每個畫素位置處的一階導數和二階導數可選擇方法是使用空間濾波器
R = w 1

z 1 + w 2 z 2
+ + w 9 z 9 = k = 1 9 w k z k R = w_1z_1+w_2z_2+\dots +w_9z_9=\sum_{k=1}^9w_kz_k

在這裡插入圖片描述

2.1 - 孤立點的檢測

點的檢測以二階導數為基礎。這意味可以著使用拉普拉斯模板(詳情見空間域濾波基礎

如果在某點該處模板的響應的絕對值超過了一個指定的閾值,那麼我們` 說在模板中心位置(x,y)處的該點已被檢測到了。在輸入影象中,這樣的點被標註為1,而所有其他點則被標註為0,從而產生一副二值影象。

g ( x , y ) = { 1 R ( x , y ) T 0  其他  g(x,y)=\begin{cases} 1& | R(x,y)| \geq T\\ 0 & \text{ 其他 } \end{cases}

其中,g是輸出影象,T是一個非負的閾值,R由上式給出。

2.2 - 線檢測

複雜度更高的檢測是線檢測,對於線檢測,可以預期二階導數將導致更強的響應,併產生比一階導數更細的線。這樣對於線檢測,我們也可以使用拉普拉斯模板,記住,二階導數的雙線效應必須做適當的處理。
在這裡插入圖片描述

2.4 邊緣模型

邊緣檢測是基於灰度突變來分割影象最常用的方法。我們從介紹一些邊緣建模的方法開始,然後討論一些邊緣檢測的方法。
在這裡插入圖片描述

實際中,數字影象都存在被模糊且帶有噪聲的邊緣,模糊程度主要取決於聚焦機理中的兼職,而噪聲水平主要取決於成像系統的電子元件。在這種情況下,邊緣被建模為一個更接近灰度斜坡的剖面。

在這裡插入圖片描述

並且我們可以得出結論:一階導數的幅度可用於檢測影象中的某個點是否存在一個邊緣,二階導數可以用於確定一個邊緣畫素位於該邊緣的暗的一側還是亮的一側。

那麼這是理想情況下的圖片邊緣,如果圖片有噪聲的話,其邊緣函式則為

在這裡插入圖片描述

微弱的可見噪聲對檢測邊緣所用的兩個關鍵導數的嚴重影響的這一事實,是我們應記住的一個重要問題。特別地,在類似於我們剛剛討論的水平的噪聲很可能存在的應用中,使用導數之前的影象平滑處理是應該認真考慮的問題。

因此邊緣檢測的三個基本步驟

  1. 為降噪對影象進行平滑處理
  2. 邊緣點的檢測
  3. 邊緣定位

2.4.1 - 基本的邊緣檢測運算元

Roberts運算元
Roberts運算元以求對角畫素之差為基礎,該運算元用於識別對角線方向的邊緣:
g x = ( z 9 z 5 ) g y = ( z 8 z 6 ) g_x=(z_9-z_5)和g_y=(z_8-z_6)
在這裡插入圖片描述

Prewitt運算元
Prewitt運算元使用以 z 5 z_5 為中心的3x3領域對 g x g_x g y g_y 的近似如下式所示
g x = ( z 7 + z 8 + z 9 ) ( z 1 + z 2 + z 3 ) g_x=(z_7+z_8+z_9)-(z_1+z_2+z_3)
g y = ( z 3 + z 6 + z 9 ) ( z 1 + z 4 + z 7 ) g_y=(z_3+z_6+z_9)-(z_1+z_4+z_7)
模板如下圖:
在這裡插入圖片描述

Sobel運算元
Sobel運算元使用以 z 5 z_5 為中心的3x3領域對 g x g_x g y g_y 的近似如下式所示:
g x = ( z 7 + 2 z 8 + z 9 ) ( z 1 + 2 z 2 + z 3 ) g_x=(z_7+2z_8+z_9)-(z_1+2z_2+z_3)
g y = ( z 3 + 2 z 6 + z 9 ) ( z 1 + 2 z 4 + z 7 ) g_y=(z_3+2z_6+z_9)-(z_1+2_z4+z_7)

Sobel模板能較好地抑制(平滑)噪聲地特性使得它更為可取,因為在處理導數時噪聲抑制是一個重要地問題。 在這裡插入圖片描述

檢測