【问题标题】:How to add 5% percent Gaussian noise to image如何在图像中添加 5% 的高斯噪声
【发布时间】:2015-10-28 08:45:03
【问题描述】:

让我们定义:

“百分比噪声”数字表示高斯白噪声的标准偏差与整个图像的信号的百分比。

假设我有一张大脑图像,我想通过 Matlab 代码向整个图像(组织)添加 5% 高斯噪声

I=imread('brain91.png'); I=rgb2gray(I);I=double(I);
I = I - min(I(:));
I = I / max(I(:));

%// Add noise to image
v = 0.05*var(I(:));
I_noisy = imnoise(I, 'gaussian', 0, v);
I_noisy=255.*I_noisy;
subplot(121);imshow(I,[]);subplot(122);imshow(I_noisy,[])

该图显示了原始图像(左侧)和右侧的噪声图像。您认为我的实现对于上述定义是否正确? - (约 5% 的高斯噪声 by set v = 0.05*var(I(:)))

【问题讨论】:

  • 既然标准差是方差的平方根,那不应该是v = 0.05^2 * var(I(:))吗?
  • 感谢 dasdingonesin,这真的很好。但是,我不确定。需要有人验证。但我认为 var 函数返回图像的变化和句子 5% 这意味着增加 5% 的变化,而不是 sqrt 的变化

标签: matlab image-processing noise


【解决方案1】:

您的代码看起来正确。 我使用切片器包来添加或消除噪音。您可以尝试将结果与它进行比较:

【讨论】:

    【解决方案2】:

    Ander Biguri 和 dasdingonesin 都有正确的断言。您的代码肯定会正确地将高斯噪声添加到图像中,但请确保通过在您的 var 计算中对 0.05 进行平方来计算实际方差。

    或者,您可以使用std 而不是var 并对整个计算求平方以获得相同的结果:

    I=imread('brain91.png'); I=rgb2gray(I);I=double(I);
    I = I - min(I(:));
    I = I / max(I(:));
    
    %// Add noise to image
    %v = (0.05^2)*var(I(:)); %// Option #1
    v = (0.05*std(I(:)))^2; %// Option #2
    I_noisy = imnoise(I, 'gaussian', 0, v);
    I_noisy=255.*I_noisy;
    subplot(121);imshow(I,[]);subplot(122);imshow(I_noisy,[])
    

    【讨论】:

    • 是的。我在变异和标准推导之间弄错了。谢谢你
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2017-10-11
    • 2013-04-07
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多