MATLAB--數字圖像處理 添加高斯噪聲

添加高斯噪聲

概念
高斯噪聲是指它的概率密度函數服從高斯分佈(即正態分佈)的一類噪聲。如果一個噪聲,它的幅度分佈服從高斯分佈,而它的功率譜密度又是均勻分佈的,則稱它爲高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩爲常數,是指先後信號在時間上的相關性。高斯白噪聲包括熱噪聲和散粒噪聲。在通信信道測試和建模中,高斯噪聲被用作加性白噪聲以產生加性白高斯噪聲。

我的理解:高斯噪聲就是符合高斯分佈的噪聲,在數字圖像處理這塊就是二維的高斯分佈(正態分佈)。那麼怎麼添加高斯噪聲呢?首先我們肯定要得到一個二維的、符合高斯分佈的噪聲矩陣,最後將其添加到原圖像上。這樣高斯噪聲就添加成功了。

方法一:利用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()中參數寫的是方差,而方法一、二中是標準差。

更多

獲取更多資料、代碼,微信公衆號:海轟Pro
回覆 海轟 即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章