基于MATLAB对彩色图像去噪的代码,均值滤波,中值滤波,空域低通滤波。

本文主要为代码展示,未对所用算法进行较为详细的文字介绍,请读者见谅。如有建议,欢迎私信。

1、给图像添加噪声

  MATLAB调用格式为:

J=imnoise(I,type)或者J=imnoise(I,type,parameters)。将类型噪声添加到灰度图像。

其中,I为原始图像,J为有噪图像,参数type和parameters用于确定噪声类型和相应的参数。类型是以下字符串:

‘guassian’添加高斯噪声;

‘salt&pepper’添加盐和胡椒的噪音;

‘specle’添加乘法噪声。

例:

J=imnoise(I, ‘guassian’,M,V)向图像I添加均值为M,方差为V的高斯白噪声。默认均值为0,方差为0.01的噪声。

J=imnoise(I, ‘salt&pepper’,D)向图像I添加强度为D的椒盐噪声,默认强度为0.05。

J=imnoise(I, ‘specle’,V)使用J=I+n*I将乘性噪声添加到图像I,其中n是均匀分布的随机噪声,均值为0,方差为V。均值V默认为0.04。

2、均值滤波

代码如下:

close all;
clear;
clc;
img = imread('图片'); % 读取彩色图像

% 定义一个3x3的平均值滤波器
h = fspecial('average', [3 3]);

% 对彩色图像进行滤波
filtered_img = imfilter(img, h);

% 显示原始图像和滤波后的图像
subplot(1,2,1), imshow(img), title('原始图像');
subplot(1,2,2), imshow(filtered_img), title('滤波后的图像');

 具体效果如图所示:

 3、中值滤波

代码如下:

close all;
clear;
clc;
I = imread('图片'); % 读取彩色图像
J=imnoise(I,'gaussian',0,0.01);%向图像I添加均值为0,方差为0.01的高斯白噪声。
img=imnoise(J,"salt & pepper",0.05);%向图像I添加强度为0.05的椒盐噪声。
% 对红、绿、蓝三个通道分别进行中值滤波
r1 = medfilt2(img(:,:,1), [3 3]);%3*3窗口
g1 = medfilt2(img(:,:,2), [3 3]);
b1 = medfilt2(img(:,:,3), [3 3]);
img1 = cat(3, r1, g1, b1);
r2 = medfilt2(img(:,:,1), [5 5]);%5*5窗口
g2 = medfilt2(img(:,:,2), [5 5]);
b2 = medfilt2(img(:,:,3), [5 5]);
img2 = cat(3, r2, g2, b2);
r3 = medfilt2(img(:,:,1), [7 7]);%7*7窗口
g3 = medfilt2(img(:,:,2), [7 7]);
b3 = medfilt2(img(:,:,3), [7 7]);
img3 = cat(3, r3, g3, b3);
% 显示原始图像和滤波后的图像
subplot(2,2,1), imshow(img), title('原始图像');
subplot(2,2,2), imshow(img1), title('3*3滤波后的图像');
subplot(2,2,3), imshow(img2), title('5*5滤波后的图像');
subplot(2,2,4), imshow(img3), title('7*7滤波后的图像');

 具体效果如图所示:

 4、空间域低通滤波

代码如下:

close all;
clear;
clc;
I = imread('图片'); % 读取彩色图像
I=im2double(I);
J=imnoise(I,'gaussian',0,0.01);%向图像I添加均值为0,方差为0.01的高斯白噪声。
x=imnoise(J,"salt & pepper",0.05);%向图像I添加强度为0.05的椒盐噪声。
%%%%%%%%%%%%%对图像噪声去噪
h1=[1,1,1;1,1,1;1,1,1];
myfilter1=h1/9;
h2=[1,1,1;1,2,1;1,1,1];
myfilter2=h2/10;
h3=[1,2,1;2,4,2;1,2,1];
myfilter3=h3/16;

% 分离出红、绿、蓝三个通道
R = x(:, :, 1);
G = x(:, :, 2);
B = x(:, :, 3);

% 对三个通道分别进行滤波
R1 = imfilter(R, myfilter1);
G1= imfilter(R, myfilter1);
B1= imfilter(B, myfilter1);
R2 = imfilter(R, myfilter2);
G2= imfilter(R, myfilter2);
B2= imfilter(B, myfilter2);
R3 = imfilter(R, myfilter3);
G3= imfilter(R, myfilter3);
B3= imfilter(B, myfilter3);
% 合并三个通道
img1 = cat(3, R1, G1, B1);
img2 = cat(3, R2, G2, B2);
img3 = cat(3, R3, G3, B3);
% 显示原始图像和滤波后的图像
figure;
subplot(2, 2, 1), imshow(x), title('原始图像');
subplot(2, 2, 2), imshow(img1), title('h1滤波后的图像');
subplot(2, 2, 3), imshow(img2), title('h2滤波后的图像');
subplot(2, 2, 4), imshow(img3), title('h3滤波后的图像');

 具体效果如图所示:

PS:1,通过对以上运行效果的比对分析,读者可以对三种算法的特征做出一定评价。

2,文中所用图片的原图为互联网图片。

猜你喜欢

转载自blog.csdn.net/qq_48302410/article/details/131345731