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度角图像边缘检测');%显示边缘检测图像

>>

原始图像