【ISP】图像噪声类型

图像噪声:造成图像失真、质量下降的图像信号,图像上引起较强视觉效果的孤立像元点块

  • 空间域处理:借助像元与其邻近像元之间的关系来判断并去除噪声
  1. 均值滤波
  2. 中值滤波
  3. 边缘保持平滑滤波
  • 变换域处理:在图像的某个变换域内去除或者压缩噪声的变换域系数
  1. 傅里叶变换
  2. 小波变换
  3. 主成分变换

1.常见噪声类型

噪声具可被认为是由概率密度函数表示的随机变量,通常采用噪声分量灰度值的统计特性进行描述,根据统计特征分为周期噪声和随机噪声,根据图像噪声关系分为加性噪声和乘性噪声

  • 混入加性噪声的图像 
  • 混入乘性噪声的图像 

g(x,y)为含噪图像,f(x,y)为原始图像,n(x,y)为噪声

1.1高斯噪音(Gaussian Noise)

高斯噪声是一种常见的随机噪声类型,它在许多自然现象和工程应用中都会出现。其特点是随机的幅度和分布,符合正态分布(也称为高斯分布)。高斯噪声的产生可以由多种因素引起,例如电子元件的热噪声、光线的散射和传感器的非线性响应等。

高斯噪声会对图像产生以下影响:

图像细节模糊化:高斯噪声会在图像中引入随机干扰,导致图像细节变得模糊。
降低图像对比度:噪声会使图像的像素值变得不稳定,从而降低了图像的对比度。
影响图像分析和处理:在许多计算机视觉和图像处理任务中,噪声会干扰到对目标的检测、识别和测量。

高斯噪声在许多场景中都会出现,比如:

传感器捕获:在数字摄像头、声音采集器等传感器设备中,由于传感器的本身特性和外部环境等因素,会引入高斯噪声。
通信信号传输:在无线通信、有线通信等信号传输过程中,信号可能会受到干扰,从而产生高斯噪声。
天文学观测:望远镜在观测外太空物体时,由于大气扰动等因素,会产生高斯噪声。

import numpy as np
import cv2

# 读取图片
image = cv2.imread('planck.jpg', cv2.IMREAD_COLOR)

# 生成高斯噪声
mean = 0
var = 0.8
sigma = var ** 0.5
gaussian = np.random.normal(mean, sigma, image.shape).astype('uint8')
noisy_image = cv2.add(image, gaussian)

# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

高斯噪声图片

1.2椒盐噪声(Salt and Pepper Noise)

椒盐噪声是一种常见的图像噪声,其特点是在图像中随机分布的黑白像素点,通常以黑色和白色的点来模拟椒和盐。这种噪声可能会在图像采集、传输或存储过程中引入,通常由于设备故障、传感器损坏、传输信号干扰或存储介质老化等原因引起。

椒盐噪声会对图像产生以下影响:

  1. 图像中出现随机的黑点和白点:这些黑点和白点会在图像中随机分布,导致图像中的细节和特征丧失。
  2. 降低图像质量:椒盐噪声会使图像的可视质量下降,降低了图像的清晰度和细节。
  3. 影响图像分析和处理:在许多图像处理和计算机视觉任务中,噪声会干扰到对目标的检测、识别和分析。

椒盐噪声在许多场景中都可能出现,比如:

  1. 摄影:在低光条件下拍摄照片,或者由于相机传感器损坏或脏污而引入椒盐噪声。
  2. 传感器故障:在数字摄像头、声音采集器等传感器设备中,由于传感器的损坏或故障,可能会引入椒盐噪声。
  3. 图像传输:在图像传输过程中,信号可能会受到干扰,从而产生椒盐噪声。

椒盐噪声展示为:

