添加高斯噪声
概念
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声。
我的理解:高斯噪声就是符合高斯分布的噪声,在数字图像处理这块就是二维的高斯分布(正态分布)。那么怎么添加高斯噪声呢?首先我们肯定要得到一个二维的、符合高斯分布的噪声矩阵,最后将其添加到原图像上。这样高斯噪声就添加成功了。
方法一:利用randn()函数生成高斯噪声
这里需要用到randn()函数,该函数就专门用来生成正态分布数据的一个函数。
比如 randn(10,10),然后这个矩阵和原图像矩阵相加即可(注意缩放灰度范围)
randn(10,10)
ans =
-0.3587 0.6694 0.2922 0.4127 -0.4399 -0.2027 1.2917 -1.2807 0.0522 -0.2097
1.4851 -0.2349 -0.0809 -1.0475 0.4734 -0.8012 -1.3658 -2.4489 1.2525 -0.0725
0.1214 0.2553 0.2774 -0.9508 -0.3378 -1.1350 0.7951 -0.6749 -0.1797 -0.5646
-0.7056 1.5769 -0.8234 1.5896 1.5743 0.1304 -0.3575 -1.0971 -0.2286 -1.5035
1.4605 0.6227 -0.6059 1.5939 0.0120 -0.1012 -0.9397 -1.6988 -2.3375 1.0503
-0.2038 0.7016 0.7310 -0.4053 -0.0419 -0.3276 -0.7675 0.6319 0.3662 -1.0595
-1.3164 0.1579 0.3200 -0.2055 0.5508 -0.6350 0.7769 1.1788 1.1854 -1.0070
0.1054 1.0071 0.4267 0.6462 -1.1893 -1.8829 -1.2166 -0.2838 1.0378 0.8280
0.9141 -1.5962 -0.0540 1.5489 1.0449 0.6155 -0.6227 0.2447 0.2955 -0.7770
-0.7474 0.6233 1.3306 -0.2167 -0.2423 1.3778 -1.0203 -1.1946 0.4893 0.0451
代码:
t=imread('a1.jpg');
[m,n,z]=size(t);
y=0+0.1*randn(m,n);%二维高斯分布矩阵 0是均值 0.1是标准差
%先将其double化,再除以255 便于后面计算
t1=double(t)/255;
%加上噪声
t1=t1+y;
%将像素范围扩大至0--255
t1=t1*255;
%转换为uint8类型
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');
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的高斯噪声');
效果图:
注意:imnoise()中参数写的是方差,而方法一、二中是标准差。