如何使用 imnoise
将 SNR=5dB 的高斯白噪声添加到图像中?
我知道语法是:
J = imnoise(I,type,parameters)
和:
SNR = 10log<sub>10</sub>[var(image)/var(error image)]
如何使用此 SNR 值向图像添加噪声?
最佳答案
让我们从了解 SNR 与噪声的关系开始。您的错误图像是原始图像和噪声图像之间的差异,这意味着错误图像本身就是噪声。因此,SNR实际上是:
SNR = 10log<sub>10</sub>[var(image)/var(noise)]
对于给定的图像和 SNR=5db,噪声的方差为:
var(noise) = var(image)/10<sup>SNR/10</sup> = 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')
结果如下:
关于matlab - 使用 imnoise 为图像添加高斯噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16008228/