图像锐化的目的是加强图像中景物的边缘和轮廓,突出图像中的细节或增强被模糊了的细节。
方法一:一阶微分算子
1. 梯度算子
clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
subplot(131),imshow(a),title('orgin');
[h,w]=size(a);
%----- 梯度算子 -----%
edgeImage=zeros(h,w);
for x=1:w-1
for y=1:h-1
edgeImage(y,x)=abs(a(y,x+1)-a(y,x))+abs(a(y+1,x)-a(y,x));
end
end
subplot(132),imshow(edgeImage),title('edgeImage');
afterImage=edgeImage+a;
subplot(133),imshow(afterImage),title('afterImage');
![梯度算子](https://i-blog.csdnimg.cn/blog_migrate/b6aeb8e004f90014fc71125df617b15d.jpeg)
2. Robert 算子
clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);
%----- Robert算子 -----%
RobertImage=zeros(h,w);
for x=1:w-1
for y=1:h-1
RobertImage(y,x)=abs(a(y+1,x+1)-a(y,x))+abs(a(y+1,x)-a(y,x+1));
end
end
subplot(232),imshow(RobertImage),title('RobertImage1');
afterRobertImage=RobertImage+a;
subplot(233),imshow(afterRobertImage),title('afterRobertImage1');
H1=[1 0;0 -1];
H2=[0 1;-1 0];
edgeImage=abs(imfilter(a,H1))+abs(imfilter(a,H2));
subplot(234),imshow(edgeImage),title('RobertImage2');
after=edgeImage+a;
subplot(235),imshow(after),title('afterRobertImage2');
BW=edge(a,'roberts'); %edge:对a采用roberts算子进行边缘检测,返回二值图像BW 1表示边缘 0表示其他
subplot(236),imshow(BW),title('BW');
3. Sobels 算子
sobel 算子引入平均元素,对图像中的随机噪声有一定的平滑作用;相隔两行或者两列求差分,故边缘两侧的元素得到了增强,边缘显得粗而亮
可以通过旋转将模板扩展为8个
clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);
%----- sobel 算子 -----%
H1=[-1 -2 -1;0 0 0; 1 2 1];
H2=[-1 0 1;-2 0 2;-1 0 1];
H3=[0 -1 -2;1 0 -1;2 1 0];
img=zeros(h,w);
imgH=abs(imfilter(a,H1));
imgHW=abs(imfilter(a,H1))+abs(imfilter(a,H2));
imgHWS=abs(imfilter(a,H1))+abs(imfilter(a,H2))+abs(imfilter(a,H3));
afterimgH=imgH+a;
afterimgHW=imgHW+a;
afterimgHWS=imgHWS+a;
subplot(232),imshow(imgH),title('Sobel_H');
subplot(233),imshow(imgHW),title('Sobel_HW');
subplot(234),imshow(afterimgH),title('afterSobel_H');
subplot(235),imshow(afterimgHW),title('afterSobel_HW');
subplot(236),imshow(afterimgHWS),title('afterSobel_HWS');
4. Prewitt 算子
clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);
%----- Prewitt 算子 -----%
H1=[-1 -1 -1;0 0 0; 1 1 1];
H2=[-1 0 1;-1 0 1;-1 0 1];
H3=[0 -1 -1;1 0 -1;1 1 0];
img=zeros(h,w);
imgH=abs(imfilter(a,H1));
imgHW=abs(imfilter(a,H1))+abs(imfilter(a,H2));
imgHWS=abs(imfilter(a,H1))+abs(imfilter(a,H2))+abs(imfilter(a,H3));
afterimgH=imgH+a;
afterimgHW=imgHW+a;
afterimgHWS=imgHWS+a;
subplot(232),imshow(imgH),title('Prewitt_H');
subplot(233),imshow(imgHW),title('Prewitt_HW');
subplot(234),imshow(afterimgH),title('afterPrewitt_H');
subplot(235),imshow(afterimgHW),title('afterPrewitt_HW');
subplot(236),imshow(afterimgHWS),title('afterPrewitt_HWS');