sobel算子原理_sobel算子計(jì)算梯度_邊緣檢測(cè)之Sobel檢測(cè)算子
本文關(guān)鍵詞:sobel算子,由筆耕文化傳播整理發(fā)布。
標(biāo)簽:des 算法 class style src 使用 方法 com 在討論邊緣算子之前,首先給出一些術(shù)語的定義: (1)邊緣:灰度或結(jié)構(gòu)等信息的突變處,邊緣是一個(gè)區(qū)域的結(jié)束,也是另一個(gè)區(qū)域的開始,利用該特征可以分割圖像。 (2)邊緣點(diǎn):圖像中具有坐標(biāo)[x,y],且處在強(qiáng)度顯著變化的位置上的點(diǎn)。 (3)邊緣段:對(duì)應(yīng)于邊緣點(diǎn)坐標(biāo)[x,y]及其方位 ,邊緣的方位可能是梯度角。 二、sobel算子的基本原理 sobel算子是一階導(dǎo)數(shù)的邊緣檢測(cè)算子,在算法實(shí)現(xiàn)過程中,通過3×3模板作為核與圖像中的每個(gè)像素點(diǎn)做卷積和運(yùn)算,然后選取合適的閾值以提取邊緣。 一個(gè)特殊卷積所實(shí)現(xiàn)的功能是由卷積核的形式?jīng)Q定的。這個(gè)核本質(zhì)上是一個(gè)大小固定、由數(shù)值參數(shù)構(gòu)成的數(shù)組,數(shù)組的參考點(diǎn)(anchor point)通常位于數(shù)組的中心。數(shù)組的大小成為核支撐。單就技術(shù)而言,核支撐實(shí)際上僅僅由核數(shù)組的非0部分組成。對(duì)圖像的卷積,首先將核的參考點(diǎn)定位到圖像的第一個(gè)像素點(diǎn),核的其余元素覆蓋圖像中其相對(duì)應(yīng)的局部像素點(diǎn)。對(duì)于每一個(gè)核點(diǎn),我們可以得到這個(gè)點(diǎn)的核值以及圖像中相應(yīng)圖像點(diǎn)的值,將這些值相乘并求和,并將這個(gè)結(jié)果放在與輸入圖像參考點(diǎn)所相對(duì)應(yīng)的位置。通過在整個(gè)圖像上掃描卷積核,對(duì)圖像的每個(gè)點(diǎn)重復(fù)此操作。 索貝爾算子(Sobel operator)主要用作邊緣檢測(cè),在技術(shù)上,它是一階離散性差分算子,用來運(yùn)算圖像亮度函數(shù)的灰度值近似值。在圖像的任何一點(diǎn)使用此算子,將會(huì)產(chǎn)生對(duì)應(yīng)的灰度矢量或是其法矢量。 Sobel卷積因子為:
該算子包含兩組3x3的矩陣,分別為橫向及縱向,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。如果以A代表原始圖像,,Gx及Gy分別代表經(jīng)橫向及縱向邊緣檢測(cè)的圖像灰度值,其公式如下:
具體計(jì)算如下:
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)點(diǎn)的灰度值;
圖像的每一個(gè)像素的橫向及縱向灰度值通過以下公式結(jié)合,來計(jì)算該點(diǎn)灰度的大。
通常,為了提高效率 使用不開平方的近似值:
如果梯度G大于某一閥值 則認(rèn)為該點(diǎn)(x,y)為邊緣點(diǎn)。
然后可用以下公式計(jì)算梯度方向:
sobel算子根據(jù)像素點(diǎn)上下、左右鄰點(diǎn)灰度加權(quán)差,在邊緣處達(dá)到極值這一現(xiàn)象檢測(cè)邊緣。對(duì)噪聲具有平滑作用,提供較為精確的邊緣方向信息,邊緣定位精度不夠高。當(dāng)對(duì)精度要求不是很高時(shí),是一種較為常用的邊緣檢測(cè)方法。
sobel算子算法的優(yōu)點(diǎn)是計(jì)算簡(jiǎn)單,速度快。但是由于只采用了2個(gè)方向的模板,只能檢測(cè)水平和垂直方向的邊緣,因此這種算法對(duì)于紋理較為復(fù)雜的圖像,其邊緣檢測(cè)效果就不是很理想。該算法認(rèn)為:凡灰度新值大于或等于閾值的像素點(diǎn)時(shí)都是邊緣點(diǎn)。這種判斷欠合理,會(huì)造成邊緣點(diǎn)的誤判,因?yàn)樵S多噪聲點(diǎn)的灰度值也很大。
1 #include <opencv2/opencv.hpp> main(int argc, char **argv) 4 { *ptrSrcImageWindowTitle = ; *ptrGrayImageWindowTitle = ; *ptrDesImageWindowTitle = ; IplImage *pSrcImage = cvLoadImage(, CV_LOAD_IMAGE_ANYCOLOR); 11 IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); 12 IplImage *pSobelImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY); 15 //進(jìn)行Sobel邊緣檢測(cè),注意xorder和yorder的不同,邊緣檢測(cè)的方向不同 cvSobel(pGrayImage, pSobelImage, 1, 0, 3); 18 19 cvNamedWindow(ptrSrcImageWindowTitle, CV_WINDOW_AUTOSIZE); 20 cvNamedWindow(ptrGrayImageWindowTitle, CV_WINDOW_AUTOSIZE); 21 cvNamedWindow(ptrDesImageWindowTitle, CV_WINDOW_AUTOSIZE); 22 23 cvShowImage(ptrSrcImageWindowTitle, pSrcImage); 24 cvShowImage(ptrGrayImageWindowTitle, pGrayImage); 25 cvShowImage(ptrDesImageWindowTitle, pSobelImage); 26 27 cvWaitKey(0); 28 cvReleaseImage(&pSrcImage); 29 cvReleaseImage(&pGrayImage); 30 cvReleaseImage(&pSobelImage); 31 32 cvDestroyWindow(ptrSrcImageWindowTitle); 33 cvDestroyWindow(ptrGrayImageWindowTitle); 34 cvDestroyWindow(ptrDesImageWindowTitle); 35 36 }
附帶知識(shí):
普利維特算子(Prewitt operate):
除sobel邊緣檢測(cè)外 還有Prewitt算子, 它的卷積因子如下:
其他計(jì)算 和sobel差不多;
Prewitt算子利用像素點(diǎn)上下、左右鄰點(diǎn)灰度差,在邊緣處達(dá)到極值檢測(cè)邊緣。對(duì)噪聲具有平滑作用,定位精度不夠高。
羅伯茨交叉邊緣檢測(cè)(Roberts Cross operator)
卷積因子如下:
灰度公式為:
近似公式為:
具體計(jì)算如下:
G(x,y)=abs(f(x,y)-f(x+1,y+1))+abs(f(x,y+1)-f(x+1,y))
灰度方向 計(jì)算公式為:
Roberts算子采用對(duì)角線方向相鄰兩像素之差近似梯度幅值檢測(cè)邊緣。檢測(cè)水平和垂直邊緣的效果好于斜向邊緣,定位精度高,對(duì)噪聲敏感。
邊緣檢測(cè)之Sobel檢測(cè)算子,布布扣,bubuko.com
邊緣檢測(cè)之Sobel檢測(cè)算子
標(biāo)簽:des 算法 class style src 使用 方法 com
原文:
本文關(guān)鍵詞:sobel算子,由筆耕文化傳播整理發(fā)布。
本文編號(hào):64864
本文鏈接:http://sikaile.net/wenshubaike/shangbiaozhuanli/64864.html