如何正確地給圖像添加高斯噪聲

高斯噪聲是一個均值爲 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

相關文章
相關標籤/搜索