9

を使用して SNR=5dB のホワイト ガウス ノイズを画像に追加するにはどうすればよいimnoiseですか?

構文は次のとおりです。

J = imnoise(I,type,parameters)

と:

SNR = 10log10[var(image)/var(error image)]

この SNR 値を使用して画像にノイズを追加するにはどうすればよいですか?

4

1 に答える 1

12

SNR がノイズにどのように関係しているかを確認することから始めましょう。エラー画像は、元の画像とノイズのある画像の違いです。つまり、エラー画像はノイズそのものです。したがって、実際の SNR は次のようになります。

SNR = 10log10[var(image)/var(noise)]

特定の画像と SNR=5db の場合、ノイズの分散は次のようになります。

var(noise) = var(image)/10SNR/10 = var(image)/sqrt(10)

では、これらすべてを MATLAB コードに変換してみましょう。Iコマンドを使用してイメージにホワイト ガウス ノイズを追加する ( で表す) 場合imnoise、構文は次のとおりです。

I_noisy = imnoise(I, 'gaussian', m, v)

ここmで、 は平均ノイズ、vはその分散です。がイメージの強度範囲を 0 ~ 1とimnoise仮定していることに注意することも重要です。I

この場合、ゼロ平均ノイズを追加し、その分散はv = var(I(:))/sqrt(10)です。完全なコードは次のとおりです。

%// Adjust intensities in image I to range from 0 to 1
I = I - min(I(:));
I = I / max(I(:));

%// Add noise to image
v = var(I(:)) / sqrt(10);
I_noisy = imnoise(I, 'gaussian', 0, v);

明確化: を使用var(I(:))して、画像内のすべてのサンプルの分散を計算します(列に沿って分散を計算するIの代わりに)。var(I)

お役に立てれば!

I = imread('eight.tif');
I = double(I);

%// Adjust intensities in image I to range from 0 to 1
I = I - min(I(:));
I = I / max(I(:));

%// Add noise to image
v = var(I(:)) / sqrt(10);
I_noisy = imnoise(I, 'gaussian', 0, v);

%// Show images
figure
subplot(1, 2, 1), imshow(I), title('Original image')
subplot(1, 2, 2), imshow(I_noisy), title('Noisy image, SNR=5db')

結果は次のとおりです。

ここに画像の説明を入力

于 2013-04-15T09:37:50.217 に答える