sobel邊緣檢測演算法
索貝爾運算元(
sobel operator
)主要用作邊緣檢測,
在技術上,它是一離散性差分運算元,用來運算影象亮度函式的灰度之近似值。在影象的任何一點使用此運算元,將會產生對應的灰度向量或是其法向量
sobel
卷積因子為:
該運算元包含兩組
3x3的矩陣,分別為橫向及縱向,將之與影象作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。如果以
a代表原始影象,gx及
gy分別代表經橫向及縱向邊緣檢測的影象灰度值,其公式如下:
具體計算如下:
gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)
+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)
+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)
= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]
gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)
+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)
+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)
= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]
其中f(a,b),
表示影象
(a,b)
點的灰度值;
影象的每乙個畫素的橫向及縱向灰度值通過以下公式結合,來計算該點灰度的大小:
通常,為了提高效率
使用不開平方的近似值:
如果梯度
g大於某一閥值
則認為該點
(x,y)
為邊緣點。
然後可用以下公式計算梯度方向:
sobel
運算元根據畫素點上下、左右鄰點灰度加權差,在邊緣處達到極值這一現象檢測邊緣。對雜訊具有平滑作用,提供較為精確的邊緣方向資訊,邊緣定位精度不夠高。當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。
附帶知識:
普利維特運算元
(prewitt operate)
: 除
sobel
邊緣檢測外
還有prewitt
運算元,它的卷積因子如下:
其他計算
和sobel
差不多;
prewitt
運算元利用畫素點上下、左右鄰點灰度差,在邊緣處達到極值檢測邊緣。對雜訊具有平滑作用,定位精度不夠高。
羅伯茨交叉邊緣檢測(
roberts cross operator
)卷積因子如下:
灰度公式為:
近似公式為:
具體計算如下:
g(x,y)=abs(f(x,y)-f(x+1,y+1))+abs(f(x,y+1)-f(x+1,y))
灰度方向
計算公式為:
roberts
運算元採用對角線方向相鄰兩畫素之差近似梯度幅值檢測邊緣。檢測水平和垂直邊緣的效果好於斜向邊緣,定位精度高,對雜訊敏感
其他邊緣檢測技術:
Sobel邊緣檢測
sobel運算元 1 0 1 2 0 2 1 0 1 用此運算元與原影象做卷積,可以檢測出垂直方向的邊緣。運算元作用在影象的第二列,結果是 200,200,200 作用在第三列,結果是 200,200,200 對當前列左右兩側的元素進行差分,由於邊緣的值明顯小於 或大於 周邊畫素,所以邊緣的差分結果...
邊緣檢測 Sobel運算元
依賴opencv來做一些資料結構和顯示的工作,但主要的計算法部分是自己實現的。後面爭取依次給出常見的集中邊緣提取的演算法實現。下次補上原理推到說明。sobel.cpp 定義控制台應用程式的入口點。include stdafx.h include cv.h include highgui.h incl...
halcon sobel邊緣檢測sobel amp
sobel amp 使用sobel運算元檢測邊緣 幅度 sobel amp 邊緣影象 濾波器方式,掩膜大小 sobel amp計算影象的一階導數,並用作邊緣檢測器。過濾器基於以下過濾器掩碼 a 1 2 1 0 0 0 1 2 1 b 1 0 1 2 0 2 1 0 1 根據所選的過濾器型別,這些掩碼...