用Matlab实现一些简单的图像锐化,仅是写一写基本原理,不追求锐化效果。
在入门级的图像处理课上,往往会讲一些高通滤波/图像锐化的方法,然后用Matlab或其他什么实现。
然而让人感到蛋疼的是,说是锐化并增强图像,却只得到一个模糊的轮廓。
或是下面这样。
其实上面的图像是提取出来的高频信息,将高频信息加回原始图像,才能得到锐化后的图像。
对比一下原始图像。
如果感觉没什么区别,点击图片查看原图。
上面两种锐化分别使用了Laplacian算子和Prewitt算子提取高频信息,对应的Matlab代码如下。
% Laplacian
i = imread(‘Original.png’);
I = double(i);
N = [-1 -1 -1 ; -1 8 -1 ; -1 -1 -1];
sharp = conv2(I,f,'same');
sharp = uint8(sharp);
sharped = i + sharp;
imshow(sharp);
% Prewitt
i = imread(‘Original.png’);
I = double(i);
N = [1 1 1 ; 0 0 0 ; -1 -1 -1];
sharp = conv2(I,f,'same');
sharp = uint8(sharp);
sharped = i + sharp;
imshow(sharp);
当然,上述锐化效果并不能使人满意,Ringing尤其让人讨厌(线条周围的白边),后续再调整。