def salt_pepper_noise(image, salt_prob, pepper_prob):
    noisy_image = np.copy(image)
    total_pixels = image.shape[0] * image.shape[1] #计算图像的总像素数
    
    num_salt = int(total_pixels * salt_prob) #通过将总像素数与指定的椒盐噪声比例相乘,得到要添加的椒盐噪声的数量。
    salt_coords = [np.random.randint(0, i-1, num_salt) for i in image.shape]
    noisy_image[salt_coords[0], salt_coords[1]] = 255

    num_pepper = int(total_pixels * pepper_prob)
    pepper_coords = [np.random.randint(0, i-1, num_pepper) for i in image.shape]
    noisy_image[pepper_coords[0], pepper_coords[1]] = 0

    return noisy_image

# 使用方法
noisy_image = salt_pepper_noise(image, salt_prob=0.1, pepper_prob=0.1)
# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.3泊松噪声(Poisson Noise)

泊松噪声是一种常见的图像噪声,它源于光子在成像过程中的随机性。具体来说,泊松噪声是由于光子到达相机传感器的数量具有随机性,特别是在低光条件下或者拍摄快门速度较快时,泊松噪声会更为显著。

泊松噪声通常呈现为图像中的亮度和颜色的随机变化,这种变化不是由于真实场景的特性所引起的,而是由成像系统的随机性和量化误差所引起的。

具体场景包括:

  1. 低光条件下的拍摄:在光线不足的情况下,相机传感器接收到的光子数量较少,从而增加了泊松噪声的出现几率。
  2. 高ISO设置:高ISO设置会放大传感器接收到的信号,但也会放大噪声信号,特别是泊松噪声。
  3. 医学图像:在X射线或核磁共振成像中,由于光子或电子的随机性,图像中会存在泊松噪声。

成因

存在的根本原因是因为光是由离散的光子构成(光的粒子性)。光源发出的光子打在CMOS上,从而形成一个可见的光点。光源每秒发射的光子到达CMOS的越多,则该像素的灰度值越大。但是因为光源发射和CMOS接收之间都有可能存在一些因素导致单个光子并没有被CMOS接收到或者某一时间段内发射的光子特别多,所以这就导致了灰度值会有波动,也就是所谓的散粒噪声。举例而言,在光源强度比较低的时候,比如说设定光强为每秒5个光子的时候,那么每秒实际CMOS接受到的光子数可能从0到10(服从泊松分布)。

和泊松分布的关系

从成因中不难看出,泊松噪声是一种和光强相关的噪声,光强越大,接收到的光子数波动越大,因此泊松噪声越严重。泊松分布是一种均值等于方差的分布,因此可以很好地形容“越亮则波动越大”这一现象,因此采用泊松分布来建模。

消除方式

常见的消除方式是首先通过方差稳定变换,将原始图像或视频转换为方差稳定的图像或视频,假设在图像或视频的局部区域均值保持稳定,则可以使用诸如 Nonlocal-means 等方法进行去除,然后逆变换得到去噪后的图像。常用于光学成像泊松噪声去除的方法为 Anscombe 变换【F. J. ANSCOMBE, THE TRANSFORMATION OF POISSON, BINOMIAL AND NEGATIVE-BINOMIAL DATA, Biometrika, Volume 35, Issue 3-4, December 1948, Pages 246–254.】,即:

可见该变换利用了根号运算的特点,即在x较大时,y的值不再发生很大的变动,因此方差得到一定程度的稳定:

泊松噪声图片展示为:

# 生成泊松噪声
noise = np.random.poisson(image / 255.0) * 255
noisy_image = np.clip(image + noise, 0, 255).astype('uint8')

# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.4瑞利噪声(Rayleigh Noise)

瑞利噪声(Rayleigh Noise)是一种在图像或信号处理中常见的随机噪声模型。它的概率密度函数(PDF)遵循瑞利分布。

