让我们考虑一个3x3像素的图像,现在的值如下所示,如果我应用imnoise函数(MATLAB图像处理工具箱),高斯噪声均值为0,标准差为0,我得到的结果都是1
具有双旋进数据类型的原始矩阵
16 32 64
96 128 192
224 100 50 应用具有0均值和0标准差的高斯噪声后的最终矩阵
1 1 1
1 1 1
1 1 1据我所知,标准差为0的0均值与添加到原始图像上的噪声的0%是一样的。我想知道MATLAB中的imnoise函数是如何工作的。
发布于 2013-11-18 23:59:40
对于高斯图像,imnoise假设图像是范围为0,1的双精度图像。
看看代码中输入图像是如何处理的。如果您在命令行中输入edit imnoise.m,您应该能够看到这一点-它发生在imnoise内的ParseInputs函数下(在我的版本中,第188行更高)。
如果输入图像不是使用im2double (自动缩放)转换为double的double→,则存储输入类(以便可以在末尾转换回输出)。
如果输入图像是不转换的double→,只需使用a = max(min(a,1),0)裁剪到0 1即可。因此,当所有值都大于1时,您的示例将被简单地裁剪为1矩阵。
这(使用您的示例数据)将执行您预期的操作:
I2 = imnoise(uint8(I),'gaussian',0,0);更一般地说,这不是图像处理工具箱中唯一一个在doubles没有0,1范围时返回意外结果的函数。如果要以双倍格式工作,im2double会自动从其他数据类型重新调整比例,也可以手动重新调整比例。
https://stackoverflow.com/questions/20051292
复制相似问题