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

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,文中所用图片的原图为互联网图片。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: