2024年6月2日发(作者:)
Sobel算子及改进算法
一、Sobel边缘检测算子
在讨论边缘算子之前,首先给出一些术语的定义:
(1)边缘点:图像中具有坐标[i,j],且处在强度显著变化的位置上的点。
(2)边缘段:对应于边缘点坐标[i,j]及其方位 ,边缘的方位可能是梯度角。
(3)边缘检测器:从图像中抽取边缘(边缘点和边缘段)集合的算法。
(4)边缘跟踪:一个用来确定轮廊的图像(指滤波后的图像)搜索过程。
二、Sobel算子的基本原理
采用3×3邻域可以避免在像素之间内插点上计算梯度。Sobel算子也是一种梯度幅值,即:
其中的偏导数用下式计算:
Sx=(a
2
+ca
3
+a
4
)一(a
0
+ca
7
+a
6
)
Sy= (a
0
+ca
l
+a
2
)一(a
6
+ca
5
+a
4
)
其中常数c=2。和其他的梯度算子一样,Sx 和Sy可用卷积模板来实现(见图2)
。
-1
-2
-1
0
0
0
1
2
1
1
0
-1
2
0
-2
1
0
-1
Sx
Sy
图2 卷积模板
这一算子把重点放在接近于模板中心的像素点图2和图3表明了这一算子的作用。Sobel算子是边
缘检中最常用的算子之一。
a0
a7
a6
al a2
a
3
a4
[i,j]
a5
图3用于说明Sobel算子的邻域像素点标记
算法的基本原理:由于图像边缘附近的亮度变化比较大,所以可以把那些在邻域内灰度超过某
个值的像素点当作边缘点。
算法的主要步骤:
1)分别将2个方向模板沿着图像从一个像素移动到另一个像素,并将像素的中心与图像中的某
个像素位置重合;
2)将模板内的系数与其图像上相对应的像素值相乘;
3)将所有相乘的值相加;
4)将2个卷积的最大值。赋给图像中对应模板中心位置的像素,作为该像素新的灰度值;
5)选取合适的阈值TH,若新像素灰度值≥TH,则判读该像素点为图像边缘点。
三、Sobel算子图像边缘检测的MATLB程序实现及仿真
>> f=imread('');
>> 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度角图像边缘检测');%显示边缘检测图像
>>
原始图像


发布评论