を使用して SNR=5dB のホワイト ガウス ノイズを画像に追加するにはどうすればよいimnoise
ですか?
構文は次のとおりです。
J = imnoise(I,type,parameters)
と:
SNR = 10log10[var(image)/var(error image)]
この SNR 値を使用して画像にノイズを追加するにはどうすればよいですか?
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')
結果は次のとおりです。