[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) 适用于各种复杂噪声。
相关推荐
KyollBM2 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
CV点灯大师16 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
GGBondlctrl32 分钟前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想
武子康44 分钟前
大数据-276 Spark MLib - 基础介绍 机器学习算法 Bagging和Boosting区别 GBDT梯度提升树
大数据·人工智能·算法·机器学习·语言模型·spark-ml·boosting
武子康1 小时前
大数据-277 Spark MLib - 基础介绍 机器学习算法 Gradient Boosting GBDT算法原理 高效实现
大数据·人工智能·算法·机器学习·ai·spark-ml·boosting
Andrew_Xzw1 小时前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
超的小宝贝2 小时前
数据结构算法(C语言)
c语言·数据结构·算法
木子.李3478 小时前
排序算法总结(C++)
c++·算法·排序算法
闪电麦坤959 小时前
数据结构:递归的种类(Types of Recursion)
数据结构·算法