[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) 适用于各种复杂噪声。
相关推荐
alphaTao20 小时前
LeetCode 每日一题 2026/1/5-2026/1/11
算法·leetcode
山上三树20 小时前
详细介绍 C 语言中的 #define 宏定义
c语言·开发语言·算法
AI科技星20 小时前
引力与电磁的动力学耦合:变化磁场产生引力场与电场方程的第一性原理推导、验证与统一性意义
服务器·人工智能·科技·线性代数·算法·机器学习·生活
蜕变菜鸟20 小时前
JS的Object.keys()和sort()排序的用法
数据结构·算法
源代码•宸20 小时前
Golang基础语法(go语言error、go语言defer、go语言异常捕获、依赖管理、Go Modules命令)
开发语言·数据库·后端·算法·golang·defer·recover
如果你想拥有什么先让自己配得上拥有20 小时前
算数顺序的逻辑和发展?
算法
Cx330❀20 小时前
【优选算法必刷100题】第43题(模拟):数青蛙
c++·算法·leetcode·面试
杜子不疼.20 小时前
【LeetCode30_滑动窗口 + 哈希表】:三招搞定“串联所有单词的子串”
数据结构·算法·哈希算法
闻缺陷则喜何志丹20 小时前
【C++动态规划 状压dp】1879. 两个数组最小的异或值之和|2145
c++·算法·动态规划·力扣·数组·最小·动态规范
妹妹够啦21 小时前
1. 两数之和
数据结构·算法·leetcode