1 图像噪声的添加
读入一幅图像,在这幅图像中分别添加高斯噪声和椒盐噪声并输出显示其结果。
im = imread('a.jpg');
% 1)生成含有高斯噪声、椒盐噪声的图像
% imnoise 是表示添加噪声污染一幅图像,叫做噪声污染图像函数
im_noise_salt = imnoise(im,'salt & pepper'); % 加入椒盐噪声
im_noise_gaussian = imnoise(im,'gaussian'); % 加入高斯噪声
figure;
subplot(131),imshow(im);title('原图');
subplot(132),imshow(im_noise_salt);title('加入椒盐噪声后的图像');
subplot(133),imshow(im_noise_gaussian);title('加入高斯噪声后的图像');
2 滤波去噪
在图像添加完噪声的基础上对图像进行中值滤波(medfilt2)和均值滤波,并输出显示这些结果。
2.1 使用均值滤波对椒盐噪声进行去噪
% 自编写均值滤波函数
im = imread('a.jpg');
im_noise_salt = imnoise(im,'salt & pepper'); % 加入椒盐噪声
n=1; m=2*n+1;
H = ones(m,m)/(m*m); % 3×3 矩阵 n=2:5×5
[h,l,c] = size(im_noise_salt); % [h,l,c] = size(im_noise_gaussian);
x1 = double(im_noise_salt); % x1 = double(im_noise_gaussian);
x2 = x1;
for i=n+1:h-n
for j=n+1:l-n
% 去除 x1 中从(i,j)开始的 n 行 n 列元素与模板相乘
c = x1(i-n:i+n,j-n:j+n).*H;
s = sum(c(:));
2.2 使用均值滤波对高斯噪声去噪
% 自编写均值滤波函数
Im=imread('a.jpg');
im_noise_gaussian = imnoise(im,'gaussian'); % 加入高斯噪声
n=1; m=2*n+1;
H = ones(m,m)/(m*m); % 3×3 矩阵 n=2:5×5
[h,l,c] = size(im_noise_salt); % [h,l,c] = size(im_noise_gaussian);
x1 = double(im_noise_salt); % x1 = double(im_noise_gaussian);
x2 = x1;
for i=n+1:h-n
for j=n+1:l-n
% 去除 x1 中从(i,j)开始的 n 行 n 列元素与模板相乘
c = x1(i-n:i+n,j-n:j+n).*H;
s = sum(c(:));
x2(i,j) = s;
end
end
im_filtered2 = uint8(x2);
subplot(2,2,[1,2]),imshow(im);title('原图');
subplot(322),imshow(im_noise_gaussian);title('加入高斯噪声后的图像');
subplot(324),imshow(uint8(im_filtered2));title('高斯噪声图像进行均值滤波后的图像');
2.3 使用中值滤波对高斯噪声去噪
% 自编写中值滤波函数
im = imread('a.jpg');
im_noise_salt = imnoise(im,'salt & pepper'); % 加入椒盐噪声
% % 定义邻域尺寸
n1 = 2; m1 = 2*n1+1;
n2 = 2; m2 = 2*n2+1;
k = floor(m1*m2/2)+1;
[h,l,c] = size(im_noise_salt); % [h,l,c] = size(im_noise_gaussian);
H = zeros(h,l);
t = zeros(n1,n2);
for i=n1+1:h-n1
for j=n2+1:l-n2
Neiborhood = im_noise_salt(i-n1:i+n1,j-n2:j+n2); % 得到 3×3 邻域
t = Neiborhood(:);
s = sort(t);
H(i,j) = s(k);
end
end
im_filtered2 = uint8(H);
subplot(2,2,[1,2]),imshow(im);title('原图');
subplot(223),imshow(im_noise_salt);title('加入椒盐噪声后的图像');
subplot(224),imshow(im_filtered2);title('椒盐噪声图像进行中值滤波后的图像');
2.4 使用中值滤波对椒盐噪声去噪
% 自编写中值滤波函数
im = imread('a.jpg');
im_noise_gaussian = imnoise(im,'gaussian'); % 加入高斯噪声
% % 定义邻域尺寸
n1 = 2; m1 = 2*n1+1;
n2 = 2; m2 = 2*n2+1;
k = floor(m1*m2/2)+1;
[h,l,c] = size(im_noise_salt); % [h,l,c] = size(im_noise_gaussian);
H = zeros(h,l);
t = zeros(n1,n2);
for i=n1+1:h-n1
for j=n2+1:l-n2
Neiborhood = im_noise_salt(i-n1:i+n1,j-n2:j+n2); % 得到 3×3 邻域
t = Neiborhood(:);
s = sort(t);
H(i,j) = s(k);
end
end
im_filtered2 = uint8(H);
subplot(2,2,[1,2]),imshow(im);title('原图');
subplot(322),imshow(im_noise_gaussian);title('加入高斯噪声后的图像');
subplot(324),imshow(uint8(im_filtered2));title('高斯噪声图像进行中值滤波后的图像');
3 不同因素下的滤波结果
变换窗口大小和噪声水平,并综合分析滤波结果。
参考答案:窗口越小,细节保留的更多,但是一部分椒盐噪声还没有滤除。当窗口尺寸大 时,虽然把绝大多数的噪声都滤除了,但是图像细节丢失严重。高斯噪声是一种加性 噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。使用均值滤波等线性滤 波方法效果更佳;椒盐噪声是指两种噪声,盐噪声(高灰度噪声)、胡椒噪声(低灰度噪 声)。同时出现时,在图像上呈现为黑白杂点。 使用中值滤波方法效果更佳。
% 对 a 图像加入椒盐噪声,强度为 30%,
% 分别采用均值滤波,中值滤波进行处理。
% 并讨论不同尺寸的模板对结果影响。
% a 图像加入椒盐噪声
imgrgb = imread('a.jpg'); %读取 a 图像
imggray = rgb2gray(imgrgb); %将 rgb 图像转换成灰度图像
figure('Name', 'a 图像加入椒盐噪声'); %标题
subplot(121);
imshow(imggray); %显示灰度图像
title('原始灰度图像');
I = imnoise(imggray, 'salt & pepper', 0.3); %添加椒盐噪声,强度 30%
subplot(122);
imshow(I); %显示加入椒盐噪声的图像
title('加入强度 30%椒盐噪声的图像');
% 均值滤波
figure('Name', '均值滤波处理分析'); %标题
K1 = filter2(fspecial('average', 3), I) / 255; %应用 3*3 领域窗口法
subplot(221);
imshow(K1);
title('3*3 窗的均值滤波图像');
K2 = filter2(fspecial('average', 7), I) / 255; %应用 7*7 领域窗口法
subplot(222);
imshow(K2);
title('7*7 窗的均值滤波图像');
K3 = filter2(fspecial('average', 9), I) / 255; %应用 9*9 领域窗口法
subplot(223);
imshow(K3);
title('9*9 窗的均值滤波图像');
K4 = filter2(fspecial('average', 11), I) / 255; %应用 11*11 领域窗口法
subplot(224);
imshow(K4);
title('11*11 窗的均值滤波图像');
% 中值滤波
figure('Name', '中值滤波处理分析');
S1 = medfilt2(I,[3 3]);
subplot(221);
imshow(S1);
title('3*3 窗的中值滤波图像');
S2 = medfilt2(I,[7 7]);
subplot(222);
imshow(S2);
title('7*7 窗的中值滤波图像');
S3 = medfilt2(I,[9 9]);
subplot(223);
imshow(S3);
title('9*9 窗的中值滤波图像');
S4 = medfilt2(I,[11 11]);
subplot(224);
imshow(S4);
title('11*11 窗的中值滤波图像');
4892

被折叠的 条评论
为什么被折叠?



