python+OpenCv 图像噪声(椒盐噪声、高斯噪声)
由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。
一、椒盐噪声
椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。
椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
目前,python-OpenCv中没有直接生成噪声的函数,需要自己手动编写,但十分容易。
代码示例:
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
二、高斯噪声
高斯噪声是指噪声密度函数服从高斯分布的一类噪声。由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。
代码示例:
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)
三、代码编写
import cv2 as cv import random import matplotlib.pyplot as plt 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 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 src = cv.imread("E:\\view.jpg") img = src.copy() # 调用噪声函数 img_sp = sp_noise(img, prob=0.02) # 噪声比例为0.02 img_gauss = gasuss_noise(img, mean=0, var=0.01) # 均值为0,方差为0.01 # 显示图像 cv.imshow("src", img) cv.imshow("sp", img_sp) cv.imshow("gauss", img_gauss) cv.waitKey(0) cv.destroyAllWindows()
原图:
椒盐噪声:
高斯噪声:
原文链接:https://blog.csdn.net/qq_45832961/article/details/122309422