使用imnoise为图像添加高斯噪声

时间:2013-04-15 05:31:01

标签: matlab noise

如何使用imnoise将SNR = 5dB的高斯白噪声添加到图像中?

我知道语法是:

J = imnoise(I,type,parameters)

  

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

如何使用此SNR值为图像添加噪点?

1 个答案:

答案 0 :(得分:11)

让我们首先看看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是其差异。同样重要的是要注意imnoise假设图像I的强度范围为0到1。

在我们的例子中,我们将添加零均值噪声,其方差为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')

结果如下:

enter image description here