噪声模型

sensor noise

在 camera ISP 流程中,有一个 denoise 的环节,一般在 demosaic 后面,噪声一般是 sensor 接收光子然后转化成 RAW 图的过程中产生的,环境中的光通过镜头模组照射到 sensor 上,因为光电效应,会激发很多电子,这些电子转成电流被一个模拟放大器放大,然后通过一个 ADC 模数转换,最后输出离散的照度值。

  • 图一:ISP 流程,光照转换成电信号,经过模拟放大,AD 转换,然后得到 RAW 图,就是下图的绿框部分

    在这个过程中,会有三个地方产生噪声:

  • photon noise and dark noise:由于光激发电子的随机性,会产生 photon noise,而 sensor 本身由于发热激发的暗电流也会产生噪声,这种噪声称为 dark noise 或者热噪声

  • read noise:模拟放大器在放大信号的时候,会产生噪声,这种噪声称为 read noise

  • ADC noise:模数转换器在进行模数转换的时候,会产生噪声,这种噪声称为 ADC noise

  • 图2 光电转换,模拟放大,模数转换

photon noise 是和环境照度相关的一种噪声,假设环境照度为 Φ\PhiΦ,光电转换效率为 α\alphaα,曝光时间为 ttt,则 photon noise 满足如下分布:

n∼Poisson(Φ,α,t)=Poisson(Φ⋅α⋅t)n \sim Poisson(\Phi, \alpha, t) = Poisson(\Phi \cdot \alpha \cdot t) n∼Poisson(Φ,α,t)=Poisson(Φ⋅α⋅t)

dark noise 则和暗电流有关,和环境照度无关,曝光时间越长,电流导致 sensor 发热越大,产生的噪声也越多,假设暗电流强度为 DDD,曝光时间为 ttt, 则 dark noise 满足如下分布:

n∼Poisson(D⋅t)n \sim Poisson(D \cdot t)n∼Poisson(D⋅t)

poisson 分布是一种离散分布,满足如下的表达式:

N∼Poisson(λ)⇔P(N=k,λ)=λke−λk!N \sim Poisson(\lambda) \Leftrightarrow P(N=k, \lambda) = \frac{\lambda^{k}e^{-\lambda}}{k!} N∼Poisson(λ)⇔P(N=k,λ)=k!λke−λ​

poisson 分布的均值和方差都是 λ\lambdaλ

  • 图3 泊松分布的性质

为什么 photon noise 和 dark noise 是满足泊松分布的呢:

这是因为光子是粒子,是一份一份的,而且环境中的光线照射到 sensor 上的时候,激发出来的电子并不是一个恒定的数量,而是会有波动,比如这一秒有 100 个,下一秒可能只有 90 个,这种波动导致 sensor 上每个 pixel 产生的电子数并不一样,而是满足一定的统计分布,这种统计分布符合泊松分布,所以 photon noise 满足泊松分布。

dark noise 也是一样的,sensor 温度升高之后,由于热效应激发的电子数也不是恒定的,而是离散随机的,也满足一种泊松分布。

由于激发的电子数由环境光照和暗电流共同决定,所以这个过程激发的总电子数满足如下的分布:

L=Nphoton−detection+Nphantom−detectionL = N_{photon-detection} + N_{phantom-detection} L=Nphoton−detection​+Nphantom−detection​

Nphoton−detection∼Poisson(Φ⋅α⋅t)N_{photon-detection} \sim Poisson(\Phi \cdot \alpha \cdot t) Nphoton−detection​∼Poisson(Φ⋅α⋅t)

Nphantom−detection∼Poisson(D⋅t)N_{phantom-detection} \sim Poisson(D \cdot t) Nphantom−detection​∼Poisson(D⋅t)

L∼Poisson(t⋅(α⋅Φ+D))L \sim Poisson(t \cdot (\alpha \cdot \Phi + D ))L∼Poisson(t⋅(α⋅Φ+D))

