邊緣檢測(Edge Detection)


文章首發:xmoon.info

邊緣提取

在大多數時候圖像的邊緣可以承載大部分的信息,並且提取邊緣可以除去很多干擾信息,提高處理數據的效率

目標:

識別圖像中的突然變化(不連續)

  • 圖像的大部分語義信息和形狀信息都可以編碼在邊緣上
  • 理想:藝術家使用線條勾勒畫(但藝術家也使用對象層次的知識)

邊緣的種類

  • 表面形狀的突變
  • 深度方向的不連續
  • 表面顏色的突變
  • 光線陰影的不連續

邊緣的特征

邊緣是圖像強度函數中快速變化的地方,變化的地方就存在梯度,對灰度值求導,導數為0的點即為邊界點

卷積的導數

  • 偏導數公式:

\[\frac {\partial f(x,y)}{\partial x} = \lim_{\varepsilon \rightarrow 0} \frac{f(x+\varepsilon ,y)-f(x,y)}{\varepsilon} \]

  • 在卷積中為描述數據,采取 近似化處理:

\[\frac {\partial f(x,y)}{\partial x} \approx \frac{f(x+1,y)-f(x,y)}{1} \]

顯然在x方向的導數就是與該像素自身與右邊相鄰像素的差值

卷積描述偏導

使用卷積核處理


對灰度圖的x和y方向分別處理后的效果如下圖:

有限差分濾波器(卷積核)

  • Roberts 算子
    Roberts 算子是一種最簡單的算子,是一種利用局部差分算子尋找邊緣的算子。他采用對角線方向相鄰兩象素之差近似梯度幅值檢測邊緣。檢測垂直邊緣的效果好於斜向邊緣,定位精度高,對噪聲敏感,無法抑制噪聲的影響。
    1963年, Roberts 提出了這種尋找邊緣的算子。 Roberts 邊緣算子是一個 2x2 的模版,采用的是對角方向相鄰的兩個像素之差。
    Roberts 算子的模板分為水平方向和垂直方向,如下所示,從其模板可以看出, Roberts 算子能較好的增強正負 45 度的圖像邊緣。

\[dx = \left[ \begin{matrix} -1 & 0\\ 0 & 1 \\ \end{matrix} \right] \]

\[dy = \left[ \begin{matrix} 0 & -1\\ 1 & 0 \\ \end{matrix} \right] \]

  • Prewitt算子
    Prewitt 算子是一種一階微分算子的邊緣檢測,利用像素點上下、左右鄰點的灰度差,在邊緣處達到極值檢測邊緣,去掉部分偽邊緣,對噪聲具有平滑作用。Prewitt算子適合用來識別噪聲較多、灰度漸變的圖像。

\[dx = \left[ \begin{matrix} 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1\\ \end{matrix} \right] \]

\[dy = \left[ \begin{matrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1\\ \end{matrix} \right] \]

  • Sobel算子
    Sobel算子是一種用於邊緣檢測的離散微分算子,它結合了高斯平滑和微分求導。Sobel 算子在 Prewitt 算子的基礎上增加了權重的概念,認為相鄰點的距離遠近對當前像素點的影響是不同的,距離越近的像素點對應當前像素的影響越大,從而實現圖像銳化並突出邊緣輪廓。

\[dx = \left[ \begin{matrix} 1 & 0 & -1\\ 2 & 0 & -2\\ 1 & 0 & -1\\ \end{matrix} \right] \]

\[dy = \left[ \begin{matrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1\\ \end{matrix} \right] \]

圖像梯度

\[\nabla f=[\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}] \]

  • 梯度指向強度增長最快的方向

  • 梯度的角度
    邊的方向與梯度方向垂直

\[\theta = tan^{-1} (\frac{\partial f}{\partial y}/\frac{\partial f}{\partial x}) \]

  • 梯度的模長(幅值)
    可以說明是邊緣的可能性大小

\[||\nabla f|| = \sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2} \]

  • 處理圖像后:

高斯濾波器

當圖像的像素存在大量噪點時,相鄰的像素差異大,所求梯度也會偏大,無法提取邊緣信息。

解決方案

  1. 平滑處理:使用平滑濾波器去噪,使圖像信號變得平滑

  2. 再對處理后的信號求導,取極值

  3. 根據卷積的計算性質:\(\frac{d}{dx}(f*g) = f*\frac{d}{dx}g\),先對平滑核求導,再進行卷積相乘來簡化運算,減少運算量

高斯濾波器

高斯濾波器的導數

參數選擇的越小則保留的細節越多

Candy 邊緣檢測

門限化

經過處理后,可以得到邊緣圖,但存在很多高頻噪點,通過設置更高的門限,過濾噪點,使得到的邊緣更“純粹”

非最大化抑制

在通過高斯濾波后可以得到圖像的大致輪廓線,由於圖像的像素變換通常是緩慢改變的, 在處理后的圖像中仍然存在大量的粗的“


方案

  1. 檢查像素是否沿梯度方向為局部最大值,選擇沿邊緣寬度的最大值作為邊緣
  2. 處理后

    經過上面的處理后,已經可以較為粗糙的得到圖像的邊緣圖,但仍然存在問題,在有些部分的邊 緣不連續,失去了很多信息如上圖的 黃色區域 ,這是由於在門限化的過程中,設置過小,導致將需要的邊緣濾除。

雙門限法

  1. 先使用高門限將較粗的邊檢測出來,這些邊都是比較魯棒的,是噪聲的可能性極低
  2. 再降低門限,將較細的邊顯現出來
  3. 將與高門限過濾出的邊連接的低門限邊保留,濾除沒有連接的(不連續的)噪聲

  1. 處理后可以得到更好的邊緣效果

學習資源:北京郵電大學計算機視覺——魯鵬


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM