如何正確地給影象新增高斯噪聲
阿新 • • 發佈:2018-11-27
高斯噪聲是一個均值為 0 方差為 的正態分佈,是一個加性噪聲。但要正確地給圖片新增高斯噪聲,還要取決於程式中讀入圖片的資料格式。
如果圖片的資料格式為 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 的正態分佈,然後我們乘以 ,將方差調整到 ,再加到圖片上即可。
如果圖片的資料格式為浮點型,而且資料的範圍為 [0, 1],那麼我們需要對噪聲的方差做一些調整,真正加到圖片上的噪聲方差應該為 ,也即 。
# clean_image float32 (128, 128)
noise_image = clean_image + np.random.rand(128, 128) * sigma / 255
此處 np.random.rand(128, 128) 生成一個均值為 0 方差為 1 的正態分佈,然後我們乘以 ,將真實方差調整到 ,再加到圖片上即可。
在 MATLAB 中,imnoise 會對圖片進行處理,將畫素值縮放到 [0, 1] 之間,因此我們在傳入方差的時候也必須要先進行調整。
noise_image = imnoise(clean_image, 'gaussian', 0, sigma^2/255^2)
有時候,我們真的需要對知識抱有敬畏之心,任何一個小的知識點都沒有那麼簡單。但如果你在這些小的知識點上犯了小錯誤,後果卻是不可想象的。千里之堤毀於蟻穴,與君共勉!
獲取更多精彩,請關注「seniusen」!