如何正确地给图像添加高斯噪声

Posted seniusen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确地给图像添加高斯噪声相关的知识,希望对你有一定的参考价值。

高斯噪声是一个均值为 0 方差为 (sigma_n^2) 的正态分布,是一个加性噪声。但要正确地给图片添加高斯噪声,还要取决于程序中读入图片的数据格式。

如果图片的数据格式为 uint8,也即数据的范围为 [0, 255],那么直接生成对应方差的噪声,然后加到图片上去。

# clean_image uint8 (128, 128)
noise_image = clean_image + np.random.rand(128, 128) * sigma

此处 np.random.rand(128, 128) 生成一个均值为 0 方差为 1 的正态分布,然后我们乘以 (sigma_n),将方差调整到 (sigma_n^2),再加到图片上即可。

如果图片的数据格式为浮点型,而且数据的范围为 [0, 1],那么我们需要对噪声的方差做一些调整,真正加到图片上的噪声方差应该为 (sigma_{real}^2 = frac{sigma_n^2}{255^2}),也即 (sigma_{real} = frac{sigma_n}{255})

# clean_image float32 (128, 128)
noise_image = clean_image + np.random.rand(128, 128) * sigma / 255

此处 np.random.rand(128, 128) 生成一个均值为 0 方差为 1 的正态分布,然后我们乘以 (sigma_n / 255),将真实方差调整到 (sigma_n^2),再加到图片上即可。

在 MATLAB 中,imnoise 会对图片进行处理,将像素值缩放到 [0, 1] 之间,因此我们在传入方差的时候也必须要先进行调整。

noise_image = imnoise(clean_image, ‘gaussian‘, 0, sigma^2/255^2)

有时候,我们真的需要对知识抱有敬畏之心,任何一个小的知识点都没有那么简单。但如果你在这些小的知识点上犯了小错误,后果却是不可想象的。千里之堤毁于蚁穴,与君共勉!

获取更多精彩,请关注「seniusen」!
技术分享图片


以上是关于如何正确地给图像添加高斯噪声的主要内容,如果未能解决你的问题,请参考以下文章

使用 imnoise 为图像添加高斯噪声

将高斯噪声添加到没有 numpy 的图像

python使用opencv对图像添加(高斯/椒盐/泊松/斑点)噪声

python使用opencv对图像添加(高斯/椒盐/泊松/斑点)噪声

python使用opencv对图像添加(高斯/椒盐/泊松/斑点)噪声

如何使用 OpenCV 在 Python 中为图像添加噪声(高斯/盐和胡椒等)[重复]