跳到正文
PreciSim
physics

噪声模型

散粒噪声、读出噪声、暗电流、坏点——以及它们怎么影响标定精度。

三项噪声

虚拟相机的每个像元按下式加噪:

DN = DN_ideal + n_shot + n_read + n_dark

n_shot ~ Poisson(e_signal) 换算到 DN      与信号强度相关,亮处更大
n_read ~ N(0, σ_read²)                    与信号无关,暗处占主导
n_dark ~ Poisson(i_dark · t_exp)          与曝光时间成正比

默认参数(对应一款常见的工业 CMOS):

参数 说明
σ_read 2.3 e⁻ 读出噪声
i_dark 12 e⁻/s 暗电流,室温
e_full 10500 e⁻ 满阱容量
QE 0.62 @ 530 nm 量子效率
bits 8 或 12 位深,可切

信噪比

SNR = e_signal / sqrt(e_signal + σ_read² + i_dark·t_exp)

信号足够强时 SNR ≈ sqrt(e_signal),即亮度翻倍,信噪比只涨 1.41 倍。 这解释了一个常被问到的问题:为什么把曝光拉满也没让精度变好多少。

噪声怎么影响标定

这才是这一节的重点。

圆心提取

圆心由边缘亚像素定位得到,噪声让每个边缘点的位置抖动 σ_edge。 一个有 N 个边缘点的圆,圆心误差约:

σ_center ≈ σ_edge / sqrt(N)

所以圆越大(边缘点越多),圆心越稳。这就是标定板圆点不宜太小的原因: 直径 10 px 的圆和 30 px 的圆,圆心精度差约 1.7 倍。

像素当量

像素当量由「多个圆心之间的距离」求解,圆心误差通过最小二乘平均掉一部分:

σ_scale / scale ≈ σ_center / (D · sqrt(M))

其中 D 是采集跨度(px),M 是采集点数。

两条实用结论

  1. 采集跨度比采集点数更重要。走 50 mm 采 9 个点,比走 5 mm 采 50 个点准得多。
  2. 点数从 9 涨到 36,精度只提升 2 倍;跨度从 5 mm 涨到 50 mm,精度提升 10 倍。

新人几乎总是反着做——在视野中心密集采一堆点,然后奇怪为什么不准。

焦点标定

光学与离焦

坏点

按配置比例随机生成(默认 0.001%),分两类:

  • 亮点:恒定输出高值;
  • 死点:恒定输出 0。

坏点位置在一台虚拟机的生命周期内固定不变,和真相机一样。 这让「坏点补偿算法」可以被真正验证:补偿表做对了,换一次曝光坏点不会再冒出来。

怎么调

设备 → 虚拟设备 → 相机 → 噪声

"noise": {
  "enabled": true,
  "readNoiseE": 2.3,
  "darkCurrentEPerS": 12,
  "fullWellE": 10500,
  "qe": 0.62,
  "badPixelRatio": 1e-5,
  "seed": 20260921
}

seed 固定住之后,噪声是可复现的——同样的输入得到同样的图。 这一点对写自动化测试很关键:断言「圆心误差 < 0.05 px」才有意义。 把 seed 设为 null 则每次随机,更接近真机的体验,适合教学。

最后更新: 2026/9/21
这页有帮助吗?