椒鹽噪聲
圖像噪聲之椒鹽噪聲(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
結語:
本篇博客主要介紹了椒鹽噪聲這樣的常見的圖像噪聲。希望對大家有所幫助~