0、写在前面
代码包括:
① 为图像添加高斯噪声、椒盐噪声;
② 图像滤波处理:中值滤波、算术均值滤波、高斯滤波。
1、Matlab代码及注释
clear; clc;
M = imread('nc.jpg'); % 读取MATLAB中的名为timg的图像
subplot(2,5,1);
imshow(M); % 显示原始图像
% title('original');
title('(1)原始图像');
gray = rgb2gray(M);
subplot(2,5,2);
imshow(gray); % 显示灰度图像
% title('gray');
title('(2)灰度图像');
P1 = imnoise(gray,'gaussian',0.08); % 加入高斯躁声
subplot(2,5,3);
imshow(P1); % 加入高斯躁声后显示图像
% title('gaussian noise');
title('(3)加入高斯噪声');
P2 = imnoise(gray,'salt & pepper',0.02); %加入椒盐躁声
subplot(2,5,4);
imshow(P2); %加入椒盐躁声后显示图像
% title('salt & pepper noise');
title('(4)加入椒盐躁声');
g = medfilt2(P1); % 对高斯躁声中值滤波
subplot(2,5,5);
imshow(g);
% title('medfilter gaussian');
title('(5)对高斯躁声中值滤波');
h = medfilt2(P2); % 对椒盐躁声中值滤波
subplot(2,5,6);
imshow(h);
% title('medfilter salt & pepper noise');
title('(6)对椒盐躁声中值滤波');
a=[1 1 1 % 对高斯躁声的算术均值滤波
1 1 1
1 1 1];
l=1/9*a;
k = conv2(double(P1),double(l));
subplot(2,5,7);
imshow(k,[]);
% title('arithmeticfilter gaussian');
title('(7)对高斯躁声的算术均值滤波');
d = conv2(double(P2),double(l)); % 对椒盐躁声的算术均值滤波
subplot(2,5,8);
imshow(d,[]);
% title('arithmeticfilter salt & pepper noise');
title('(8)对椒盐躁声的算术均值滤波');
sigma=8; % 标准差大小
window=double(uint8(3*sigma)*2+1); % 窗口大小一半为3*sigma
H=fspecial('gaussian', window, sigma); % fspecial('gaussian', hsize, sigma)产生滤波模板
img_gauss=imfilter(P1,H,'replicate'); % 为了不出现黑边,使用参数'replicate'(输入图像的外部边界通过复制内部边界的值来扩展)
subplot(2,5,9);
imshow(img_gauss);
% title('gaussian filting gauss noise');
title('(9)对高斯噪声的高斯滤波');
img_salt=imfilter(P2,H,'replicate');
subplot(2,5,10);
imshow(img_salt);
% title('gaussian filting salt pepper noise');
title('(10)对椒盐噪声的高斯滤波');