当前位置:首页 > 中国海洋大学数字图像处理实验二报告
subplot(3,3,2); imshow(J1);
title('加高斯噪声后');
J2=imnoise(T,'salt& pepper',0.02);%加入椒盐躁声 subplot(3,3,3);
imshow(J2);%%加入椒盐躁声后显示图像 title('加椒盐噪声后');
g1=medfilt2(J1(:,:,1));%%红 g2=medfilt2(J1(:,:,2));%%绿 g3=medfilt2(J1(:,:,3));%%蓝
g=cat(3,g1,g2,g3); %对高斯躁声中值滤波
subplot(3,3,4); imshow(g);
title('高斯中值滤波');
h1=medfilt2(J2(:,:,1));%%红 h2=medfilt2(J2(:,:,2));%%绿 h3=medfilt2(J2(:,:,3));%%蓝
h=cat(3,h1,h2,h3);%对椒盐躁声中值滤波 subplot(3,3,5); imshow(h);
title('椒盐中值滤波'); I=ones(3); %生成3*3矩阵 I=I/9;
% z1=conv2(J1(:,:,1),I);%%红 % z2=conv2(J1(:,:,2),I);%%绿 % z3=conv2(J1(:,:,3),I);%%蓝
% z=cat(3,z1,z2,z3); %此处必须将double转化z1=uint8(conv2(J1(:,:,1),I));%%红 z2=uint8(conv2(J1(:,:,2),I));%%绿 z3=uint8(conv2(J1(:,:,3),I));%%蓝 z=cat(3,z1,z2,z3);
subplot(3,3,6); imshow(z);
title('对高斯躁声算术均值滤波');
w1=uint8(conv2(J2(:,:,1),I));%%红 w2=uint8(conv2(J2(:,:,2),I));%%绿
w3=uint8(conv2(J2(:,:,3),I));%%蓝
w=cat(3,w1,w2,w3); subplot(3,3,7);%对椒盐躁声算术均值滤波 imshow(w);
只能处理灰度图 conv2
title('对椒盐躁声算术均值滤波');
2.结果如图1.1:
图1.1
2.1利用给定图像编程实现使用均值滤波器
代码如下:
clear all; close all; clc;
%% 自己编程实现均值滤波器 I = imread('实验三(1).tif');
% I = imread('circuitboardNoise-gaussian.tif');
% I = imread('circuitboardNoise-salt.tif'); %读入三幅有不同噪声的图像 figure,imshow(I),title('原始图像')
[height, width] = size(I); %源图像点I(x,y) x1=double(I); x2=x1;
%% *** 3*3 模板 *** n=3;
a(1:n,1:n)=1; %a即n×n模板,元素全是1 for x=1:height-n+1
for y=1:width-n+1
c=x1(x:x+(n-1),y:y+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模
板相乘
s=sum(sum(c)); %求c矩阵中各元素之和
x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中
心位置的元素
end end
d=uint8(x2);
figure,imshow(d),title('3*3模板')
%% *** 5*5 模板 *** n=5;
a(1:n,1:n)=1; %a即n×n模板,元素全是1 for x=1:height-n+1 for y=1:width-n+1
c=x1(x:x+(n-1),y:y+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘 s=sum(sum(c)); %求c矩阵中各元素之和
x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中
心位置的元素
end end
d=uint8(x2);
figure,imshow(d),title('5*5模板')
%% *** 7*7 模板 *** n=7;
a(1:n,1:n)=1; %a即n×n模板,元素全是1 for x=1:height-n+1 for y=1:width-n+1
c=x1(x:x+(n-1),y:y+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板
相乘
s=sum(sum(c)); %求c矩阵中各元素之和
x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心
位置的元素
end end
d=uint8(x2);
figure,imshow(d),title('7*7模板')
%% *** 9*9 模板 ***, 效果最佳 n=9;
a(1:n,1:n)=1; %a即n×n模板,元素全是1 for x=1:height-n+1
for y=1:width-n+1
c=x1(x:x+(n-1),y:y+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板
相乘
s=sum(sum(c)); %求c矩阵中各元素之和
x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心
位置的元素
end end
d=uint8(x2);
figure,imshow(d),title('9*9模板')
原始图像 3*3 5*5 7*7 9*9 图2.1均值滤波器对高斯噪声进行滤波
其中3*3模板的效果最好
2.2.利用给定图像编程实现使用中值滤波器对不同强度的高斯噪和椒盐噪声进行滤波处理。
代码如下:
I = imread('实验三(1).tif');
% I = imread('circuitboardNoise-gaussian.tif');
共分享92篇相关文档