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


高斯噪聲是一個均值為 0 方差為 \(\sigma_n^2\) 的正態分布,是一個加性噪聲。但要正確地給圖片添加高斯噪聲,還要取決於程序中讀入圖片的數據格式。

如果圖片的數據格式為 uint8,也即數據的范圍為 [0, 255],那么直接生成對應方差的噪聲,然后加到圖片上去。

# 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\),再加到圖片上即可。

如果圖片的數據格式為浮點型,而且數據的范圍為 [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.randn(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」!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM