Skip to content

PRNU 和 DSNU

复制本地路径 | 在线编辑

FPN(fixed pattern noise)可以分为 PRNU 和 DSNU,它本质上是指不同像素对于光的响应不同,比如同样是两个光子,像素 A 结果是 2,像素 B 结果是 3。一般直接用一次线性来模拟,也就是 y=kx+b,其中系数就叫做 PRNU,偏移叫做 DSNU。

有的时候会用 PRNU 同时表示这两个概念;有的时候则会用 FPN 单独表示 DSNU,反正这些很乱。

PRNU 噪声

模型分析

让我们来看一下 PRNU 对信噪比 SNR 的影响,首先回顾之前的模型:

$
I = L * g + n_{add}
$

其中 I 是像素值,L 是光子数,g 是增益,n_{add} 是加性噪声。此时期望和方差分别为:

$
\begin{aligned}
E(I) &= L * g \
V(I) &= L * g^2 + \sigma_{add} \
\end{aligned}
$

但是上面这个模型是对于单独一个像素而言,每个像素那么就有所不同,所以需要加上下标:

$
I(p) = L * g_p + n_{add} + b_p
$

其中 b(p) 就是 DSNU;现在我们把 g(p) 拆成两个部分,即平均值加上一个偏差:

$
\begin{aligned}
I(p) &= L * (\bar{g} + k_p) + n_{add} + b_p \
&= L * \bar{g} + L * k_p + n_{add} + b_p \
\end{aligned}
$

其中 \(E(k_p) = 0\)

计算

此时对于一个图像而言,注意:这个时候时间凝固了,我们只看到一副空间上的图像。也就是我们看到的图像 I 是有多个分布不同的像素组合而来。

此时这是一个混合模型问题,即属于 A 类的变量有自己的分布情况,属于 B 类的变量有另外的分布情况,属于 C 类的变量又有另外的分布情况...

为了便于计算,我们不考虑 DSNU,即舍弃了 b(p) 这一项。不然后面计算会相当复杂。

期望很好计算,能从定义中推出是一个加权平均,而我们这里加权又是均匀的:

$
\begin{aligned}
E(I) &= (E(I_1) + ... + E(I_N)) / N \
&= L * \bar{g} + L * E(k_p) + E(n_{add}) \
&= L * \bar{g}
\end{aligned}
$

方差涉及到组内方差和组间方差,这里先给出最终结果:

$
V(I) = L * \bar{g}^2 + L * \sigma_{PRNU}^2 + \sigma_{add}^2 + L^2 * \sigma_{PRNU}^2
$

其中 \(\sigma_{PRNU}^2\) 的定义如下,可以把他想象成各个系数的波动情况:

$
\begin{aligned}
\sigma_{PRNU}^{2} = \frac{1}{N} \sum_{i=1}^{N} (k_i^2)
\end{aligned}
$

方差推导过程

其中:

$
\begin{aligned}
\mu &= L * \bar{g} \
\mu_i &= L * (\bar{g} + k_i) \
\sigma_i^2 &= L * (\bar{g} + k_i)^2 + \sigma_{add}^2 \
\end{aligned}
$

所以:

$
\begin{aligned}
\sum_{i=1}^{N} p_i \sigma_i^2
&= \frac{1}{N} \sum_{i=1}^{N} (L * (\bar{g} + k_i)^2 + \sigma_{add}^2) \
&= \frac{L}{N} \sum_{i=1}^{N} (\bar{g}^2 + 2 * \bar{g} * k_i + k_i^2) + \sigma_{add}^2 \
&= L * \bar{g}^2 + \frac{2L\bar{g}}{N} * \sum_{i=1}^{N}(k_i) + \frac{L}{N} \sum_{i=1}^{N}(k_i^2) + \sigma_{add}^2 \
&= L * \bar{g}^2 + 0 + 2L * \sigma_{PRNU}^2 + \sigma_{add}^2 \
\end{aligned}
$

$
\begin{aligned}
\sum_{i=1}^{N} p_i (\mu_i - \mu)^2
&= \frac{1}{N} \sum_{i=1}^{N} (L * (\bar{g} + k_i) - L * \bar{g})^2 \
&= \frac{L^2}{N} \sum_{i=1}^{N} (k_i^2) \
&= L^2 * \sigma_{PRNU}^2 \
\end{aligned}
$

所以最终方差为:

$
V(I) = L * \bar{g}^2 + 2L * \sigma_{PRNU}^2 + \sigma_{add}^2 + L^2 * \sigma_{PRNU}^2
$

结果分析

现在我们来看一下 SNR:

$
\begin{aligned}
SNR &= \frac{E(I)}{\sqrt{V(I)}} \
&= \frac{L * \bar{g}}{\sqrt{L * \bar{g}^2 + L * \sigma_{PRNU}^2 + \sigma_{add}^2 + L^2 * \sigma_{PRNU}^2}} \
\end{aligned}
$

假设我们把 \(σ_{add}\) 忽略掉,当 L 很大的时候,二次项占据主导:

$
\begin{aligned}
SNR &= \frac{L * \bar{g}}{\sqrt{L * \bar{g}^2 + L * \sigma_{PRNU}^2 + L^2 * \sigma_{PRNU}^2}} \
&< \frac{L * \bar{g}}{\sqrt{L^2 * \sigma_{PRNU}^2}} \
&= \frac{\bar{g}}{\sigma_{PRNU}}
\end{aligned}
$

所以 PRNU 能够限制 SNR 的上限,也就是说无论光子数 L 多大,SNR 都不会超过某个值。当然这里前提是 L 足够大,才能让二次项占据主导地位。因为相机有饱和阈值,所以一般而言,不会到 PRNU 占据主导地位的情况。

对标定的影响

没啥影响,标定的时候做了平均值已经把 PRNU 给平均掉了,所以标定的结果是一个平均值,不受 PRNU 的影响。

PRNU 和 DSNU 的标定

要采集很多暗场图,然后对每个像素单独计算即可。

参考资料

  1. 简单看了这篇文章,但总体这篇文章写的不好:https://zhuanlan.zhihu.com/p/363366030

Comments