瑞利噪声通常由以下情况引起:

  1. 通信系统中的干扰:在无线通信中,信号可能会受到多径传播、障碍物遮挡等因素的影响,从而导致接收到的信号出现瑞利噪声。
  2. 医学成像中的噪声:在医学成像如超声波成像等领域,瑞利噪声可以由于声波在人体组织中传播时的吸收和散射引起。
  3. 传感器噪声:某些传感器测量过程中的不确定性也可能呈现瑞利噪声的特征。

瑞利噪声的特点是其幅值的分布服从瑞利分布,而相位是均匀分布的。

瑞利噪音图片展示;

def generate_rayleigh_noise(image_shape, scale):
    noise = np.random.rayleigh(scale, image_shape)
    return noise

# 生成瑞利噪声
scale = 50  # 调整此参数以改变噪声幅度
rayleigh_noise = generate_rayleigh_noise(image.shape[:2], scale).astype('uint8')
# 扩展维度以匹配图像的通道数
periodic_noise = np.stack((rayleigh_noise,) * 3, axis=-1)
# 将噪声叠加到图像上
noisy_image = cv2.add(image, periodic_noise)

# 显示带噪声的图像
cv2.imshow('Noisy Image with Rayleigh Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.5爱尔兰(伽马)噪声

爱尔兰(伽马)噪声是一种噪声模型,通常用于描述在低光照条件下的传感器噪声,如图像传感器或其他感光设备。它的概率密度函数(PDF)遵循伽马分布。

具体来说,爱尔兰噪声的概率密度函数如下:

其中,k和θ是分布的参数,Γ(k) 是伽马函数。

在图像处理领域,爱尔兰噪声通常由于低光照条件下的电子噪声或传感器特性而引起。它会导致图像中的一些像素变得异常亮或异常暗,从而降低了图像的质量。

在图像处理中,我们可以使用一些滤波技术或者采用其他后处理方法来减轻或去除爱尔兰噪声,以提升图像的质量和可用性。

伽马噪声展示:

# 生成伽马噪声
shape, scale = 10.0,10.0  # 设置伽马分布的参数
gamma_noise = np.random.gamma(shape, scale, image.shape).astype('uint8')

# 将噪声叠加到图像上
noisy_image = cv2.add(image, gamma_noise)

# 显示带噪声的图像
cv2.imshow('Noisy Image with Gamma Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.6周期性噪声(Periodic Noise)

周期性噪声是一种在图像或信号中以特定频率和振幅重复出现的噪声。它通常以正弦或余弦波形的形式呈现,具有明显的周期性结构。周期性噪声可以在图像处理、信号处理和音频处理等领域中出现。

周期性噪声的出现情况和场景

  1. 传感器干扰:在图像或信号采集过程中,传感器可能受到电磁干扰或其他环境因素的影响,导致信号中出现周期性噪声。
  2. 电力干扰:在拍摄或录制过程中,可能会受到电源设备的电磁干扰,导致图像中出现周期性的条纹或噪点。
  3. 光源干扰:在照明条件不稳定的环境下拍摄图像,可能会因为光源频率的波动而产生周期性噪声。
  4. 传输噪声:在图像或信号传输过程中,可能会受到传输介质或设备的干扰,导致信号中出现周期性变化。
  5. 设备缺陷:一些摄像头或录音设备可能存在硬件缺陷,会引入周期性噪声。

周期性噪声的存在会影响到图像质量或信号的准确性,因此在图像处理和信号处理中,常常需要采取相应的方法来减少或去除周期性噪声,以提高数据的可靠性和可用性。

周期性噪音展现为:

import numpy as np
import cv2

def generate_periodic_noise(image_shape, frequency):
    x = np.arange(image_shape[1])
    y = np.arange(image_shape[0])
    xx, yy = np.meshgrid(x, y)
    noise = np.sin(2 * np.pi * frequency * xx / image_shape[1])
    return noise

# 读取图片
image = cv2.imread('planck.jpg', cv2.IMREAD_COLOR)

# 生成周期性噪声
frequency = 0.1  # 调整此参数以改变噪声频率
periodic_noise = generate_periodic_noise(image.shape[:2], frequency)

# 将噪声映射到 0-255 范围内
periodic_noise = ((periodic_noise - periodic_noise.min()) / (periodic_noise.max() - periodic_noise.min()) * 255).astype('uint8')

# 扩展维度以匹配图像的通道数
periodic_noise = np.stack((periodic_noise,) * 3, axis=-1)

# 将噪声叠加到图像上
noisy_image = cv2.add(image, periodic_noise.astype(np.uint8))

# 显示带噪声的图像
cv2.imshow('Noisy Image with Periodic Noise', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

图像数据噪音是在图像获取、传输或处理过程中引入的不希望的随机或人为干扰,它会影响图像质量和可用性。常见的图像噪音种类包括高斯噪音、椒盐噪音、泊松噪音、斑点噪音、周期性噪音等。

在Python中,我们可以利用NumPy和OpenCV等库来生成各种类型的噪音。例如,可以通过生成随机数并将其叠加到图像上来模拟高斯噪音,或者在图像中随机生成黑白像素来模拟椒盐噪音。对于泊松噪音和斑点噪音,可以使用相应的数学模型来生成。

1.7指数分布噪声

1.8均匀分布噪声

2.随机噪声类型识别

 选取图像中一小块信噪比高的单色区域,查看直方图形状判断噪声类型

3.周期噪声识别

周期噪声是一种依赖空间位置的噪声,由成像系统产生,用正余弦函数来表示

A是振幅,u0、v0是关于x与y轴的正弦频率,Bx、By是关于原点的相移,离散傅里叶变换为

周期噪声趋向于产生频率尖峰即高亮点,在频谱图中心原点对称的位置上存在成对冲击

4.空间域去噪声

噪声像元灰度值与周边不协调,可利用局部窗口的灰度值统计特性(如均值、中值)去除噪声

均值滤波:取每个像元邻域内像元平均值代替邻域中心的像元值

中值滤波:取每个像元邻域内像元中值代替邻域中心的像元值

边缘保持平滑滤波:先判断像元是否为边缘,不是则进行平滑处理,使用K近邻均中值滤波,找出K个接近邻域中心灰度值的像元,取平均值

数学形态学去噪声:开运算抑制峰值噪声,闭运算抑制低谷噪声,通常使用开闭运算的组合

5.傅里叶变换去噪声

把图像从空间域变换到频率域,在频率域对噪声成分进行掩膜滤波,把图像反变换到空间域

6.滤波器

  • 低通滤波器:滤除高频
  • 带阻滤波器:只滤除设定范围之内的频率,而通过范围之外的频率
  • 陷波滤波器:滤除低频

6.1低通滤波器:理想低通滤波器

6.2低通滤波器:巴特沃斯低通滤波器

6.3低通滤波器:高斯低通滤波器

6.4带阻滤波器

6.5陷波滤波器

7.小波变换去噪声

利用小波变换把含噪信号分解到多尺度中,在每一尺度下抑制或去除属于噪声的小波系数,保留并增强属于信号的小波系数,最后重构出小波消噪后的信号

  • 高频系数置零:将每一层的高频系数(HH、HL、LH)都置零,然后利用小波系数重构图像

  • 小波阈值法:设置阈值将信号能量与噪声能量在小波域区分开,分为硬软阈值方法

 

通用阈值:σ为噪声的标准差,N为信号长度

8.主成分变换去噪声

用于多波段数据,噪声主要集中在后面几个分量,选择前面噪声较少的分量进行反向变换

9.空间域图像去椒盐噪声

10.傅里叶变换去周期噪声

11.空间域与频率与去噪声对比

参考

1.图像数据噪音种类以及Python生成对应噪音_高斯噪声-CSDN博客

2. https://zhuanlan.zhihu.com/p/139154447?utm_id=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值