如何在不使用matlab中的imnoise函数的情况下为图像添加脉冲和伽马噪声?

时间:2013-04-25 13:50:01

标签: matlab noise

我想知道你是否可以就如何分别为图像添加冲动和Gamma噪音给我一些建议?使用matlab的imnoise函数很容易,但是我不允许使用imnoise,我们的TA说你可以使用rand函数。

我遇到了这段代码,但它似乎无法正常工作(对于脉冲噪音):

    noisyimage=originalimage+255*rand(size(originalimage)); 

1 个答案:

答案 0 :(得分:1)

这行代码存在一些问题:

  • 255*rand()生成双值数字,而您的图片可能属于uint8左右类型(请与class(originalimage)核对)。要修复,请使用randi例如:

    noisyimage = randi(255, size(originalimage), class(originalimage));
    

    (使用intmax(class(originalimage))完全通用)

  • 您将最大幅度为255的噪声添加到所有像素。这可能会溢出许多像素(即,获得的指定值大于255)。为避免使用

    之类的东西
    noisyimage = min(255, originalimage + randi(...) );
    
  • 噪音方向仅为。真正的噪声有时会使向下像素的值。所以,使用像

    这样的东西
    noisyimage = max(0, min(255, originalimage + randi(...)-127 );
    
  • 255的最大幅度实际上方式太大;你可能会破坏你的整个图像,只会产生噪音。尝试一些不同的幅度A,如下所示:

    noisyimage = max(0, min(255, originalimage + randi(A, ...)-round(A/2) );
    
  • randi使用的均匀分布并不是一个非常好的噪音来源;你想要一些其他发行版。使用正态分布:

    uint8(A*randn(...)-round(A/2))
    

    或gamma:

    uint8(A*randg(...)-round(A/2))
    

现在,这应该让你开始:)