2016-04-24 74 views
0

目的はゼロ平均と分散400の加法ガウス雑音を画像に加えることです。ガウス雑音、MATLAB

iはゼロ平均および分散0.5の付加ガウスノイズを追加したい場合、例えば、私は、次の2つの方法のいずれかを使用することができる:

1)MATLABでimnoiseコマンド:

    Noisyimg=imnoise(I,'gaussian',0,0.5) 

ここで、Iはノイズが追加されている の画像であり、Noisyimgはノイズの多い画像です。

2)randn コマンドを使用して、平均分布と標準偏差を指定して正規分布 から取得した乱数の行列を作成します。

 noisemat= a*randn(size(I))+ b; where a=standard deviation and b=mean 
     Noisyimg=noisemat+I;     

したがって、ゼロ平均及び0.5、

 noisemat=sqrt(0.5)*randn(size(I))+0; 

の分散の標準偏差 は、分散の平方根であるからです。

しかし、上記の2つの方法を適用してゼロ平均と分散が400の加法ガウス雑音を持つノイズの多い画像を取得しようとすると、目に見えない画像で終わってしまいます。私はする必要があり、実際のノイズの多い出力の絵を持っているので、例えばのために、結果として得られるノイズの多い画像は私がobtaining.Thisする必要があり、実際のノイズの多い画像の近くにどこにもありません方法2、

 noisemat=sqrt(400)*randn(size(I))+0; 
     Noisyimg=noisemat+I; 

を使用して、承知しています取得する。私はコマンドを実装する際に間違いを犯しているのですか、いくつかの重要な点が欠けていますか? 私はガウスノイズを加えようとしていた元の画像と、ノイズを加えた後に得られた画像を添付しました。
original image(I) Noisyimg

任意の助けいただければ幸いです!

+0

「見えない画像」とはどういう意味ですか?元のイメージのRMSは何ですか? –

答えて

0

私は最終的に私が遠くを見ているという結果を得ました。希望するのは助けてください:)

重要な点は、追加するガウス雑音の分散も、追加する画像の範囲に対して相対的にスケーリングする必要があるということです。元の画像はuint8タイプでした。最初は、範囲[0 1]のdouble型に変換されました。

 Noisyimg=imnoise(I,'gaussian',0,400) 

しかし、それは分散がに持っていることが判明:

 I=im2double(imread('chipset1.tif')); 
     figure;imshow(I);title('original image'); 

さて、問題は、最初は400のガウスノイズを追加しようとすると、私はそれは次のように追加しようとしていたが生じました使用する前にスケーリングすることができます。

次のようにそれがスケーリングされる:

分散= (標準偏差)^ 2 /(255)^ 2

したがって、400の分散のために、標準偏差は、スケーリング、20ひいてはです:

  var=(20)^2/(255)^2;%(since the image was of uint8 type) 

      Noisyimg=imnoise(I,'gaussian',0,var) 
      figure;imshow(Noisyimg); 

imnoiseの分散パラメータの変更に注意してください。この相対的なスケーリングは、出力ノイズの多い画像が正確であり、範囲内にあることを保証する。同じことがまた、方法2で行うことができる

:追記として

  noisemat=(sqrt(var))*randn(size(I))+0; 
      Noisyimg=noisemat+I; 
      figure;imshow(Noisyimg); 

、グレースケール画像に分散400のガウスノイズを付加するこの問題は、利用可能であり、デジタル画像処理で参照することができますRafael C.GonzalezおよびRichard E.Woods、第3版、第5章、実施例5.2によるテキストブック。この例の元の画像もここで使用されていましたが、私が投稿した質問でも、私は希望の出力を得られませんでした。

1

2つの問題があります。 1.ダイナミックレンジまたは元の画像。それが[0 1]である場合、分散400の正規分布の値を加算することは、ほとんどノイズを生じることになります。 2.イメージがuint8またはuint16の場合、doubleを追加すると望ましくない影響が生じる可能性があります。ノイズを追加する前に画像をダブルに変換してみてください:

Noisyimg=noisemat+double(I); 
+0

良い提案を感謝します:)。はい、イメージは最初にdouble型に変換されました。元の画像はuint8型で、範囲は[0,1]のdouble型に変換されました。コードは以下の通りです:a = im2double(imread( 'chipset1.tif')); 図; imshow(a);タイトル( '元画像');b =(sqrt(400))* randn(サイズ(a))+0; c = a + b;図。 imshow(c、 '表示範囲'、[]) –

関連する問題