计算摄影:噪声模型与噪声估计

噪声模型

sensor noise

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

  • 图一:ISP 流程,光照转换成电信号,经过模拟放大,AD 转换,然后得到 RAW 图,就是下图的绿框部分
    计算摄影:噪声模型与噪声估计_第1张图片
    在这个过程中,会有三个地方产生噪声:

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

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

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

计算摄影:噪声模型与噪声估计_第2张图片

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

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

n ∼ P o i s s o n ( Φ , α , t ) = P o i s s o n ( Φ ⋅ α ⋅ t ) n \sim Poisson(\Phi, \alpha, t) = Poisson(\Phi \cdot \alpha \cdot t) nPoisson(Φ,α,t)=Poisson(Φαt)

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

n ∼ P o i s s o n ( D ⋅ t ) n \sim Poisson(D \cdot t) nPoisson(Dt)

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

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

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

计算摄影:噪声模型与噪声估计_第3张图片

  • 图3 泊松分布的性质

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

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

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

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

L = N p h o t o n − d e t e c t i o n + N p h a n t o m − d e t e c t i o n L = N_{photon-detection} + N_{phantom-detection} L=Nphotondetection+Nphantomdetection

N p h o t o n − d e t e c t i o n ∼ P o i s s o n ( Φ ⋅ α ⋅ t ) N_{photon-detection} \sim Poisson(\Phi \cdot \alpha \cdot t) NphotondetectionPoisson(Φαt)

N p h a n t o m − d e t e c t i o n ∼ P o i s s o n ( D ⋅ t ) N_{phantom-detection} \sim Poisson(D \cdot t) NphantomdetectionPoisson(Dt)

L ∼ P o i s s o n ( t ⋅ ( α ⋅ Φ + D ) ) L \sim Poisson(t \cdot (\alpha \cdot \Phi + D )) LPoisson(t(αΦ+D))

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

n r e a d ∼ N o r m a l ( 0 , σ r e a d ) n A D C ∼ N o r m a l ( 0 , σ A D C ) n_{read} \sim Normal(0, \sigma_{read}) \quad n_{ADC} \sim Normal(0, \sigma_{ADC}) nreadNormal(0,σread)nADCNormal(0,σADC)

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

g = k ⋅ I S O g = k \cdot ISO g=kISO

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

G = L ⋅ g + n r e a d ⋅ g G = L \cdot g + n_{read} \cdot g G=Lg+nreadg

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

I = G + n A D C I = G + n_{ADC} I=G+nADC

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

I = L ⋅ g + n r e a d ⋅ g + n A D C I = L \cdot g + n_{read} \cdot g + n_{ADC} I=Lg+nreadg+nADC

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

E ( I ) = g ⋅ E ( L ) + g ⋅ E ( n r e a d ) + E ( n A D C ) E(I) = g \cdot E(L) + g \cdot E(n_{read}) + E(n_{ADC}) E(I)=gE(L)+gE(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)=gE(L)=gt(αΦ+D)

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

σ ( I ) 2 = σ ( L ⋅ g ) 2 + σ ( n r e a d ⋅ g ) 2 + σ ( n A D C ) 2 \sigma(I)^2 = \sigma(L \cdot g)^2 + \sigma(n_{read} \cdot g)^2 + \sigma(n_{ADC})^2 σ(I)2=σ(Lg)2+σ(nreadg)2+σ(nADC)2

σ ( I ) 2 = g 2 ⋅ t ⋅ ( α ⋅ Φ + D ) + g 2 ⋅ σ ( n r e a d ) 2 + σ ( n A D C ) 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=g2t(αΦ+D)+g2σ(nread)2+σ(nADC)2

完整的过程如下所示:

计算摄影:噪声模型与噪声估计_第4张图片

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

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

I = L ⋅ g + n a d d n a d d = n r e a d ⋅ g + n A D C I = L \cdot g + n_{add} \quad n_{add} = n_{read} \cdot g + n_{ADC} I=Lg+naddnadd=nreadg+nADC

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

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

从上面的表达式可以看出

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

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

计算摄影:噪声模型与噪声估计_第5张图片

  • 图5 几种噪声的关系

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

Noise calibration

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

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

不同的 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)=gt(αΦ)

σ ( I ) 2 = g 2 ⋅ t ⋅ ( α ⋅ Φ ) + σ ( n a d d ) 2 \sigma(I)^2 = g^2 \cdot t \cdot (\alpha \cdot \Phi ) + \sigma(n_{add})^2 σ(I)2=g2t(αΦ)+σ(nadd)2

σ ( I ) 2 = g ⋅ E ( I ) + σ ( n a d d ) 2 \sigma(I)^2 = g \cdot E(I) + \sigma(n_{add})^2 σ(I)2=gE(I)+σ(nadd)2

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

计算摄影:噪声模型与噪声估计_第6张图片

  • 图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/

你可能感兴趣的:(计算摄影与图像处理)