摘要
本文介绍了邻域平均法,中值滤波法,小波变换法这三种方法分别来实现了对高斯噪声,椒盐噪声的去除噪声的实验效果及其分析, 分析了3种方法在平滑效果以及轮廓模糊程度上的差异。
关键词:邻域平均法,中值滤波法,小波变换法高斯噪声,椒盐噪声 引言:领域平均法的思想是用像素及其指定领域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而虑除一定的噪声。中值滤波法的原理是把以某像素为中心的小窗口内的所有像素的灰度按从小到大排序,取排序结果中的中间值作为该像素的灰度值。小波变换可以把信号分解为多个具有不同时间和频率分辨率的信号,从而在一个变换中同时研究信号的低频和高频信息。
本文先开始领域平均法和中值滤波法对高斯噪声的虑除效果对比,程序1在附录中。图像结果如下:
原始图像(a) 加高斯噪声(b)
领域平均法(c) 中值滤波法(d)
分析:从以上四幅图像看出,领域平均法的去除高斯噪声的效果比较好,因为得出来的图像看出,c图的效果比较好,相比d图来说,还能看清楚手脚的形状,而d图则不见其轮廓,而且c图颜色更加深一些。
它们的信噪比如下:
输入数据的MSE为:987.1436%原始图像与高斯图像的均方误差 输入数据的PSNR为:18.187%原始图像与高斯图像的峰值信噪比 输入数据1的MSE为:1344.5184%原始图像与领域平均后高斯图像的均方误差
输入数据1的PSNR为:16.8451 %原始图像与领域平均后高斯图像的峰值信噪比
输入数据3的MSE为:1267.3331%原始图像与中值滤波后高斯图像的均方误差
输入数据3的PSNR为:17.1019
接着是领域平均法和中值滤波法对椒盐噪声的虑除效果对比,程序2在附录中。图像结果如下:%原始图像与中值滤波后高斯图像的峰值信噪比
椒盐图像 领域平均法
第一次中值滤波法 第二次中值滤波法
分析:从以上四幅图像可以看出,中值滤波法去除椒盐噪声的效果比较好,领域平均法去除椒盐噪声的效果明显较差,基本变化不大。第二次中值滤波比第一次中值滤波的效果更佳,从边框上可以看出,但是也不是次数越多效果越好,这些都是主观的。 它们的信噪比如下:
输入数据的MSE为:5546.4714 %原始图像与椒盐图像的均方误差 输入数据的PSNR为:10.6906 %原始图像与椒盐图像的峰值信噪比 输入数据的MSE为:1638.3039 %原始图像与领域平均后椒盐图像的均方误差
输入数据的PSNR为:15.9869 %原始图像与领域平均后椒盐图像的峰值信噪比
输入数据的MSE为:527.9824 %原始图像与中值滤波后椒盐图像的均方误差
输入数据的PSNR为:20.9046 %原始图像与中值滤波后后椒盐图像的峰值信噪比
分析:由此可见,没有滤波前 均方误差很大,峰值信噪比很小,领域滤波后,均方误差比没有滤波前小很多,峰值信噪比大了三分之一, 中值滤波后,均方误差最小,峰值信噪比最大,可见,中值滤波的效果最好。
接着是小波变换法对高斯噪声的虑除效果对比,程序3在附录中。图像结果如下:
原始图像
高斯噪声
小波变换
分析:经过小波变换后,从图像中可以看出,高斯噪声是去掉了,但是也存在也一些问题,图像的边缘变模糊了,叮当手里拿着的那朵花开始变形,右边的手脚也是如此。 它们的信噪比如下:
输入数据的MSE为:1003.1354%原始图像与高斯图像的均方误差 输入数据的PSNR为:18.1172%原始图像与高斯图像的峰值信噪比 输入数据的MSE为:260.2533%原始图像与小波变换后高斯图像的均方误差
输入数据的PSNR为:23.9768%原始图像与高小波变换后斯图像的峰值信噪比
分析:可见,小波变换后,信噪比增大,均方误差减少。
最后是小波变换法对椒盐噪声的虑除效果对比,程序4在附录中。图像结果如下:
原始图像
椒盐噪声
小波变换后
分析:经过小波变换后,从图像中可以看出,椒盐噪声是去掉了,但是也存在也一些问题,图像的边缘变模糊了,叮当手里拿着的那朵花开始变形,右边的手脚也是如此。 它们的信噪比如下:
输入数据的MSE为:352179629.1668% %原始图像与椒盐图像的均方误
输入数据的PSNR为:-37.3368 %原始图像与椒盐图像的峰值信噪比 输入数据的MSE为:260.2533 %原始图像与小波变换后椒盐图像的均方误差
输入数据的PSNR为:23.9768 %原始图像与小波变换后椒盐图像的峰值信噪比
分析:可见,小波变换后,信噪比增大,均方误差减少。
总结
通过以上三种方法对含有高斯噪声与椒盐噪声的图像进行虑除得出来的结果可以看出:对于高斯噪声,领域平均法的虑除效果最佳,它在降低噪声的同时使图像产生模糊,特别是在边缘和细节处,因而噪声也被平均到平滑图像中。对于椒盐噪声,中值滤波能在去除噪声的同时较好地保持图像边缘,去除椒盐噪声的效果最佳。对于小波变换法,无论是高斯噪声还是椒盐噪声,它都能很好地去除噪声,但是使边缘图像变得模糊,甚至变形。小波变换包含小波分解,将信号分解为近似分量和细节分量,对于含噪信号,噪声分量的主要能量一般集中在小波分解的细节分量中,因此对细节分量进行阀值处理可以虑除噪声,可能是学生选取阀值不当才产生这样的效果,望老师指正。 附录 程序1
clear;
I=imread('F:\\dingdang.jpg'); figure imshow(I);
I1=imnoise(I,'gaussian',0.2); figure imshow(I1);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I1; a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue); disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]); h=fspecial('average'); I2=imfilter(I1,h); figure imshow(I2);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I2; a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue); disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]); I1=imnoise(I,'gaussian',0.2); R=I1(:,:,1); G=I1(:,:,2);
B=I1(:,:,3); R1=medfilt2(R); G1=medfilt2(G); B1=medfilt2(B); I1(:,:,1)=R1; I1(:,:,2)=G1; I1(:,:,3)=B1; figure imshow(I1);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I1; a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue); disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
程序2
clear;
I=imread('F:\\dingdang.jpg'); I1=imnoise(I,'salt & pepper',0.2); figure imshow(I1);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I1;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]); h=fspecial('average'); I2=imfilter(I1,h); figure imshow(I2);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I2;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]); R=I1(:,:,1); G=I1(:,:,2); B=I1(:,:,3); R1=medfilt2(R); G1=medfilt2(G); B1=medfilt2(B); I1(:,:,1)=R1; I1(:,:,2)=G1; I1(:,:,3)=B1; figure imshow(I1); R=I1(:,:,1); G=I1(:,:,2); B=I1(:,:,3); R1=medfilt2(R); G1=medfilt2(G); B1=medfilt2(B); I1(:,:,1)=R1; I1(:,:,2)=G1; I1(:,:,3)=B1; figure imshow(I1);
A=imread('F:\\dingdang.jpg');
[M,N]=size(A); B=I1;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
程序3
clear;
I=imread('F:\\dingdang.jpg'); [I2,map]=rgb2ind(I); figure
imshow(I2,map);
I1=imnoise(I2,'gaussian',0.2); I4=imnoise(I,'gaussian',0.2); figure imshow(I4);
A=imread('F:\\dingdang.jpg'); [M,N]=size(A); B=I4;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
[c,s]=wavedec2(I2,2,'sym5');%用sym5小波对图像信号进行二层的小波分解 [thr,sorh,keepapp]=ddencmp('den','wv',I1);%使用ddencmp函数来计算机计算去噪的默认阀值和熵标准。
[I3,cxc,lxc,perf0,perf12]=wdencmp('gbl',c,s,'sym5',2,thr,sorh,keepapp
); %使用wdencmp函数来实现图像的压缩。 figure
imshow(I3,map);%去噪后的图像 A=I2;
[M,N]=size(A); B=I3;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
程序4
clear;
I=imread('F:\\dingdang.jpg'); [I2,map]=rgb2ind(I); figure
imshow(I2,map);
I1=imnoise(I2,'salt & pepper',0.2); figure
imshow(I1,map);
A=I2;
[M,N]=size(A); B=I1;
a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
[c,s]=wavedec2(I2,2,'sym5'); %用sym5小波对图像信号进行二层的小波分解
[thr,sorh,keepapp]=ddencmp('den','wv',I1); %使用ddencmp函数来计算机计算去噪的默认阀值和熵标准。
[I3,cxc,lxc,perf0,perf12]=wdencmp('gbl',c,s,'sym5',2,thr,sorh,keepapp); %使用wdencmp函数来实现图像的压缩 figure
imshow(I3,map); %去噪后的图像 A=I2; [M,N]=size(A); B=I3; a=double(A); b=double(B); sum=0; for i=1:M; for j= 1:N;
sum=sum+(a(i,j)-b(i,j))^2; end; end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]); disp(['输入数据的PSNR为:',num2str(psnrValue)]);
因篇幅问题不能全部显示,请点此查看更多更全内容