远心镜头的误差预算:从光阑位置、主光线角度到高度变化


测量镜头写着远心,并不意味着工件离焦后仍能准确测量。本文从光阑和入瞳出发,用主光线角度建立高度误差预算,再把远心度、边缘提取、标定平面和机械偏心放进同一套可验证的测量流程。

问题从一块有厚度的工件开始

假设相机观察一个宽 20 mm 的冲压件,工件表面相对标定平面可能上下变化 2 mm,希望宽度误差不超过 10 μm。更换远心镜头之后,边缘虽然没有明显透视收缩,测得尺寸仍可能随高度变化。原因是“远心”描述光线几何的一部分,完整测量还涉及离焦、照明、畸变、装调和算法。

本文只先估算高度变化造成的几何误差,物体、镜头与传感器互相平行,镜头工作在规定倍率、波长和工作距离附近。文中数值为设计算例,不是某款镜头的实测性能。

先分清物方远心与像方远心

孔径光阑限制轴上物点能够通过的光束。入瞳是从物方观察到的光阑像,出瞳是从像方观察到的光阑像。物方远心要求入瞳在无穷远,物方各视场主光线平行于光轴;像方远心对应出瞳在无穷远。双远心同时满足两侧条件。两者控制的敏感性不同,不能用“传感器入射角小”替代“工件高度变化时倍率稳定”。这些定义和光阑布置可参见 Edmund Optics 的远心设计说明。

理想薄透镜前组的后焦面上放置光阑,可以得到物方远心结构的初步模型。主光线要通过光阑中心,前组将其反向准直到物方。真实镜头有厚度、瞳像差和装调偏差,光阑位置必须相对前组的实际焦面确定;机械图上的一个镜片表面并不自动等于焦面。

远心度也不描述所有光线都平行。物点仍通过一束有限孔径光锥成像,所以物体移开最佳物面仍会离焦。供应商对远心范围的讨论应结合测量误差理解,而非将范围以外看成突然失去远心性的区域。参见 Opto Engineering 的远心镜头教程。

用主光线角度估算高度误差

令一个边缘点相对标定平面的轴向位移为 Δz,物方主光线与光轴夹角为 θ。在小范围内保持该光线方向不变,沿光线将点投回标定平面,可得到横向偏移量:

1
δx ≈ Δz · tan(θ)

这是局部直线几何模型。它忽略了主光线随物面变化而产生的高阶项,适合前期预算与实测斜率交叉检查,不能代替真实光线追迹。

如果左右边缘主光线角度近似对称,大小均为 θ,两个边缘的位移方向相反,宽度误差上界近似为:

1
|δW| ≈ 2 |Δz| tan(θ)

若 |Δz| = 2 mm、θ = 0.05°,单边偏移约 1.745 μm,宽度变化约 3.491 μm。如果只给几何高度效应分配 4 μm 预算,则允许的边缘角度为:

1
θmax = arctan(0.004 / (2 × 2)) ≈ 0.0573°

这没有说明 0.0573° 足够满足整个系统的 10 μm 指标。剩余 6 μm 是否能覆盖其他误差,要看误差合成方式。确定性偏差宜按最坏方向相加;有依据、互相独立且零均值的随机量才适合均方根合成。把所有数据都做平方和,会掩盖稳定的标定偏差。

下面的 Python 3 代码只依赖标准库,可复算上面的几何量:

1
2
3
4
5
6
7
8
9
10
11
12
from math import atan, degrees, radians, tan

height_mm = 2.0
angle_deg = 0.05
width_budget_um = 4.0

one_edge_um = height_mm * tan(radians(angle_deg)) * 1000
width_error_um = 2 * one_edge_um
allowed_deg = degrees(atan(width_budget_um / 1000 / (2 * height_mm)))
print(f"单边偏移: {one_edge_um:.3f} um")
print(f"宽度变化: {width_error_um:.3f} um")
print(f"预算对应角度: {allowed_deg:.4f} deg")

注意左右边缘角度未必对称。更一般的表达式为 ΔW ≈ Δz[tan(θR)−tan(θL)]。如果两个边缘主光线具有相同倾斜,图像中心可能漂移而宽度变化很小;只测宽度就会漏掉这种装调问题。因此必须同时记录尺寸和中心位置。

把光阑轴向误差换算成设计敏感性

对前组焦距 f 的薄透镜模型,光阑相对后焦面的轴向偏差为 ε。设物点位于前组前方距离 s、离轴高度 y,物方光线斜率为 u。光线到透镜时高度为 y+s·u,折射后斜率为 u−(y+s·u)/f。要求它传播 f+ε 后通过光阑中心,整理得:

