[ISP] raw图常见的噪声种类以及生成原因

在ISP算法处理前,噪声是影响raw图像质量的关键因素。不同的噪声类型具有不同的分布特性。本文将以某个像素位置 ( x , y ) (x, y) (x,y) 为例,分析 高斯噪声、泊松噪声、椒盐噪声 的生成方式,并给出具体的模拟公式。


1. 高斯噪声(Gaussian Noise)

定义 :高斯噪声是一种服从 正态分布(Gaussian Distribution) 的随机噪声,通常由传感器热噪声或光电探测器引起。

数学模型

假设某个像素的原始值为 I ( x , y ) I(x, y) I(x,y),高斯噪声的数学表达式为:
I ′ ( x , y ) = I ( x , y ) + N I'(x, y) = I(x, y) + N I′(x,y)=I(x,y)+N

其中,噪声 N N N 服从均值 μ \mu μ 和标准差 σ \sigma σ 的正态分布:
N ∼ N ( μ , σ 2 ) N \sim \mathcal{N}(\mu, \sigma^2) N∼N(μ,σ2)

模拟方法(Python 代码示例):

python 复制代码
import numpy as np

def add_gaussian_noise(image, mean=0, sigma=25):
    noise = np.random.normal(mean, sigma, image.shape)  # 生成高斯噪声
    noisy_image = image + noise
    return np.clip(noisy_image, 0, 255)  # 限制像素值范围

在实际应用中,高斯噪声通常会导致图像整体变得模糊,噪声值较大的地方可能会出现随机色斑。


2. 泊松噪声(Poisson Noise)

定义 :泊松噪声是一种符合 泊松分布(Poisson Distribution) 的离散噪声,常见于低光照成像或 X 射线成像,主要由 光子计数噪声 引起。

数学模型

泊松噪声的随机性与图像像素值相关,某个像素 I ( x , y ) I(x, y) I(x,y) 受到泊松噪声影响后的值为:
I ′ ( x , y ) = Poisson ( I ( x , y ) ) I'(x, y) = \text{Poisson}(I(x, y)) I′(x,y)=Poisson(I(x,y))

其中,泊松分布的概率质量函数(PMF)为:
P ( k ; λ ) = λ k e − λ k ! , k ≥ 0 P(k; \lambda) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k \geq 0 P(k;λ)=k!λke−λ,k≥0

其中:

  • λ \lambda λ 为像素值(即该像素的期望值)。
  • k k k 是泊松随机变量的可能取值。

模拟方法(Python 代码示例):

python 复制代码
def add_poisson_noise(image):
    noisy_image = np.random.poisson(image)  # 直接对像素值进行泊松采样
    return np.clip(noisy_image, 0, 255)

由于泊松噪声的方差等于均值( σ 2 = λ \sigma^2 = \lambda σ2=λ),所以明亮区域的噪声幅度比暗部更明显。


3. 椒盐噪声(Salt-and-Pepper Noise)

定义 :椒盐噪声是一种 脉冲噪声(Impulse Noise),表现为像素值突然变成极端值(0 或 255),通常是由于传输误码、传感器故障或数据丢失造成的。

数学模型

对于某个像素 I ( x , y ) I(x, y) I(x,y),以概率 p s p_s ps 变为 白色(255) ,以概率 p p p_p pp 变为 黑色(0)
I ′ ( x , y ) = { 255 , 概率 p s 0 , 概率 p p I ( x , y ) , 概率 ( 1 − p s − p p ) I'(x, y) = \begin{cases} 255, & \text{概率 } p_s \\ 0, & \text{概率 } p_p \\ I(x, y), & \text{概率 } (1 - p_s - p_p) \end{cases} I′(x,y)=⎩ ⎨ ⎧255,0,I(x,y),概率 ps概率 pp概率 (1−ps−pp)

模拟方法(Python 代码示例):

python 复制代码
def add_salt_pepper_noise(image, salt_prob=0.02, pepper_prob=0.02):
    noisy_image = np.copy(image)
    total_pixels = image.size

    # 生成椒盐噪声的位置
    num_salt = int(total_pixels * salt_prob)
    num_pepper = int(total_pixels * pepper_prob)

    # 设置盐噪声
    salt_coords = [np.random.randint(0, i, num_salt) for i in image.shape]
    noisy_image[salt_coords[0], salt_coords[1]] = 255

    # 设置椒噪声
    pepper_coords = [np.random.randint(0, i, num_pepper) for i in image.shape]
    noisy_image[pepper_coords[0], pepper_coords[1]] = 0

    return noisy_image

椒盐噪声的特点是 随机分布的黑白点,对边缘检测、目标识别等任务影响较大。


4. 噪声分布的对比分析

噪声类型 数学模型 特性 影响
高斯噪声 N ∼ N ( μ , σ 2 ) N \sim \mathcal{N}(\mu, \sigma^2) N∼N(μ,σ2) 连续、正态分布 使图像变模糊,影响细节
泊松噪声 I ′ ( x , y ) = Poisson ( I ( x , y ) ) I'(x,y) = \text{Poisson}(I(x,y)) I′(x,y)=Poisson(I(x,y)) 离散、依赖像素值 亮部噪声较明显,低光照影响大
椒盐噪声 P ( I ′ = 255 ) = p s , P ( I ′ = 0 ) = p p P(I' = 255) = p_s, P(I' = 0) = p_p P(I′=255)=ps,P(I′=0)=pp 离散、极端像素值 产生黑白点,对边缘影响大

5. 结论

在实际应用中,选择噪声模型要基于具体场景:

  • 高斯噪声 适用于传感器噪声、均匀随机噪声。
  • 泊松噪声 适用于光子噪声、医学成像。
  • 椒盐噪声 适用于信号丢失、传输错误的模拟。

对于去噪任务,可以使用不同方法:

  • 均值滤波(适用于高斯噪声,但会模糊细节)。
  • 中值滤波(对椒盐噪声效果好)。
  • 深度学习方法(U-Net、DnCNN) 适用于各种复杂噪声。
相关推荐
老马啸西风1 分钟前
Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现
网络·数据库·算法·云原生·中间件·neo4j·图数据库
xiongmaodaxia_z733 分钟前
python每日一练
开发语言·python·算法
zy_destiny1 小时前
【非机动车检测】用YOLOv8实现非机动车及驾驶人佩戴安全帽检测
人工智能·python·算法·yolo·机器学习·安全帽·非机动车
rigidwill6662 小时前
LeetCode hot 100—搜索二维矩阵
数据结构·c++·算法·leetcode·矩阵
短尾黑猫2 小时前
[LeetCode 1696] 跳跃游戏 6(Ⅵ)
算法·leetcode
矛取矛求2 小时前
栈与队列习题分享(精写)
c++·算法
袖清暮雨2 小时前
【专题】搜索题型(BFS+DFS)
算法·深度优先·宽度优先
LuckyLay2 小时前
LeetCode算法题(Go语言实现)_46
算法·leetcode·golang
alicema11112 小时前
Python-Django集成yolov识别模型摄像头人数监控网页前后端分离
开发语言·后端·python·算法·机器人·django