跳到正文
PreciSim
physics

光学与离焦

景深、点扩散函数、清晰度曲线——Z 轴焦点标定为什么是那样做的。

景深

物方景深(近似,几何光学):

DOF ≈ 2 · c · N · (1 + M) / M²

c  允许弥散圆直径(通常取 1~2 个像元,这里取 2 × 3.45 µm = 6.9 µm)
N  光圈数 f/#
M  放大倍率 = 像元尺寸 / 像素当量

demo-2axis-vision 上:M ≈ 3.45 µm / 19.82 µm ≈ 0.174,N = 4, 得 DOF ≈ 2 × 6.9 × 4 × 1.174 / 0.0303 ≈ 2.14 mm

这个数字解释了为什么 Z 轴焦点标定的搜索范围默认是 ±3 mm: 比景深大一点,才能看到清晰度曲线的完整峰形。范围取太小,曲线是单调的,拟合不出峰。

点扩散函数

离焦量 Δz 对应的弥散圆直径:

d_blur = |Δz| · M / N        (物方离焦换算到像方模糊)

虚拟相机用高斯 PSF 近似:σ = d_blur / (2·sqrt(2·ln2)),即把弥散圆当作高斯的半高全宽。

这是近似,不是衍射极限的严格解。够用的理由: 清晰度评价函数关心的是梯度能量随离焦的单调下降,高斯近似在这一点上与实测吻合得很好。 需要严格 PSF(比如做超分辨或相位恢复)时,这个模型不适用。

清晰度评价函数

Z 轴焦点标定要在一串 Z 位置上各抓一张图,算清晰度,找峰值。三种可选:

函数 公式 特点
Tenengrad(默认) Σ (Gx² + Gy²),Sobel 梯度 峰形尖锐,对噪声中等敏感
方差 Σ (I − Ī)² 计算最快,但对亮度变化敏感
拉普拉斯能量 Σ (∇²I)² 对高频最敏感,也最怕噪声

【坑】清晰度曲线的绝对值没有意义,只有峰的位置有意义。 换个曝光、换块标定板,曲线整体会抬高或压低,但峰位置不变。 见过有人拿清晰度绝对值做判据,结果换了光源之后全线失效。

峰值拟合

不要直接取最大值那个点——那样精度只能到采样步长。用峰附近三点做抛物线拟合

设峰值点 i,值为 y₁ = S(z_{i-1}), y₂ = S(z_i), y₃ = S(z_{i+1})
δ = 0.5 · (y₁ − y₃) / (y₁ − 2y₂ + y₃)
z_focus = z_i + δ · Δz_step

步长 0.2 mm 时,这一步能把焦点定位精度从 ±100 µm 提到 ±10 µm 量级。

前提是曲线在峰附近确实接近抛物线。离焦太远的点拖进来拟合会让结果更差, 所以只取峰及其左右各一个点。

噪声对焦点的影响

清晰度是梯度平方和,而噪声本身有梯度,所以噪声会抬高整条曲线的基线, 在离焦较远处抬得比峰附近还明显(因为那里真实梯度小,噪声占比大)。

后果是:噪声大的时候,清晰度曲线会变平,峰不明显,拟合出来的焦点飘。 对策是先做几帧平均再算清晰度(虚拟设备里 avgFrames 参数可调), 或者把曝光调上去让信噪比变好。

实验 4 专门做这件事:把噪声调大,看焦点重复性从 ±8 µm 劣化到 ±60 µm, 再用帧平均把它救回来。

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