图像处理中的噪声添加方法详解
创作时间:
作者:
@小白创作中心
图像处理中的噪声添加方法详解
引用
CSDN
1.
https://blog.csdn.net/WiSirius/article/details/138536494
在图像处理和计算机视觉领域,噪声添加是数据增强的重要手段之一。通过在图像中添加不同类型的噪声,可以提高模型的鲁棒性和泛化能力。本文将详细介绍六种常见的图像噪声类型及其Python实现方法,包括高斯噪声、椒盐噪声、泊松噪声、斑点噪声、指数噪声和均匀噪声。
一、高斯噪声
高斯噪声是图像处理中最常见的噪声类型之一,它通过在图像像素值上添加服从高斯分布的随机噪声来模拟真实世界中的噪声干扰。高斯噪声的强度可以通过调整高斯分布的标准差(sigma)来控制,标准差越大,添加的噪声越多,图像受损程度越严重。
import numpy as np
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
二、椒盐噪声
椒盐噪声是一种典型的二值噪声,它通过在图像中随机添加黑色(椒)和白色(盐)噪点来模拟传感器故障或传输错误引起的噪声。通过调整噪声比例(amount)参数,可以控制添加噪声的程度。
import numpy as np
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
三、泊松噪声
泊松噪声主要由光子的随机性引起,常见于低光照条件下的图像。这种噪声在图像中表现为亮度值的随机变化,特别是在低亮度区域更为显著。泊松噪声的添加可以模拟实际拍摄过程中光子到达传感器的随机性。
import cv2
import numpy as np
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
四、斑点噪声
斑点噪声是数字图像中常见的噪声类型之一,通常表现为图像中出现随机像素点。这种噪声可能是由于图像传感器故障、信号传输错误或图像存储过程中的错误引起的。
import numpy as np
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
五、指数噪声
指数噪声在图像处理中相对较少见,但仍然可能由光照条件不稳定、传感器故障或信号传输错误等原因引起。
import numpy as np
import cv2
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
六、均匀噪声
均匀噪声类似于指数噪声,但其采样方式不同。均匀噪声在指定范围内均匀分布,可以用于模拟特定类型的噪声干扰。
import numpy as np
import cv2
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
总结
目前主流的噪声添加方法主要包括高斯噪声、椒盐噪声、泊松噪声、斑点噪声、指数噪声和均匀噪声。其中,高斯噪声和泊松噪声在数据增强中应用最为广泛,能够有效提高模型的鲁棒性和泛化能力。通过合理添加噪声,可以模拟真实世界中的各种干扰因素,使模型在面对实际场景时表现更佳。
热门推荐
何谓压缩模量?与压缩系数有何区别和联系
剩者为王!你知道单身戒指戴哪个手指吗?
小拇指戴戒指什么用意
冬季滋补:如何选到最优质的牛骨头炖汤?
秋冬滋补首选:炖牛骨头汤
《大长今》里的牛骨汤:韩国传统美食的文化与制作
晚上胃食管反流怎么办?5种缓解方法全解析
反流性食管炎咳嗽的五种治疗方法
揭秘“日之丸”:一面旗帜的千年变迁
东莞五种特色小吃:从油鸭到米粉,尽显岭南饮食文化
《孤独患者》:一首唱尽都市人内心的歌
Excel表格中计算算术平均数的多种方法
“Average”一词的多重含义及其在生活中的应用探讨
高蛋白饮食助你战胜肠系膜脂膜炎!
炮仗花的花语与文化意义(探寻炮仗花的神秘语言)
屋顶绿化常用植物【炮仗花】
买1斤糯米,教你做甜香软糯的糯米凉糕,风味十足,保姆级攻略
越来越多人便秘,6个因素引起,长期危害不小,教你5个应对策略
孕妇心脏不舒服怎么缓解
小虫子,大危险!夏季防蚊虫叮咬,这份攻略不可少!
女方患有抑郁症,是否可以争取到孩子的抚养权?
对方抑郁能离婚吗怎么办
回望北京亚运盛会,见证记忆中的“亚洲雄风”
从壬辰倭乱到殖民统治:日本扩张野心的历史轨迹
凉拌皮蛋的三种秘制配料方法,让你的凉拌菜焕发新风味!
凉拌菜制作全攻略:从食材处理到调味技巧
日本侵朝背后:大国博弈下的半岛风云
甲午战争:一场改变东亚格局的战争
日本对朝鲜半岛的殖民统治:一段不容忘却的历史
洪洞大槐树:百家姓文化的活化石