图像处理:图像噪声添加
创作时间:
作者:
@小白创作中心
图像处理:图像噪声添加
引用
CSDN
1.
https://blog.csdn.net/WiSirius/article/details/138536494
在图像处理和计算机视觉领域,噪声添加是数据增强的重要手段之一。本文将介绍六种常见的图像噪声类型及其Python实现方法,包括高斯噪声、椒盐噪声、泊松噪声、斑点噪声、指数噪声和均匀噪声。通过这些方法,可以有效提升模型的鲁棒性和泛化能力。
一、高斯噪声
高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差(sigma)的大小来控制添加噪声程度,sigma越大添加的噪声越多图片损坏的越厉害。(高斯噪声更像是早期荧幕上的各种小点)
def gaussian_noise(image):
h, w, c = image.shape
mean = 0
sigma = 25 # 标准差
noise = np.random.normal(mean, sigma, (h, w, c)) #根据均值和标准差生成符合高斯分布的噪声
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
二、椒盐噪声
椒盐噪声就是给图片添加黑白噪点,椒指的是黑色的噪点(0,0,0)盐指的是白色的噪点(255,255,255),通过设置amount来控制添加噪声的比例,值越大添加的噪声越多,图像损坏的更加严重
def jiaoyan_noise(image):
#设置添加椒盐噪声的数目比例
s_vs_p = 0.5
#设置添加噪声图像像素的数目
amount = 0.04
noisy_img = np.copy(image)
#添加salt噪声
num_salt = np.ceil(amount * image.size * s_vs_p)
#设置添加噪声的坐标位置
coords = [np.random.randint(0,i - 1, int(num_salt)) for i in image.shape]
noisy_img[coords[0],coords[1],:] = [255,255,255]
#添加pepper噪声
num_pepper = np.ceil(amount * image.size * (1. - s_vs_p))
#设置添加噪声的坐标位置
coords = [np.random.randint(0,i - 1, int(num_pepper)) for i in image.shape]
noisy_img[coords[0],coords[1],:] = [0,0,0]
#保存图片
return noisy_img
三、泊松噪声
图像中的泊松噪声是由于在成像过程中光子的随机性引起的。当光子以不规则的速率到达传感器时,就会在图像中引入泊松噪声。泊松噪声在图像中表现为亮度值的随机变化,尤其在低亮度区域更为显著。这种噪声使得图像中的细节模糊,并且可能干扰图像处理算法和分析。
def generate_poisson_noise(img, scale=1.0, gray_noise=False):
if gray_noise:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# round and clip image for counting vals correctly
img = np.clip((img * 255.0).round(), 0, 255) / 255.
vals = len(np.unique(img))
vals = 2**np.ceil(np.log2(vals))
out = np.float32(np.random.poisson(img * vals) / float(vals))
noise = out - img
if gray_noise:
noise = np.repeat(noise[:, :, np.newaxis], 3, axis=2)
return noise * scale
def random_generate_poisson_noise(img, scale_range=(0, 1.0), gray_prob=0):
scale = np.random.uniform(scale_range[0], scale_range[1])
if np.random.uniform() < gray_prob:
gray_noise = True
else:
gray_noise = False
return generate_poisson_noise(img, scale, gray_noise)
def random_add_poisson_noise(img, scale_range=(0, 1.0), gray_prob=0):
noise = random_generate_poisson_noise(img, scale_range, gray_prob)
out = img + noise
return out
四、斑点噪声
斑点噪声是数字图像中常见的一种噪声类型,通常表现为图像中出现随机像素点。这种噪声可能是由于图像传感器故障、信号传输错误或图像存储过程中的错误引起的。
def bandian_noise(image):
h,w,c = image.shape
gauss = np.random.randn(h,w,c)
#给图片添加speckle噪声
noisy_img = image + image * gauss
#归一化图像的像素值
noisy_img = np.clip(noisy_img,a_min=0,a_max=255)
return noisy_img
五、指数噪声
在图像处理中,指数噪声可能是由于光照条件不稳定、传感器故障或信号传输错误等原因引起的
def zhishu_noise(img):
a = 10.0
noiseExponent = np.random.exponential(scale=a, size=img.shape)
imgExponentNoise = img + noiseExponent
noisy_img = np.uint8(cv2.normalize(imgExponentNoise, None, 0, 255, cv2.NORM_MINMAX)) # 归一化为 [0,255]
return noisy_img
六、均匀噪声
类似于指数噪声,只不过采样方式不同
def uniform_noise(img):
mean, sigma = 10, 100
a = 2 * mean - np.sqrt(12 * sigma) # a = -14.64
b = 2 * mean + np.sqrt(12 * sigma) # b = 54.64
noiseUniform = np.random.uniform(a, b, img.shape)
imgUniformNoise = img + noiseUniform
noisy_img = np.uint8(cv2.normalize(imgUniformNoise, None, 0, 255, cv2.NORM_MINMAX)) # 归一化为 [0,255]
return noisy_img
总结
目前主流的噪声添加就这么几种,最常用的是高斯和泊松,在数据增强中还是有很大帮助的。
热门推荐
十大热门宠物兔品种,快来了解!
联想1060 6G显卡能玩什么游戏?2025年最新游戏兼容性全解析
如何处理网络著作权侵权
揭秘:“BBAT”万卡AI集群网络架构
聚焦中央一号文件|千亩粮田背后的一块屏幕
差异化战略:四大要素引领市场新风向
在Excel中按照图片制作表格的详细教程
实体请求权的案例解析:从合同纠纷到侵权责任
办公室放什么树好
大模型开发 - 一文搞懂Fine-tuning(大模型微调)
蔡澜新作《花钱的技巧》《赚钱的艺术》出版 引领读者探寻财富与生活的智慧
如何提高团队的工作成效
面罩可以应用于哪些不同的领域和场景?
红磷燃烧的现象是什么
他是农业科学领域的一座“灯塔”
泰国养老签证申请指南及生活优势解析
泰国临近退休人士的医疗保健小贴士
通缉令中的小蜜蜂:揭秘神秘的警用无人机
7-12岁儿童饮食指南:从营养均衡到安全烹饪
防火门胶条的作用及安装方法详解
手表入门指南:从基础概念到选购要点
眼睛干涩?夜盲?都和它有关!一篇文章教你补回来!
每天7个简单动作,改善肺功能,全身轻松~
肺康复运动计划:量身定制的康复之路
四百里漓江 一万年文化 多民族交往交流交融绘就壮美画卷
【原】谈谈英文单词king的起源和意义
矿泉水市场分析怎么开始?
AI解读世界:如何培养孩子的艺术才能
微纳加工技术在哪些领域有重大应用
黑枣的功效与作用、禁忌和食用方法