我想知道你是否可以就如何分别为图像添加冲动和Gamma噪音给我一些建议?使用matlab的imnoise函数很容易,但是我不允许使用imnoise,我们的TA说你可以使用rand函数。
我遇到了这段代码,但它似乎无法正常工作(对于脉冲噪音):
noisyimage=originalimage+255*rand(size(originalimage));
答案 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))
等
现在,这应该让你开始:)