如何给图片添加泊松(poisson)噪声(附Python代码)

问题背景:

在做噪声添加实验时,需要给图像添加Poisson噪声,下文提供添加泊松噪声的代码:


什么是泊松噪声:

在RAW格式图像中,经常出现高斯噪声和散粒噪声。高斯噪声与光线的强弱无关,也就是说无论图像的像素值是多少,噪声的平均水平不变。另外一种是散粒噪声,其符合泊松分布,因此也叫泊松噪声,泊松噪声的强度会随着光线变强而变大,也就是说图像的像素值越大,泊松噪声出现的频率也越大。泊松噪声产生原理:光源发出的光子照射在CMOS上,从而形成一个可见的光点。CMOS在有些时候可能无法接收所有的光子,或者有时候接收到的光子特别多,这就导致灰度值会产生波动,这时候就会发生泊松噪声。


解决方案:

为了模拟工业相机采集图像时产生的泊松噪声,对图像数据集进行加噪处理,处理过程如下:

import os
import numpy as np
import cv2

path = './.../.../'
img_name = 'xx.jpg'
image = cv2.imread(os.path.join(path,img_name)) # 读取图像 path为存储图像路径,img_name为图像文件名
# 添加噪声
noise_type = np.random.poisson(lam=0.03,size=(2177,2233,1)).astype(dtype='uint8') # lam>=0 值越小,噪声频率就越少,size为图像尺寸
noise_image = noise_type+image  # 将原图与噪声叠加
cv2.imshow('添加噪声后的图像',noise_image)
cv2.waitKey(0)
cv2.destroyWindow()
好的,以下是代码: ``` import cv2 import numpy as np # 读取图片 img = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE) # 添加高斯噪声 mean = 0 var = 100 sigma = var ** 0.5 gauss = np.random.normal(mean, sigma, img.shape) gauss = gauss.reshape(img.shape) img_gauss = img + gauss # 添加椒盐噪声 s_vs_p = 0.5 amount = 0.04 salt = np.ceil(amount * img.size * s_vs_p) coords = [np.random.randint(0, i - 1, int(salt)) for i in img.shape] img_salt = img.copy() for coord in coords: img_salt[coord[0], coord[1]] = 255 pepper = np.ceil(amount * img.size * (1 - s_vs_p)) coords = [np.random.randint(0, i - 1, int(pepper)) for i in img.shape] img_saltpepper = img_salt.copy() for coord in coords: img_saltpepper[coord[0], coord[1]] = 0 # 添加泊松噪声 lam = 10 poisson = np.random.poisson(lam, img.shape) img_poisson = img + poisson # 中值滤波 kernel_size = 3 img_gauss_median = cv2.medianBlur(img_gauss, kernel_size) img_salt_median = cv2.medianBlur(img_salt, kernel_size) img_saltpepper_median = cv2.medianBlur(img_saltpepper, kernel_size) img_poisson_median = cv2.medianBlur(img_poisson, kernel_size) # 显示图片 cv2.imshow('Original Image', img) cv2.imshow('Gauss Noise Image', img_gauss) cv2.imshow('Salt Noise Image', img_salt) cv2.imshow('Salt & Pepper Noise Image', img_saltpepper) cv2.imshow('Poisson Noise Image', img_poisson) cv2.imshow('Gauss Noise Median Filter Image', img_gauss_median) cv2.imshow('Salt Noise Median Filter Image', img_salt_median) cv2.imshow('Salt & Pepper Noise Median Filter Image', img_saltpepper_median) cv2.imshow('Poisson Noise Median Filter Image', img_poisson_median) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码实现了对一个灰度图像添加高斯、椒盐、泊松噪声,并对这些噪声图像进行了中值滤波处理。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值