我想知道您是否可以给我一些关于如何分别为图像添加脉冲和伽马噪声的建议?使用matlab的imnoise函数很容易,但是我不允许使用imnoise,我们的TA说你可以使用rand函数。
我遇到了这段代码,但它似乎不工作,因为它应该(脉冲噪声):
noisyimage=originalimage+255*rand(size(originalimage));
这行代码有几个问题:
-
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))
或
uint8(A*randg(...)-round(A/2))
等。
现在,你应该可以开始了:)