1
2
u = ε·y / [f(f+ε) − ε·s]
当 |ε| 很小时:u ≈ ε·y / f²

例如 f=50 mm、y=10 mm、ε=0.10 mm,小偏差近似给出 u≈0.0004,即 θ≈0.0229°。将这个值代入高度预算,Δz=2 mm 时的对称宽度变化约 1.6 μm。

这说明光阑轴向位置是有物理意义的敏感参数,但它不是成品远心度的唯一来源。前组光焦度变化、镜片偏心、光阑横向偏移以及遮挡改变有效孔径,都可能改变实际主光线。优化模型里只约束近轴瞳位置,可能无法控制全视场真实光线角度。

建立能识别不同误差的验证数据

建议用一块稳定的标定板和可重复的 Z 向位移台,先固定曝光、增益与照明,再采集多个高度。比如 −2、−1、0、1、2 mm,每个高度重复采集若干帧,并打乱高度次序,避免温漂与高度形成假相关。

每个高度至少提取三组量:相同特征的像素间距、图像中的特征中心、边缘过渡宽度或拟合残差。用线性模型 W(z)=W0+kz 拟合宽度,对比 k 与几何预算;再看剩余残差是否呈弯曲趋势。若高阶残差显著,线性近似的适用范围已经不足。

验证时应让特征覆盖中心、边缘与四角。若只看中央两点,往往低估边缘远心度与畸变。每个视场分别记录斜率,不能把四角平均后正负抵消。标定也应固定在确定物面,记录镜头焦点、光圈、倍率、安装方向与温度区间。

焦外边缘对阈值特别敏感。可以在同一组原始图上比较多个灰度阈值,或比较固定阈值与局部边缘拟合。若尺寸随阈值明显变化,而几何中心较稳定,主要矛盾可能已从远心度转向点扩散和照明,而非光阑位置。

把高度、平面倾斜与焦点分开诊断

如果板面绕一个轴倾斜,左右边缘的高度不再相同。此时应分别代入 ΔzR、ΔzL,宽度项成为 ΔzR·tan(θR)−ΔzL·tan(θL),不能继续使用统一的 2Δz 上界模型解释所有数据。先用水平板做整体 Z 扫描,再单独做小角度倾斜实验,可以减少变量耦合。

另一组有帮助的对照,是在每个高度分别保存“固定焦点”和“重新调焦”的结果。前者代表实际固定装配的工作表现,后者可以帮助区分离焦对边缘算法的影响。但重新调焦可能改变有效倍率,尤其是内对焦镜头,所以它只能作为诊断,不应混入固定状态的正式验收数据。

若要建立补偿表,应先证明高度是可测且稳定的输入。仅凭图像清晰度估算高度再补尺寸,可能形成循环依赖:样品纹理、反射率与曝光变化都会影响清晰度。补偿表还应在独立高度点验证,并限定插值区间,避免将一组线性斜率无限外推。

取舍:远心度、景深与整机成本

收小光圈通常有利于减小几何离焦斑,却会降低通光量,并在较小孔径下受衍射影响。远心镜头也常需要较大的前组尺寸来覆盖物方视场,机械尺寸与成本因此上升。应先给出物方视场、厚度范围、目标测量不确定度和节拍,再选倍率与孔径。

一份有效验收条件可以写成:在指定波长、光圈、工作距离和视场点上,工件在规定高度区间变化时,尺寸偏差、中心漂移与重复性分别不超过各自限值。这样既能检验镜头的几何能力,也能检验系统实际读数,而不会把一个“远心”标签当成全部答案。


 上一篇
畸变不能只看最大百分比:从视场采样到可逆标定映射 畸变不能只看最大百分比:从视场采样到可逆标定映射
同样写着畸变小于百分之一,两支镜头可能有完全不同的测量表现。本文明确参考投影和坐标单位,用径向模型推导局部倍率、映射可逆性与反算条件,并给出覆盖边缘、角点和独立验证点的标定方案。
2026-10-18
下一篇 
Hexo 博客持续发布:从 Markdown 到可回退的服务器版本 Hexo 博客持续发布:从 Markdown 到可回退的服务器版本
结合怪默博客真实的版本目录与发布脚本,分析构建、上传、校验、符号链接切换和发布后验证的失败边界,并进一步讨论并发发布、浏览器缓存、资源保留以及为什么快速回退不能替代独立可恢复的项目备份。
2026-10-16
  目录