2015-04-20 82 views
-3

我想在Matlab中使用「randg」函數將乘法伽瑪噪聲添加到圖像中,並去除該噪聲。我們必須記住,噪聲應該有平均值1和4級。它應該遵循Gamma律(使用Gamma概率分佈函數)。 加入噪音後的圖像變成在Matlab中使用randg伽瑪定律創建噪聲圖像和消除噪聲?

f = u * v; 其中f =噪聲圖像,u =原始圖像,v =噪聲圖像。

伽馬法是: GV(V)= L^L /(Γ(L))V ^(L-1)EXP(-Lv)1_(v≥0)

,其中L是噪音水平和v是噪音。

這裏是我試過的代碼:

img = imread('lena.png'); 
    img1 = img./ 255; 
    imgdob = double(img1); 
    noisyimg = imgdob + randg(1,size(imgdob)) .* 0.4; 
    noisyimg(noisyimg< 0) = 0; 
    noisyimg(noisyimg> 1) = 1; 
    figure,imshow(img); 
    figure,imshow(noisyimg); 
    imwrite(img, 'lenaOriginal.jpg', 'Quality', 100); 
    imwrite(noisyimg, 'lenaNoisy.jpg', 'Quality', 100); 

但我無法得到預期的結果。請給我一個方法。

+1

你嘗試過什麼嗎?在沒有任何努力的情況下詢問代碼的問題可能會被關閉。您可以通過顯示您嘗試的內容以及您卡住的位置來改善您的問題。謝謝! –

+0

是的我已經試過了代碼,這次我和代碼一起編輯了這個問題,但問題是我沒有得到預期的結果。請給我一個方法。 –

+0

@unique_CODER你可以試試我的解決方案,讓我知道它是否解決了這個問題? – krisdestruction

回答

0

0.4是非常具有破壞性的。如此破壞性,它會強制它的閾值爲0或1.你應該嘗試0.2來代替。此外,如果您正在尋找正常的配電噪音,則應使用randn而不是randg。以下代碼在這裏。

請注意,我沒有sexylena.png在我的電腦上,所以我必須使用bag.png來代替。

imgdob = im2double(imread('bag.png')); 
noisyimg = imgdob + randg(1,size(imgdob)) .* 0.15; 
noisyimg(noisyimg< 0) = 0; 
noisyimg(noisyimg> 1) = 1; 
figure,imshow(imgdob); 
figure,imshow(noisyimg); 
imwrite(imgdob, 'lenaOriginal.jpg', 'Quality', 100); 
imwrite(noisyimg, 'lenaNoisy.jpg', 'Quality', 100); 

這些是結果。正常圖像。

normal img

使用randg噪聲圖像。

noisy img randg

如果要改爲使用randn,您可以使用此行代碼來代替。

noisyimg = imgdob + randn(size(imgdob)) .* 0.2; 

嘈雜的圖像使用randn

noisy img randn

至於降噪,請參考Matlab's tutorial for noise removal

+0

但是,如果我使用'randn'函數,那麼噪聲是否遵循伽瑪定律?我如何獲得平均水平和水平? –

+0

@unique_CODER如果你想使用'randg'作爲gamma法則,那麼你可以使用它。我的意思是,'0.4'太強大了,導致它飽和。檢查我的'randg'結果。 – krisdestruction