MATLAB--数字图像处理 图像噪声与滤波处理

一、实验名称

图像的噪声与滤波处理

二、实验目的

1.熟悉MATLAB软件的使用。
2.掌握图像的噪声与滤波处理。

三、实验内容

1.对一张图片添加不同强度的高斯噪声、椒盐噪声
2.对图像进行不同模板的均值滤波、高斯加权滤波、中值滤波,对比结果并分析不同滤波方式的优劣

四、实验仪器与设备

Win10 64位电脑
MATLAB2017a

五、实验原理

高斯噪声
所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声。
椒盐噪声
椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
均值滤波
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m m为该模板中包含当前像素在内的像素总个数。
高斯加权滤波
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积至空域卷积。
中值滤波
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为33,55区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

六、实验过程及代码

添加高斯噪声

方案一:利用imnoise()函数

t=imread('a1.jpg');
imshow(t),title('原图');
t1=imnoise(t,'gaussian',0,0.01);
figure,imshow(t1),title('添加均值为0,方差为0.01的高斯噪声');
t2=imnoise(t,'gaussian',0,0.02);
figure,imshow(t2),title('添加均值为0,方差为0.02的高斯噪声');
t3=imnoise(t,'gaussian',0,0.03);
figure,imshow(t3),title('添加均值为0,方差为0.03的高斯噪声');
t4=imnoise(t,'gaussian',0.2,0.01);
figure,imshow(t4),title('添加均值为0.2,方差为0.01的高斯噪声');
t5=imnoise(t,'gaussian',0.4,0.01);
figure,imshow(t5),title('添加均值为0.4,方差为0.01的高斯噪声');

方案二:利用randn()函数

t=imread('a1.jpg');
[m,n,z]=size(t);
y=0+0.1*randn(m,n);
t1=double(t)/255;
t1=t1+y;
t1=t1*255;
t1=uint8(t1);
subplot(1,2,1),imshow(t),title('原图');
subplot(1,2,2),imshow(t1),title('加入均值为0,标准差为0.1的高斯噪声后');

方案三:自主随机生成二维高斯分布矩阵

 image=imread('a1.jpg');
[width,height,z]=size(image);
subplot(1,2,1);
imshow(image);
title('原图');
av=0;
std=0.1;
u1=rand(width,height);
u2=rand(width,height);
x=std*sqrt(-2*log(u1)).*cos(2*pi*u2)+av;
result1=double(image)/255+x;
result1=uint8(255*result1);
subplot(1,2,2);
imshow(result1);
title('加入均值为0,标准差为0.1的高斯噪声后');

加入椒盐噪声

方案一:利用imnoise()函数

 t=imread('a1.jpg');
subplot(1,2,1),imshow(t),title('原图');
t1=imnoise(t,'salt & pepper',0.1);
subplot(1,2,2),imshow(t1),title('加入噪声密度:0.1的椒盐噪声');
t2=imnoise(t,'salt & pepper',0.2);
figure,subplot(1,2,1),imshow(t2),title('加入噪声密度:0.2的椒盐噪声');
t3=imnoise(t,'salt & pepper',0.3);
subplot(1,2,2),imshow(t3),title('加入噪声密度:0.3的椒盐噪声');

方案二:产生随机数

image=imread('a1.jpg');
[width,height,z]=size(image);

result2=image;
subplot(1,2,1)
imshow(image);
title('原图');
k1=0.2;
k2=0.2;
a1=rand(width,height)

均值滤波(对高斯噪声和椒盐噪声)

 t=imread('a1.jpg');
