基于Sobel算子图像边缘检测的MATLAB实现

MATLAB的edge函数只能处理灰度图或者黑白图(或者说imread之后得到的矩阵是个二维矩阵),而对RGB的真彩图是没法处理的,当然,也可以通过把RGB图先转化成灰度图再进行边缘检测。edge函数的输入参数就是imread之后的二维矩阵,和指示的字符串和限定方法的一些数值参数。edge函数支持六种经典边缘检测方法,分别是Sobel MethodPrewitt MethodRoberts MethodLaplacian of Gaussian MethodZero-cross MethodCanny Method。至于具体算法,我就不清楚了,这里只给出matlab的实现方法:

源程序如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
f=imread('1.jpg');
f=rgb2gray(f);
%转化成灰度图
f=im2double(f);
%函数im2double
将其值归一化到0~1之间
%使用垂直Sobcl箅子.自动选择阈值
[VSFAT Threshold]=edge(f, 'sobel','vertical');
%边缘探测
figure,imshow(f),title(' 原始图像,');
%显示原始图像
figure,imshow(VSFAT),title( '垂直图像边缘检测');
%显示边缘探测图像
%使用水平和垂直Sobel算子,自动选择阈值
SFST=edge(f,'sobel',Threshold);
figure,imshow(SFST),title('水平和垂直图像边缘检测');
%显示边缘探测图像
%使用指定45度角Sobel算子滤波器,指定阂值
s45=[-2 -1 0;
-1 0 1;
0 1 2];
SFST45=imfilter(f,s45,'replicate');
%功能:对任意类型数组或多维图像进行滤波。
SFST45=SFST45>=Threshold;
figure,imshow(SFST45),title('45度角图像边缘检测') ;
%显示边缘探测图像

运行的结果图:

The Why·Liam·Blog by WhyLiam is licensed under a Creative Commons BY-NC-ND 4.0 International License.

WhyLiam创作并维护的Why·Liam·Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Why·Liam·Blog (https://blog.naaln.com),版权所有,侵权必究。

本文永久链接:https://blog.naaln.com/2013/09/matlab-implementation-of-image-edge-detection-based-on-sobel-operator/