光电转换之后,后面就是信号放大,利用一个模拟放大器,这个过程会引入 read noise,后面的 ADC 转换也会引入量化误差,产生噪声, read noise 和 ADC noise 都是加性噪声,并且都满足均值为 0 的高斯分布:

nread∼Normal(0,σread)nADC∼Normal(0,σADC)n_{read} \sim Normal(0, \sigma_{read}) \quad n_{ADC} \sim Normal(0, \sigma_{ADC}) nread​∼Normal(0,σread​)nADC​∼Normal(0,σADC​)

信号放大过程,就是把前面光电转换的电信号进行放大,放大系数是由电路系统本身决定的,也就是我们通常所说的 gain 值,这个值和 ISO 也有关系:

g=k⋅ISOg = k \cdot ISO g=k⋅ISO

前面的电信号 LLL 经过放大之后,可以表示为 G, 这个过程引入的 read noise 也会被放大:

G=L⋅g+nread⋅gG = L \cdot g + n_{read} \cdot g G=L⋅g+nread​⋅g

再经过后面的 ADC 转换,可以表示为:

I=G+nADCI = G + n_{ADC} I=G+nADC​

所以最后的信号可以表示为:

I=L⋅g+nread⋅g+nADCI = L \cdot g + n_{read} \cdot g + n_{ADC} I=L⋅g+nread​⋅g+nADC​

我们可以算出这个信号 III 的均值和方差分别为:

E(I)=g⋅E(L)+g⋅E(nread)+E(nADC)E(I) = g \cdot E(L) + g \cdot E(n_{read}) + E(n_{ADC}) E(I)=g⋅E(L)+g⋅E(nread​)+E(nADC​)

前面说过,因为 read noise 和 ADC noise 均值为 0, 所以上面的表达式最后可以简化成:

E(I)=g⋅E(L)=g⋅t⋅(α⋅Φ+D)E(I) = g \cdot E(L) = g \cdot t \cdot (\alpha \cdot \Phi + D ) E(I)=g⋅E(L)=g⋅t⋅(α⋅Φ+D)

类似地,我们可以计算出信号 III 的方差:

σ(I)2=σ(L⋅g)2+σ(nread⋅g)2+σ(nADC)2\sigma(I)^2 = \sigma(L \cdot g)^2 + \sigma(n_{read} \cdot g)^2 + \sigma(n_{ADC})^2 σ(I)2=σ(L⋅g)2+σ(nread​⋅g)2+σ(nADC​)2

σ(I)2=g2⋅t⋅(α⋅Φ+D)+g2⋅σ(nread)2+σ(nADC)2\sigma(I)^2 = g^2 \cdot t \cdot (\alpha \cdot \Phi + D ) + g^2 \cdot \sigma(n_{read})^2 + \sigma(n_{ADC})^2 σ(I)2=g2⋅t⋅(α⋅Φ+D)+g2⋅σ(nread​)2+σ(nADC​)2

完整的过程如下所示:

  • 图4 噪声模型及信号的均值,方差

因为 read noise 和 ADC noise 都是加性噪声,所以可以将两种噪声合并,进行化简:

I=L⋅g+naddnadd=nread⋅g+nADCI = L \cdot g + n_{add} \quad n_{add} = n_{read} \cdot g + n_{ADC} I=L⋅g+nadd​nadd​=nread​⋅g+nADC​

则上面信号的方差可以表示为:

σ(I)2=g2⋅t⋅(α⋅Φ+D)+σ(nadd)2\sigma(I)^2 = g^2 \cdot t \cdot (\alpha \cdot \Phi + D ) + \sigma(n_{add})^2 σ(I)2=g2⋅t⋅(α⋅Φ+D)+σ(nadd​)2

从上面的表达式可以看出

  • photon noise 与环境光照 Φ\PhiΦ 有关,光照越强,photon noise 占主导
  • dark noise 和 sensor 本身的热效应有关,曝光越长,dark noise 越大
  • read noise 和 ISO 有关,ISO 越高,read noise 越大
  • ADC noise 是 AD 本身的量化误差,和 ISO,环境亮度都没有关系

