编写程序,利用八个模板的Sobel算子实现边缘检测和图像锐化(数字图像处理之matlab代码)

 一、题目:  

编写程序,利用八个模板的Sobel算子实现边缘检测和图像锐化(数字图像处理之matlab代码)

二、带注释的matlab代码:

%读入彩色图像后,转为灰度图像,再将图像数据类型转化为double
Image = im2double(rgb2gray(imread('C:\Users\HUAWEI\Desktop\A计协\1大三重点\数字图像处理\lena_color_256.tif')));
subplot(221);imshow(Image);title('原图像');

%构造5*5的均值平滑滤波器
HFilter = fspecial('average',[5,5]);
%使用均值滤波器对图像进行平滑
ImageF = imfilter(Image,HFilter); 
subplot(222);imshow(ImageF);title('5*5模板均值滤波后图像');

%构造Sobel算子的8个模板,旋转得来
H1 = [-1 -2 -1;0 0 0;1 2 1];H2 = [0 -1 -2;1 0 -1;2 1 0];
H3 = [1 0 -1;2 0 -2;1 0 -1];H4 = [2 1 0;1 0 -1;0 -1 -2];
H5 = [1 2 1;0 0 0;-1 -2 -1];H6 = [0 1 2;-1 0 1;-2 -1 0];
H7 = [-1 0 1;-2 0 2;-1 0 1];H8 = [-2 -1 0;-1 0 1;0 1 2];
%使用Sobel各个模板进行过滤
R1 = imfilter(ImageF,H1);R2 = imfilter(ImageF,H2);
R3 = imfilter(ImageF,H3);R4 = imfilter(ImageF,H4);
R5 = imfilter(ImageF,H5);R6 = imfilter(ImageF,H6);
R7 = imfilter(ImageF,H7);R8 = imfilter(ImageF,H8);

%通过两两取最大的方式构造综合八个模板,得到梯度图像
f1 = max(max(R1,R2),max(R3,R4));
f2 = max(max(R5,R6),max(R7,R8));
edgeImage = max(f1,f2);
subplot(223);imshow(edgeImage);title('八个模板的Sobel梯度图像');

%梯度图像与被平滑的图像合并,得到对被平滑图像的锐化处理结果
sharpImage = edgeImage+ImageF;
subplot(224);imshow(sharpImage);title('八个模板的Sobel锐化图像');

三、运行的结果:

边缘检测图像锐化数字图像处理中非常常见的操作,Sobel算子是其中一种常用的边缘检测算法。下面我来介绍如何在MATLAB实现基于Sobel算子边缘检测图像锐化。 首先,我们需要用MATLAB读取一张图片,这里以读取名为“lena.png”的图片为例: ```matlab img = imread('lena.png'); ``` 接下来,我们可以使用MATLAB自带的fspecial函数创建一个Sobel算子模板: ```matlab sobel_x = fspecial('sobel'); sobel_y = sobel_x'; ``` 这里,sobel_x和sobel_y是分别表示Sobel算子在x和y方向的模板。 接着,我们可以使用MATLAB自带的imfilter函数将Sobel算子模板应用于图像,进行边缘检测: ```matlab edge_x = imfilter(double(img), sobel_x); edge_y = imfilter(double(img), sobel_y); edge = sqrt(edge_x.^2 + edge_y.^2); ``` 这里,edge_x和edge_y分别表示图像在x和y方向的梯度,即边缘信息;edge则是将x和y方向的梯度取平方和再开根号得到的边缘强度。 最后,我们可以使用MATLAB自带的imsharpen函数对图像进行锐化: ```matlab sharpened_img = imsharpen(img); ``` 这里,sharpened_img就是锐化后的图像。 完整的代码如下: ```matlab img = imread('lena.png'); sobel_x = fspecial('sobel'); sobel_y = sobel_x'; edge_x = imfilter(double(img), sobel_x); edge_y = imfilter(double(img), sobel_y); edge = sqrt(edge_x.^2 + edge_y.^2); sharpened_img = imsharpen(img); ``` 通过这段代码,我们就实现了基于Sobel算子边缘检测图像锐化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值