我想知道您是否可以就如何分别向图像添加脉冲和伽马噪声给我一些建议?使用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))
等等
现在,这应该让你开始:)