这几种噪声的关系总结如下:

  • 图5 几种噪声的关系

一般来说,在光照充足的区域,photon noise 占主导,而光线不足的区域,add noise 占主导。

Noise calibration

为了进行降噪,需要对噪声模型的参数进行估计,上面噪声模型的参数包括暗电流 DDD,模拟放大系数 gain 值 ggg,以及 read noise nreadn_{read}nread​ 和 ADC noise nADCn_{ADC}nADC​,根据上面信号的均值和方差,可以看出信号的均值和环境照度以及暗电流有关,如果环境照度为 0 ,则信号的均值就是和暗电流有关,通过这种方式,可以估计出 sensor 的暗电流产生的信号大小,所以估计暗电流,可以把相机镜头盖住,然后拍摄多帧图像,再进行平均,这样得到的平均值,就近似为暗电流的大小,不过注意这里还有一个 gain 值:

E(I)=g⋅t⋅(α⋅0+D)=g⋅t⋅DE(I) = g \cdot t \cdot (\alpha \cdot 0 + D ) = g \cdot t \cdot D E(I)=g⋅t⋅(α⋅0+D)=g⋅t⋅D

不同的 ISO,会有不同的 gain 值,估计暗电流,也需要考虑不同的 gain 值的影响。

一旦估计出暗电流,我们减去这部分信号,以消除暗电流的影响,剩下的就是估计模拟放大系数 gain 值,以及 read noise 和 ADC noise,这两者统称为加性噪声,可以表示为 add noise,一旦去除 D,信号的均值和方差可以表示为:

E(I)=g⋅t⋅(α⋅Φ)E(I) = g \cdot t \cdot (\alpha \cdot \Phi ) E(I)=g⋅t⋅(α⋅Φ)

σ(I)2=g2⋅t⋅(α⋅Φ)+σ(nadd)2\sigma(I)^2 = g^2 \cdot t \cdot (\alpha \cdot \Phi ) + \sigma(n_{add})^2 σ(I)2=g2⋅t⋅(α⋅Φ)+σ(nadd​)2

σ(I)2=g⋅E(I)+σ(nadd)2\sigma(I)^2 = g \cdot E(I) + \sigma(n_{add})^2 σ(I)2=g⋅E(I)+σ(nadd​)2

从上式可以看出,信号的方差和均值满足一个线性关系,放大倍数就是 ggg,而截距就是加性噪声,所以一般可以通过拍摄多帧灰度图像,然后计算每个像素点的均值和方差,再做一个线性拟合,来估计gain 值 和加性噪声。

  • 图6 噪声模型参数估计

最后,重要的一点是这些估计都应该在 RAW 域进行,因为 RAW 域的信号才与环境光照满足线性关系。而 photon noise 是光电效应本身的随机属性,这个是没有办法消除的。

参考文献:

https://zhuanlan.zhihu.com/p/39260257
CMU computation photograph 2019 lecture 6
http://graphics.cs.cmu.edu/courses/15-463/2019_fall/