[m,n,z]=size(t);
t1=imnoise(t,'gaussian',0,0.02);
imshow(t1),title('加入高斯噪声后')
t2=t;
for i=1:m-2
for j=1:n-2
t2(i+1,j+1,:)=round(t2(i,j,:)/9+t2(i,j+1,:)/9+t2(i,j+2,:)/9+t2(i+1,j,:)/9+t2(i+1,j+1,:)/9+t2(i+1,j+2,:)/9+t2(i+2,j,:)/9+t2(i+2,j+1,:)/9+t2(i+2,j+2,:)/9);
end
end
figure,
subplot(1,2,1),imshow(t2),title('3*3均值滤波');
t3=t;
for i=1:m-4
for j=1:n-4
t3(i+2,j+2,:)=round(t3(i,j,:)/25+t3(i,j+1,:)/25+t3(i,j+2,:)/25+t3(i,j+3,:)/25+t3(i,j+4,:)/25+t3(i+1,j,:)/25+t3(i+1,j+1,:)/25+t3(i+1,j+2,:)/25+t3(i+1,j+3,:)/25+t3(i+1,j+4,:)/25+t3(i+2,j,:)/25+t3(i+2,j+1,:)/25+...
t3(i+2,j+2,:)/25+t3(i+2,j+3,:)/25+t3(i+2,j+4,:)/25+t3(i+3,j,:)/25+t3(i+3,j+1,:)/25+t3(i+3,j+2,:)/25+t3(i+3,j+3,:)/25+t3(i+3,j+4,:)/25+...
t3(i+4,j,:)/25+t3(i+4,j+1,:)/25+t3(i+4,j+2,:)/25+t3(i+4,j+3,:)/25+t3(i+4,j+4,:)/25);
end
end
subplot(1,2,2),imshow(t3),title('5*5均值滤波');
t1=imnoise(t,'salt & pepper',0.3);
figure,imshow(t1),title('加入椒盐噪声后')
t2=t;
for i=1:m-2
for j=1:n-2
t2(i+1,j+1,:)=round(t2(i,j,:)/9+t2(i,j+1,:)/9+t2(i,j+2,:)/9+t2(i+1,j,:)/9+t2(i+1,j+1,:)/9+t2(i+1,j+2,:)/9+t2(i+2,j,:)/9+t2(i+2,j+1,:)/9+t2(i+2,j+2,:)/9);
end
end
figure,
subplot(1,2,1),imshow(t2),title('3*3均值滤波');
t3=t;
for i=1:m-4
for j=1:n-4
t3(i+2,j+2,:)=round(t3(i,j,:)/25+t3(i,j+1,:)/25+t3(i,j+2,:)/25+t3(i,j+3,:)/25+t3(i,j+4,:)/25+t3(i+1,j,:)/25+t3(i+1,j+1,:)/25+t3(i+1,j+2,:)/25+t3(i+1,j+3,:)/25+t3(i+1,j+4,:)/25+t3(i+2,j,:)/25+t3(i+2,j+1,:)/25+...
t3(i+2,j+2,:)/25+t3(i+2,j+3,:)/25+t3(i+2,j+4,:)/25+t3(i+3,j,:)/25+t3(i+3,j+1,:)/25+t3(i+3,j+2,:)/25+t3(i+3,j+3,:)/25+t3(i+3,j+4,:)/25+...
t3(i+4,j,:)/25+t3(i+4,j+1,:)/25+t3(i+4,j+2,:)/25+t3(i+4,j+3,:)/25+t3(i+4,j+4,:)/25);
end
end
subplot(1,2,2),imshow(t3),title('5*5均值滤波');

高斯滤波

function h = gaussian( hsize, sigma)
siz = (hsize-1)/2;
[x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
arg = -(x.*x + y.*y)/(2*sigma*sigma);
h = exp(arg);
h(h

中值滤波

function [ img ] = median_filter( image, m )
    n = m;
    [ height, width ] = size(image);
    x1 = double(image);
    x2 = x1;
    for i = 1: height-n+1
        for j = 1:width-n+1
            mb = x1( i:(i+n-1),  j:(j+n-1) );
            mb = mb(:);
            mm = median(mb);
            x2( i+(n-1)/2,  j+(n-1)/2 ) = mm;

        end
    end

    img = uint8(x2);
end

t=imread('a1.jpg');
t1=imnoise(t,'salt & pepper',0.3);
imshow(t1),title('加入椒盐噪声');
t2=median_filter(t,3);
figure,imshow(t),title('中值滤波后')

七、实验结果与分析

添加高斯噪声
方案一:利用imnoise()函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方案二:利用imnoise()函数

在这里插入图片描述

方案三:自主生成高斯噪声


在这里插入图片描述

分析:
对于不同强度的高斯噪声,通过上面三种方案的实验,我们可以得出以下结论:
1.均值决定图像的整体灰度范围,随着均值的增大,那么图像整体的灰度同样也会增长,当然,超过255依然为255,但更多的像素靠近255,从视觉上看起来更加偏白,偏亮。
2.方差决定着图像噪声的密集程度及概率分布程度,方差越大,图像中的噪声对图片的影响也就越大,从视觉上看就是更加密集。

添加椒盐噪声
方案一:


在这里插入图片描述
在这里插入图片描述

方案二:


在这里插入图片描述

分析:
对于imnoise()函数中的d,是指噪声的密度,比如d=0.5,则总数的50%的像素都会随机的变为黑白像素,用来模拟现实情况中图片拍摄过程中遇到的突变脉冲。
均值滤波
对高斯噪声:


在这里插入图片描述
在这里插入图片描述

对椒盐噪声:


在这里插入图片描述
在这里插入图片描述

高斯滤波:


在这里插入图片描述
在这里插入图片描述

中值滤波

在这里插入图片描述
在这里插入图片描述

不同滤波方式总结
高斯滤波:适用于噪声趋于正态分布的图像

均值滤波:把每个像素都用周围的8个像素来做均值操作。可以平滑图像,速度快,算法简单。但是无法去掉噪声。

中值滤波:常用的非线性滤波方法 ,也是图像处理技术中最常用的预处理技术。在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。适用于椒盐噪声这种类型的噪声。

八、实验总结及心得体会

通过这次实验,学会了两种噪声和几种滤波方法。在此次实验过程中,觉得有点吃力的就是添加高斯噪声和高斯滤波了,那块需要的高数知识有点遗忘,所以在理解上有点问题,后面在csdn上慢慢学习别人写的文章,最后还是学会了。但是自己写的函数与MATLAB中库函数还是有一定的差别,这里应该是自己在一些细节的部分处理的还不行,以后还是应该深入学习。


haihong.png

你可能感兴趣的:(MATLAB--数字图像处理 图像噪声与滤波处理)