Python-給影象新增椒鹽噪聲和高斯噪聲
阿新 • • 發佈:2021-06-10
椒鹽噪聲和高斯噪聲
在噪聲的概念中,通常採用信噪比(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)