1.引言
图像处理是计算机视觉领域中的一个重要分支,其目标是通过对图像进行各种操作来改善图像的质量或提取出特定的信息。在图像处理的诸多任务中,平滑和滤波是常见且关键的操作,用于去除噪声、增强细节或突出图像中的特征。本文将重点介绍一系列MATLAB脚本文件,通过不同的函数实现图像的平滑和滤波操作。这些函数涵盖了各种技术,包括卷积、中值滤波、排序滤波以及自适应滤波等。
2.主要函数介绍
2.1 imfilter()函数
进行图像平滑。该函数通过卷积操作,利用不同的滤波器对图像进行处理,有助于去除高频噪声,提高图像质量。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
J=imnoise(I, 'salt & pepper', 0.02);%添加噪声
h=ones(3,3)/5; %建立模板
h(1,1)=0; h(1,3)=0;
h(3,1)=0; h(1,3)=0;
K=imfilter(J, h); %图像的滤波
figure;
subplot(131);
imshow(I); %显示原始图像
subplot(132);
imshow(J); %显示添加噪声后的图像
subplot(133);
imshow(K);
2.2 conv2()函数
进行图像平滑。类似于imfilter()
,conv2()
同样通过卷积操作实现图像的平滑,对于平均化像素值起到积极的作用。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I, 'gaussian', 0, 0.01); %添加噪声
h=ones(3,3)/9; %产生模板
K=conv2(J, h); %通过卷积进行滤波
figure;
subplot(131);
imshow(I); %显示原始图像
subplot(132);
imshow(J); %显示添加噪声后的图像
subplot(133);
imshow(K); %显示滤波结果图像
2.3 filter2()函数
进行平滑滤波。这个函数同样执行卷积操作,可以根据选择的滤波器实现不同程度的平滑效果,从而提升图像清晰度。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I, 'salt & pepper', 0.02);%添加噪声
h1=fspecial('average', 3); %3*3模板
h2=fspecial('average', 5); %5*5模板
K1=filter2(h1, J); %滤波
K2=filter2(h2, J); %滤波
figure;
subplot(131);
imshow(J); %显示图像
subplot(132);
imshow(K1); %滤波结果
subplot(133);
imshow(K2); %滤波结果
2.4 medfilt2()函数
进行中值滤波。中值滤波是一种非线性滤波方法,对于去除图像中的椒盐噪声等噪声类型非常有效。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I, 'salt & pepper', 0.03);%添加噪声
K=medfilt2(J); %中值滤波
figure;
subplot(131);
imshow(I); %显示原始图像
subplot(132);
imshow(J); %显示添加噪声后的图像
subplot(133);
imshow(K); %显示滤波后的图像
2.5 ordfilt2()函数
进行排序滤波。通过对像素进行相对大小的排序,可以有效去除尖峰噪声等特定噪声类型。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
I=im2double(I);
J1=ordfilt2(I, 1, true(5)); %排序滤波
J2=ordfilt2(I, 25, true(5));%排序滤波
figure;
subplot(131);
imshow(I); %显示原始图像
subplot(132);
imshow(J1); %显示排序后第1个作为输出的结果
subplot(133);
imshow(J2); %显示排序后第25个作为输出的结果
2.6 wiener2()函数
进行自适应滤波。Wiener滤波在频域上调整滤波参数,使其更适应图像的信噪比,从而保留细节并去除噪声。
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I, 'gaussian', 0, 0.01);%添加高斯噪声
K=wiener2(J, [5 5]); %自适应滤波
figure;
subplot(131);
imshow(I); %显示原始图像
subplot(132);
imshow(J); %显示噪声图像
subplot(133);
imshow(K); %显示滤波后的图像
2.7 算子
采用相关算子对图像进行锐化滤波。这种滤波方法通过增强高频信息,使图像边缘更加清晰。
I=im2double(I);
h=[0,1,0; 1, -4, 1; 0, 1, 0]; %拉普拉斯算子
J=conv2(I, h, 'same'); %卷积
K=I-J;
figure;
subplot(121);
imshow(I); %显示原图像
subplot(122);
imshow(K); %显示结果图像
最后:
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!