椒鹽噪聲
圖像噪聲之椒鹽噪聲(Salt And Pepper Noise)
概述:
椒鹽噪聲(salt & pepper noise)是數字圖像的一個常見噪聲,所謂椒鹽,椒就是黑,鹽就是白,椒鹽噪聲就是在圖像上隨機出現黑色白色的像素。椒鹽噪聲是一種因爲信號脈衝強度引起的噪聲,產生該噪聲的算法也比較簡單。
算法步驟:
我們使用信噪比(Signal NoiseRate)衡量圖像噪聲,
圖象的信噪比應該等於信號與噪聲的功率譜之比,但通常功率譜難以計算,有一種方法可以近似估計圖象信噪比,即信號與噪聲的方差之比。首先計算圖象所有象素的局部方差,將局部方差的最大值認爲是信號方差,最小值是噪聲方差,求出它們的比值,再轉成dB數,最後用經驗公式修正。
如果是灰度圖像的話,SNR=(潔淨圖片中的像素點的灰度值之和)/abs(噪聲圖片的灰度值之和-潔淨圖片中的灰度值之和)爲該圖像的信噪比。
給一副數字圖像加上椒鹽噪聲的步驟如下:
- (1)指定信噪比 SNR (其取值範圍在[0, 1]之間)
- (2)計算總像素數目 SP, 得到要加噪的像素數目 NP = SP * (1-SNR)
- (3)隨機獲取要加噪的每個像素位置P(i, j)
- (4)指定像素值爲255或者0。
- (5)重複3,4兩個步驟完成所有像素的NP個像素
- (6)輸出加噪以後的圖像
編程實例:
爲簡單起見,直接使用灰度圖進行測試,彩色圖的原理是相同的。
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
from numpy import*
#讀取圖片,灰度化,並轉爲數組
img = im = array(Image.open('./source/test.jpg').convert('L'))
#信噪比
SNR = 0.6
#計算總像素數目 SP, 得到要加噪的像素數目 NP = SP * (1-SNR)
noiseNum=int((1- SNR)*img.shape[0]*img.shape[1])
#於隨機位置將像素值隨機指定爲0或者255
for i in range(noiseNum):
randX=random.random_integers(0,img.shape[0]-1)
randY=random.random_integers(0,img.shape[1]-1)
if random.random_integers(0,1)==0:
img[randX,randY]=0
else:
img[randX,randY]=255
#顯示圖像
gray()
imshow(img)
show()
運行結果:
原圖
SNR = 0.8
SNR = 0.6
SNR = 0.4
結語:
本篇博客主要介紹了椒鹽噪聲這種常見的圖像噪聲,希望對大家有所幫助~