在討論邊緣運算元之前,首先給出一些術語的定義:
(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附帶知識:普利維特運算元(prewitt operate):除sobel邊緣檢測外 還有prewitt運算元, 它的卷積因子如下:3int main(int argc, char **argv)
4
其他計算 和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...