椒鹽噪聲和高斯噪聲
在噪聲的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量圖像噪聲。通俗的講就是信號占多少,噪聲占多少,SNR越小,噪聲占比越大。
在信號系統中,計量單位為dB,為10lg(PS/PN), PS和PN分別代表信號和噪聲的有效功率。在這里,采用信號像素點的占比充當SNR,以衡量所添加噪聲的多少。
椒鹽噪聲又稱為脈沖噪聲,它是一種隨機出現的白點(鹽噪聲)或者黑點(椒噪聲)。
高斯噪聲是指它的概率密度函數服從高斯分布(即正態分布)的一類噪聲。
原圖:
代碼:
import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image
import random
def gasuss_noise(image, mean=0, var=0.001):
'''
添加高斯噪聲
mean : 均值
var : 方差
'''
image = np.array(image/255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out*255)
return out
def sp_noise(image,prob):
'''
添加椒鹽噪聲
prob:噪聲比例
'''
output = np.zeros(image.shape,np.uint8)
thres = 1 - prob
for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = random.random()
if rdn < prob:
output[i][j] = 0
elif rdn > thres:
output[i][j] = 255
else:
output[i][j] = image[i][j]
return output
img = cv2.imread("1.jpg")
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 添加椒鹽噪聲,噪聲比例為 0.02
out1 = sp_noise(img, prob=0.02)
# 添加高斯噪聲,均值為0,方差為0.009
out2 = gasuss_noise(img, mean=0, var=0.009)
cv2.imshow('out1',out1)
cv2.imwrite('sp.png',out1)
cv2.imshow('out2',out2)
cv2.imwrite('gasuss.png',out2)
cv2.waitKey(0)
cv2.destroyAllWindows()
實驗結果
高斯(gasuss)
椒鹽(sp)