SOBEL算子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sobel算子及改进算法
一、Sobel边缘检测算子
在讨论边缘算子之前,首先给出一些术语的定义:
(1)边缘点:图像中具有坐标[i,j],且处在强度显著变化的位置上的点。
(2)边缘段:对应于边缘点坐标[i,j]及其方位,边缘的方位可能是梯度角。
(3)边缘检测器:从图像中抽取边缘(边缘点和边缘段)集合的算法。
(4)边缘跟踪:一个用来确定轮廊的图像(指滤波后的图像)搜索过程。
二、Sobel算子的基本原理
采用3×3邻域可以避免在像素之间内插点上计算梯度。
Sobel算子也是一种梯度幅值,即:
其中的偏导数用下式计算:
Sx=(a2+ca3+a4)一(a0+ca7+a6)
Sy= (a0+ca l+a2)一(a6+ca5+a4)
其中常数c=2。
和其他的梯度算子一样,Sx 和Sy可用卷积模板来实现(见图2)。
图2 卷积模板
这一算子把重点放在接近于模板中心的像素点图2和图3表明了这一算子的作用。
Sobel算子是边
缘检中最常用的算子之一。
图3用于说明Sobel算子的邻域像素点标记
算法的基本原理:由于图像边缘附近的亮度变化比较大,所以可以把那些在邻域内灰度超过某
个值的像素点当作边缘点。
算法的主要步骤:
1)分别将2个方向模板沿着图像从一个像素移动到另一个像素,并将像素的中心与图像中的某个像素位置重合;
2)将模板内的系数与其图像上相对应的像素值相乘;
3)将所有相乘的值相加;
4)将2个卷积的最大值。
赋给图像中对应模板中心位置的像素,作为该像素新的灰度值;
5)选取合适的阈值TH,若新像素灰度值≥TH,则判读该像素点为图像边缘点。
三、Sobel算子图像边缘检测的MATLB程序实现及仿真
>> f=imread('peppers.png');
>> f=rgb2gray(f);
>> f=im2double(f);%使用垂直Sobel算子,自动选择阈值
>> [VSFAT Threshold]=edge(f,'sobel','vertical');%边缘检测
>>figure,imshow(f),title('原始图像');%显示原始图像
>> figure,imshow(VSFAT),title('垂直图像边缘检测');%显示边缘检测图像
>> s45=[-2 -1 0;-1 0 1;0 1 2];%使用指定45度角Sobel算子滤波器,指定阈值
>>FST45=imfilter(f,s45,'replicate');
>>SFST45=SFST45>=Threshold;
>> figure,imshow(SFST45),title('45度角图像边缘检测');%显示边缘检测图像
>>
原始图像
垂直边缘检测图像
45度角边缘检测图像
本实验中使用Sobel算子在3个方向进行了图像边缘检测,从程序运行结果可以看出,45度角Sobel算子生成的边缘检测图像呈现出浮雕效果,水平和垂直Sobel算子检测出的边缘多于单个方向上检测出的边缘。
Sobel算子利用像素的上、下、左、右邻域的灰度加权算法,根据在边缘点处达到极值这一原理进行边缘检测。
该方法不但产生较好的检测效果,而且对噪声具有平滑作用,可以提供较为精确的边缘方向信息。
但是,在抗噪声好的同时也存在检测到伪边缘,定位精度不高的缺点。
四、Sobel的改进算法
1、方向模板的改变
因为图像目标的边缘是灰度不连续性的反映,边缘的种类可以粗略地区分为以下2类:1)阶跃性边缘,它两边的像素点灰度值显著不同。
2)屋顶状边缘,它位于灰度值从增加到减少的变化转折点。
为了能够更准确地描述出图像缘点,减少噪声对检测结果的影响,提高算子的抗噪能力,重新构造了4个5×5大小的模板,模板中各个位置的权重是由该位置到中心点的距离以及该位置在模板中所
在的方位决定的,等距离的点,具有相同的权重,如图4和图5所示。
在本文的算法中,我们选用有最高输出模板所对应边缘梯度值来作为像元的边缘梯度强度。
2、边缘的细化处理
图像的边缘中包含了图像的大量信息。
但是由上述模板计算出来的值仅仅是图像对应的梯度图像,边缘出现在梯度值较大的地方,若想提取图像的边缘必须设定阈值将其二值化。
图 4 边缘检测的4个方向
x 水平方向 y 垂直方向
45°方向 135°方向
图5
由一阶梯度算子得到图像的梯度图像。
一般来说,其边缘较粗。
若直接对梯度图像设定阈值进行二值化,很难找到合适的阈值,使得检测出来的边缘达到要求,这不便于边缘连接与边缘特征提取等后期处理。
因此在对图像梯度图像进行二值化前,有必要对所检测出来的梯度边缘进行细化处理。
在图像梯度图中,对于前景与背景区域内部,由于灰度值接近,因此这些区域对应梯度值很小。
图像的边缘处梯度值较大,但是边缘的梯度值并非图像中目标的真正边缘。
梯度一般呈现屋顶状,如图3所示。
为了说明方便,我们将其分为3个区域:“亮”区域、“灰色”区域和“暗”区域。
图像中目标的真正边缘应该位于“屋顶”像素“亮”区域处,也即边缘处梯度灰度值最大,并具有一定的纹理方向;分布两边的“暗”区域分别对应着前景与背景;“灰色”区域带有一定的模糊性。
因此,边缘细化的难点就成为如何保留梯度图中灰度值较大的“亮”区域,而滤除那些过渡的“灰色”区域。
图6 梯度图以及边缘细化示意图
图6(c)中的曲线为图像边缘处的梯度分布曲线,该曲线在边缘处呈屋顶形状,所提取的边缘宽度志和阈值丁有关,每个阀值丁都对应一个边缘宽度志。
当选取合适的丁时就可以减小志,从而达到细化边缘的目的。
基于上述讨论,我们可以找出像素点(m,n)某个邻域中的最大值Max(m,n),根据Max(m,n)来局部设定阈值,如图6(c)所示。
按照该点梯度值与阈值的关系对该点进行取舍,这样就能达到将梯度图细化的目的。
计算式如下:
式中:grade(m,n)为像素点(m,n)对应的梯度值;Max(m,n)为(m,n)点8邻域最大梯度值;a为控制因子,O<a<1,通过选取不同的a值.可以控制边缘的宽度志。
实验表明n取O.7~O.9时,,二值化的边缘图像宽度可达到l~2个像素.这不但突出了图像的边缘。
达到边缘细化的目的,而且有增强边缘的效果,便于二值化的边阈值的选取。
梯度图中,阈值我们使用固定阈值来对图像二值化。
在灰度图像中,背景与前景所占的统计权重一般来说比较大,因此在梯度图的直方图中,大部分的梯度值集中在低梯度区域,而真正的边缘位于梯度值较大的地方,在直方图中表现为一个衰减曲线。
因此可以通过设定合适的阈值滤除非边缘区域来保留图像的边缘。
五、该算法的优点
1)由于本文算法在二值化前进行了细化处理,比经典Soble算子检测的边缘更加精细;
2)本文算法抗噪能力较强,并且它克服了sobel算子进行边缘检测存在边缘粗糙、对噪声敏感的缺点,具有提取的边缘精细、抗噪能力强等优点,是一种简单有效的边缘检测算法。