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

标签 matlab noise

如何使用 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')

结果如下:

enter image description here

关于matlab - 使用 imnoise 为图像添加高斯噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16008228/

相关文章:

matlab - 在 MATLAB 中的多个循环中从元胞数组中保存、提取相关数据

matlab - 通过在每次迭代中省略一个索引来生成一组索引的循环

c - c s-function 中局部函数内的变量

matlab - double 图像上的图像泊松噪声(散粒噪声)

java - 我怎样才能平滑我的地形生成器?

c++ - 噪音功能实际上是如何工作的?

algorithm - 找到一个最小化两个集合的最大距离的算法,比贪心算法好

c++ - Hex-rays、MATLAB、MEX、转换 uintptr_t 失败

python - 我使用 OpenSimplex 是否错误

machine-learning - Tensorflow - 权重噪声正则化