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

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

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

# clean_image uint8 (128, 128)
noise_image = clean_image + np.random.randn(128, 128) * sigma
复制代码

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

若是图片的数据格式为浮点型,并且数据的范围为 [0, 1],那么咱们须要对噪声的方差作一些调整,真正加到图片上的噪声方差应该为 \sigma_{real}^2 = \frac{\sigma_n^2}{255^2},也即 \sigma_{real} = \frac{\sigma_n}{255}spa

# clean_image float32 (128, 128)
noise_image = clean_image + np.random.randn(128, 128) * sigma / 255
复制代码

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

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

noise_image = imnoise(clean_image, 'gaussian', 0, sigma^2/255^2)
复制代码

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

获取更多精彩,请关注「seniusen」! string

相关文章
相关标签/搜索