计算摄影:噪声模型与噪声估计相关推荐

  1. 自适应卡尔曼滤波的噪声方差怎么推的_带有未知过程噪声协方差阵递推估计的卡尔曼滤波方法...

    带有未知过程噪声协方差阵递推估计的卡尔曼滤波方法 [专利摘要]本发明提供了针对离散时间时不变系统的一种基于递推协方差矩阵估计方法的卡尔曼滤波方法,目的是要解决一类离散时间线性时不变系统中观测噪声协方差 ...

  2. 01.Signal and Image Noise Models 信号与图像噪声模型

    01.Signal and Image Noise Models 信号与图像噪声模型 标签(空格分隔): 未分类 资料:numeriacal tour-denoising simple1:Signal ...

  3. 图像噪声模型(matlab)

    概述 在图像的采集.传送和转换过程中,会添加一些噪声,表现为图像模糊.失真和有噪声等.图像复原就是尽可能恢复退化图像的本来面目,沿用图像退化的逆过程进行处理.图像复原技术是根据图像退化的先验知识建立一 ...

  4. 图像降噪算法——图像噪声模型

    图像降噪算法--图像噪声模型 图像降噪算法--图像噪声模型 1. 图像噪声建模 2. C++代码实现 3. 结论 图像降噪算法--图像噪声模型 1. 图像噪声建模 首先,我们要区分图像传感器噪声和图像 ...

  5. ITK:计算图像中的局部噪声

    ITK:计算图像中的局部噪声 内容提要 输入 输出 C++实现代码 内容提要 计算图像中的局部噪声 输入 输出 C++实现代码 #include "itkI

  6. CMOS图像传感器——噪声模型

    由于CMOS图像传感噪声的复杂性和不可控性,学者们一直在寻求一种能对其比较精确表的噪声模型.在图像降噪领域,为了降低算法设计的复杂度,人们普遍采用基于信道相关噪声的模型(即加性噪声),但其缺点就是不能 ...

  7. 【OpenCV 例程200篇】93. 噪声模型的直方图

    [OpenCV 例程200篇]93. 噪声模型的直方图 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 2. 噪声模型 ...

  8. 浅谈ISP-图像噪声模型2

    上一篇主要介绍了各种噪声模型,这一篇进一步介绍图像噪声相关. 一.光子散粒噪声(泊松噪声) 图像传感器通过将光子捕获到光电二极管中来记录光,最终将其转换为数字信号.在积分时间内,光子在每个光点不是常数 ...

  9. 《阵列信号处理及MATLAB实现》信源和噪声模型、阵列天线统计模型

    PS:文章内容为本人读书笔记,如想阅读更详细内容请购买正版书籍 2.5  信源和噪声模型 2.5.1 窄带信号 如果信号带宽远小于其中心频率,则该信号为窄带信号,即: 其中,为信号带宽,为中心频率.通 ...

最新文章

  1. 【撸码师的读书笔记】 深入理解Java虚拟机——JVM高级特性与最佳实践
  2. Android 快速选择联系人
  3. mysql安装图解 mysql图文安装教程(详细说明)
  4. 让PPT声音播放不再“哑口无言”
  5. linux容器怎么运行到windows,如何在 Windows 上运行 Linux 容器?
  6. 这样学习正则表达式就轻松了!
  7. 在enable mmu之前可以使用mmu了
  8. Hibernate持久化类与主键生成策略
  9. 计算机语言学 自然语言处理程序,利用知网进行(计算机)自然语言处理
  10. tf.nn 和tf.layers以及tf.contrib.layers的简单区别(转)
  11. 必知!4张图看尽AI发展史重大里程碑
  12. oracle11g 密码大小写禁用及密码有效期限制
  13. 浅谈基于软交换的下一代网络技术
  14. HTML中id和name的区别(js中的注意事项)
  15. Onvif协议之服务端开发基本流程
  16. 3D相机成像原理简介
  17. 融合VOI与VDI、IDV、RDS,实现弹性的应用
  18. 空调老大易主后,格力能否下定决心多元化?
  19. Axure 初学者必看:自学 Axure 需要花多长时间?
  20. 【c语言】矩阵的创建

热门文章

  1. 从幻想到现实,虚拟人的成长之路
  2. 练习:对十进制正整数求平方和
  3. 从静态检查工具谈代码编程规范
  4. PS CS5学习(激活序列号后每次重启有要重新输入的问题
  5. CODESYS在工厂自动化中的应用案例:运动控制集成方案
  6. 计算机程序扩展名是什么,LOG文件扩展名 - 什么是.log以及如何打开? - ReviverSoft...
  7. qq iphone for android,QQ for iPhone/Android v8.2.8 正式版发布
  8. 尊敬的用户您好: 您访问的网站被机房安全管理系统拦截,可能是以下原因造成: 1.您
  9. 点云配准之NDT算法
  10. Unity中单点和多点触控