摘要:Sobel算子是圖像邊緣檢測中常用的方法之一,利用像素的左、右、上、下鄰域的灰度加權算法,根據在邊緣點處達到極值這一原理進行邊緣檢測。該方法不但產生較好的檢測效果,而且對噪聲具有平滑作用,可以提供較為精確的邊緣方向信息。本文提供了利用Sobel算子實現灰度圖像邊緣檢測的C++源程序。
關鍵詞:邊緣檢測;Sobel算子;梯度;噪聲
中圖分類號:TP183文獻標識碼:A文章編號:1009-3044(2008)15-20ppp-0c
Image Fringe Detection and Realization Based on Sobel Operator
SUN Hong-lin,LIAO Ji-wang
(Hunan Information College, Changsha 410200,China)
Abstract: Sobel operator is one of common Image fringe detection techniques, using image element's left and right, top and bottom neighborhood field's ash degree weighting algorithm, basing on the principle of reaching extremum at the fringe dot, we carry through fringe detection. The technique not only produces preferable detection effect, but also has the flatness effect on yawp and can offer exact fringe direction imformation. This paper offers C++ source program which realizes ash degree image fringe detection using Sobel operator
Key words: fringe detection; Sobel operator; grads; yawp
1 引言
邊緣是圖像最基本的特征。所謂邊緣是指圖像周圍像素灰度有階躍變化或屋頂狀變化的像素的集合,它存在于目標與背景、目標與目標、區域與區域、基元與基元之間。邊緣具有方向和幅度兩個特征,沿邊緣走向,像素值變化比較平緩;垂直于邊緣走向,像素值變化比較劇烈,可能呈現階躍狀,也可能呈現斜坡狀因此,邊緣可以分為兩種:一種為階躍性邊緣,它兩邊的像素灰度值有著明顯的不同;另一種為屋頂狀邊緣,它位于灰度值從增加到減少的變化轉折點。對于階躍性邊緣,二階方向導數在邊緣處呈零交叉;而對于屋頂狀邊緣,二階方向導數在邊緣處取極值。
邊緣檢測技術是圖像處理和計算機視覺等領域最基本的技術,如何快速、精確的提取圖像邊緣信息一直是國內外研究的熱點,然而邊緣檢測又是圖像處理中的一個難題。經典的邊緣檢測方法是對原始圖像中像素的某小鄰域來構造邊緣檢測算子。常用的邊緣檢測方法有Roberts算子、Sobel算子、Prewitt算子、Kirsch算子、LOG算子等。
2 Sobel算子特點分析
Sobel算子在求梯度之前,首先進行鄰域平均或加權平均,然后進行微分,就能抑制噪聲。Sobel 邊緣檢測算子使用兩個如下有向算子(一個水平的,一個是垂直的),每一個逼近一個偏導數:

△xf(x,y)
={f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)}-{f(x-1,y-1)+2f(x-1,y)+f(x-1,y+1)}
△yf(x,y)
={f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)}-{f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)}
如果用Sobel算子檢測圖像M的邊緣的話,可以先分別用水平算子和垂直算子對圖像進行卷積,得到的是兩個矩陣,在不考慮邊界的情形下也是和原圖像同樣大小的圖像M1,M2,他們分別表示圖像M中相同位置處的兩個偏導數。然后把M1,M2對應位置的兩個數平方后相加得到一個新的矩陣G,G表示M中各個像素的灰度的梯度值(一個逼近)。這樣就可以通過閾值處理得到邊緣圖像。
Sobel 算子利用像素的左、右、上、下鄰域的灰度加權算法,根據在邊緣點處達到極值這一原理進行邊緣檢測。該方法不但產生較好的檢測效果,而且對噪聲具有平滑作用,可以提供較為精確的邊緣方向信息。
3 Sobel算子實現灰度圖像邊緣檢測的函數源程序
void CDibView::OnMENUSobel()
{ HANDLE data1handle;
LPBITMAPINFOHEADER lpBi;
CDibDoc *pDoc=GetDocument();
HDIB hdib;
unsigned char *hData;
unsigned char *data;
hdib=pDoc->m_hDIB;
BeginWaitCursor();
lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
hData= lpbi +* (LPDWORD)lpbi + 256*sizeof(RGBQUAD);
//得到指向位圖像素值的指針
pDoc->SetModifiedFlag(TRUE);//設修改標志為\"TRUE\"
data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);
//申請存放處理后的像素值的緩沖區
data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);
AfxGetApp()->BeginWaitCursor();
int i,j,buf,buf1,buf2;
for( j=0; jbiHeight; j++)//以下循環求(x,y)位置的灰度值
for( i=0; ibiWidth; i++)
{
if(((i-1)>=0)((i+1)biWidth)((j-1)>=0)((j+1)biHeight))
{//對于圖像四周邊界處的向素點不處理
buf1=(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1))
+2*(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j))
+(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1));
buf1=buf1-(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1))
-2*(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j))
-(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1));
//x方向加權微分
buf2=(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1))
+2*(int)(int)*(hData+(i)*WIDTHBYTES(lpBi->biWidth*8)+(j+1))
+(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1));
buf2=buf2-(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1))
-2*(int)(int)*(hData+(i)*WIDTHBYTES(lpBi->biWidth*8)+(j-1))
-(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1));
//y方向加權微分
buf=abs(buf1)+abs(buf2);//求梯度
if(buf>255) buf=255;
if(buf<0){buf=0;
*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;
}
else *(data+i*lpBi->biWidth+j)=(BYTE)0;
}
for( j=0; jbiHeight; j++)
for( i=0; ibiWidth; i++)
*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);
//處理后的數據寫回原緩沖區
AfxGetApp()->EndWaitCursor();
GlobalUnlock((HGLOBAL)hdib);
GlobalUnlock(data1handle);
GlobalFree(date1handle);
EndWaitCursor();
Invalidate(TRUE);
}
4 實驗結果及討論
該圖像處理程序在Windows2000環境下編譯通過,圖1給出了對常用的Lena圖像依據圖像處理算法得到的圖像二值化、高通濾波、Sobel邊緣算子的處理結果,(c)圖是在進行Sobel算子處理后,又對它進行了二值化處理得到的。

從(b)可以看出,Soble 算子對噪聲有抑制作用,因此不會出現很多孤立的邊緣像素點;但Sobel算子對邊緣的定位不是很準確,圖像的邊界寬度往往不止一個像素。
參考文獻:
[1] 章毓晉.圖象工程[M].北京:清華大學出版社,1999.
[2] Health A., Sarkar S., Sanocki T., et al..Comparison of Edge Detectors: A Methodology and InitialStudy[J]. Computer Vision and Image Understanding,1998,69(1):38-54.
[3] 刑軍.基于Sobel算子數字圖像的邊緣檢測[J].微機發展,2005,15(9):48-52.
[4] 劉彩.一種改進的Sobel圖像邊緣檢測算法[J].貴州工業大學學報(自然科學版),2004,33(5):77-79.
收稿日期:2008-03-18
基金項目:湖南省教育廳資助科研項目(06D69)
作者簡介:孫洪淋(1971-),女,碩士,湖南信息職業技術學院講師,研究方向:智能控制、機器人視覺伺服控制。