一、题目:
编写程序,利用八个模板的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锐化图像');