邊緣檢測之Sobel檢測運算元

2021-07-17 02:16:35 字數 2418 閱讀 3366

在討論邊緣運算元之前,首先給出一些術語的定義:

(1)邊緣:灰度或結構等資訊的突變處,邊緣是乙個區域的結束,也是另乙個區域的開始,利用該特徵可以分割影象。

(2)邊緣點:影象中具有座標[x,y],且處在強度顯著變化的位置上的點。

(3)邊緣段:對應於邊緣點座標[x,y]及其方位 ,邊緣的方位可能是梯度角。

二、sobel運算元的基本原理

sobel運算元是一階導數的邊緣檢測運算元,在演算法實現過程中,通過3×3模板作為核與影象中的每個畫素點做卷積和運算,然後選取合適的閾值以提取邊緣。

乙個特殊卷積所實現的功能是由卷積核的形式決定的。這個核本質上是乙個大小固定、由數值引數構成的陣列,陣列的參考點(anchor point)通常位於陣列的中心。陣列的大小成為核支撐。單就技術而言,核支撐實際上僅僅由核陣列的非0部分組成。對影象的卷積,首先將核的參考點定位到影象的第乙個畫素點,核的其餘元素覆蓋影象中其相對應的區域性畫素點。對於每乙個核點,我們可以得到這個點的核值以及影象中相應影象點的值,將這些值相乘並求和,並將這個結果放在與輸入影象參考點所相對應的位置。通過在整個影象上掃瞄卷積核,對影象的每個點重複此操作。

索貝爾運算元(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運算元根據畫素點上下、左右鄰點灰度加權差,在邊緣處達到極值這一現象檢測邊緣。對雜訊具有平滑作用,提供較為精確的邊緣方向資訊,邊緣定位精度不夠高。當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。

sobel運算元演算法的優點是計算簡單,速度快。但是由於只採用了2個方向的模板,只能檢測水平和垂直方向的邊緣,因此這種演算法對於紋理較為複雜的影象,其邊緣檢測效果就不是很理想。該演算法認為:凡灰度新值大於或等於閾值的畫素點時都是邊緣點。這種判斷欠合理,會造成邊緣點的誤判,因為許多雜訊點的灰度值也很大。

1 #include 2

3int main(int argc, char **argv)

4

附帶知識:普利維特運算元(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運算元採用對角線方向相鄰兩畫素之差近似梯度幅值檢測邊緣。檢測水平和垂直邊緣的效果好於斜向邊緣,定位精度高,對雜訊敏感。

imgproc模組 Sobel邊緣檢測運算元

1.目的 1 如何使用opencv函式sobel對影象求導數 2 如何使用opencv函式scharr對影象求導數 2.原理 1 影象邊緣 影象邊緣是影象畫素發生顯著變化的位置。使用卷積運算可以近似計算影象梯度,檢測影象邊緣,梯度值大意味影象內容發生顯著變化,可以認為該處為影象的邊緣處。2 sobe...

邊緣檢測 Sobel運算元

依賴opencv來做一些資料結構和顯示的工作,但主要的計算法部分是自己實現的。後面爭取依次給出常見的集中邊緣提取的演算法實現。下次補上原理推到說明。sobel.cpp 定義控制台應用程式的入口點。include stdafx.h include cv.h include highgui.h incl...

OpenCV 基本邊緣檢測運算元Sobel實現

簡要描述 sobel運算元主要用於獲得數字影象的一階梯度,常見的應用是邊緣檢測。原理運算元使用兩個3 3的矩陣 圖1 運算元使用兩個3 3的矩陣 圖1 去和原始作卷積,分別得到橫向 和縱向 的梯度值,如果梯度值大於某乙個閾值,則認為該點為邊緣點 圖1 卷積矩陣 圖2 卷積運算 影象直接卷積實現sob...