clear;
clc;
img = imread('rice.png');
subplot(1,4,1);
subimage(img);
title('原图像');
[m,n] = size(img);
img = double(img)
for i = 1:m-1
for j =1: n-1
new_img1(i,j) = sqrt((img(i,j)-img(i+1,j))*(img(i,j)-img(i+1,j))+(img(i,j)-img(i,j+1))*(img(i,j)-img(i,j+1)));
end
end
subplot(1,4,2)
imshow(new_img1,[]);
title('第一种方法求解梯度')
for i = 1:m-1
for j =1: n-1
new_img2(i,j) = abs((img(i,j)-img(i+1,j))*(img(i,j)-img(i+1,j)))+abs((img(i,j)-img(i,j+1))*(img(i,j)-img(i,j+1)));
end
end
subplot(1,4,3)
imshow(new_img2,[]);
title('第二种方法求解梯度')
% 感觉上面的效果不好,我们来进行一个二值化操作吧
B = (new_img1>30)
for i=1:m-1
for j=1:n-1
if B(i,j)==1
new_img3(i,j) = 0;
else
new_img3(i,j) = 255;
end
end
end
subplot(1,4,4)
imshow(uint8(new_img3));
title('二值化后的图像')
图像锐化的关键是求解图像的梯度,这里分别使用了两种简单的梯度计算方法,都还不错,同时也发现了图像中的噪声点对于梯度的影响还是非常大的
大致看出通过图像锐化的方法,是能够实现轮廓的突出,但是不同的梯度计算方法,在显示的效果上还是差异蛮大,至于最后的二值化,受限于选定的阈值和噪声的影响,总之,这个算是理解了这个怎么实现的