同样写着畸变小于百分之一,两支镜头可能有完全不同的测量表现。本文明确参考投影和坐标单位,用径向模型推导局部倍率、映射可逆性与反算条件,并给出覆盖边缘、角点和独立验证点的标定方案。
最大畸变小,不代表每个位置倍率一致
考虑一个测量视场:中心区域用于定位,边缘区域用于测量两个孔的间距。镜头报告全视场最大畸变 0.8%,使用者在中心标定一个毫米到像素的比例,随后把这个比例用到所有位置。孔距仍可能出现系统偏差,因为位置误差和局部倍率误差不是同一个量。
本文采用平面物体、固定对焦与光圈、稳定镜头安装的条件。我们分析的是几何映射,不用点列图大小替代畸变,也不讨论滚动快门和运动造成的非刚性变形。文中系数是人为构造的可复算模型。
先约定“理想位置”由什么投影定义
畸变常写成 D=(h实−h理想)/h理想。关键在于理想像高如何确定。普通中心投影常以 f·tan(θ) 为参考,扫描系统可能关心 f·θ。软件还可能用拟合后的焦距重新定义比例。不同参考得到的百分比不能直接横向比较。Ansys 的畸变分析说明明确区分了这些参考方式。
对有限共轭的平面测量任务,也可以先通过一个理想平面映射消除相机姿态与比例,再分析其余非线性残差。这里要说明理想比例来自设计值、中心标定还是全场拟合。若允许全场重新拟合比例,低频畸变的一部分会被吸收,报告的最大残差可能更小,但不等于原始镜头倍率更加恒定。
光轴中心处 h理想=0,不能直接做除法。展示畸变百分比曲线时可使用趋近轴线的极限,实际验收还应报告绝对像素残差。非旋转对称系统更应看二维矢量图,单一径向曲线无法表达偏心或装调引起的方向差异。
径向模型与局部倍率的关系
设归一化理想坐标为 x、y,r²=x²+y²,忽略切向畸变时,用三项径向多项式描述:
1 | xd = x · (1 + k1 r² + k2 r⁴ + k3 r⁶) |
这种形式和含切向项的相机模型可参见 OpenCV 相机标定教程。系数只有与坐标归一化方式一起保存才有意义:归一化相机坐标、毫米坐标和“半对角线为 1”的坐标,会产生不同数值,不能直接混用。
为方便推导,定义 s(r)=1+k1r²+k2r⁴,且令归一化视场边缘 r=1。径向映射为 rd=r·s(r),因此:
1 | 径向局部倍率:drd/dr = 1 + 3k1r² + 5k2r⁴ |
位置畸变只给出 s−1,径向短尺寸却受导数控制。例如 k1=−0.04、k2=0.03,边缘位置畸变为 −1%,径向局部倍率为 1.03,切向局部倍率为 0.99。若采用中心比例测量边缘附近的小径向长度,误差可能接近 +3%,而沿圆周方向的小长度约为 −1%。
这不是说所有标称 1% 的镜头都会出现 3% 局部误差,而是说明仅有最大位置偏差不足以约束导数。测量任务若特别关心局部尺寸,应额外约束或验证局部倍率。
映射是否能稳定反算
如果 drd/dr 在有效半径内变为零或负数,径向映射会出现折叠;两个不同的理想位置可能映射到同一半径,此时单值逆函数失效。即使导数仍为正,若接近零,反算也会放大输入位置噪声。
对这个简化模型,逆向局部灵敏度是 dr/drd=1/(drd/dr)。这意味着“校正之后看起来很直”并不能证明校正后的尺寸可靠:映射在某些区域可能对像素定位误差特别敏感。
下面代码使用 Python 3 标准库,对构造模型采样,并用二分法反算。代码只适用于已确认单调且目标落在 [0,1] 的映射范围内的情况。
1 | k1, k2 = -0.04, 0.03 |
采样检查不能构成任意高阶模型单调性的严格证明。本例导数是 r² 的二次式,也可直接求极小值,得到 r²=0.4、最小倍率 0.976。工程里若采用更复杂模型,需要更可靠的区间检查或解析约束,不能只看几个离散点为正。
采样应覆盖什么
旋转对称设计初步分析可先沿多个半径布点,例如归一化半径 0、0.2、0.4、0.6、0.8、0.9、1.0;边缘加密是因为非线性可能在边缘增长。装调后的实物还要覆盖多个方位角、四边与四角,观察同一半径是否存在方向差异。
拟合数据与验收数据应分开。可以把一部分标定点用于拟合,剩余点用于交叉验证;更好的独立验证是移动标定板或使用不同位置的基准件。只报告拟合样本残差,会把过拟合当成高精度。高阶模型能压低训练误差,但可能在采样空洞、视场外或不同焦距状态下不稳定。
建议至少记录 RMS 残差、最大残差、分视场残差、局部距离误差,并绘制残差矢量。全局 RMS 很小而边缘连续朝一个方向偏移,说明模型或采样覆盖仍有系统问题;不能用更多中心样本稀释边缘误差。
用局部误差传播决定采样精度
把二维前向映射记为 q=g(p),雅可比矩阵 J 描述局部位置变化。反算在局部可写成 δp≈J逆·δq;若输入定位误差协方差为 Σq,理想坐标误差近似为 J逆·Σq·J逆转置。径向模型的两条主方向恰好对应前文的径向和切向倍率,因此两个方向的误差放大可能不同。
举例来说,某区域前向径向倍率只有 0.8,原图径向定位噪声为 0.1 像素,反算后约为 0.125 像素。若这里物方比例为 20 μm/像素,仅这一项标准差便约 2.5 μm。标定残差再低,也不能让运行阶段的边缘噪声自动消失。
距离测量还涉及两个端点:若误差独立可以合成方差,若两点共享相机姿态误差、比例误差或标定参数误差,则它们可能相关。不能把每个点的 RMS 残差简单当作独立误差再平方相加。高要求应用应保留标定参数不确定度,并用独立基准距离直接检验最终结果。
像素重采样也是误差链的一部分
如果目标只是测量,通常可以直接把检测到的亚像素点反算到理想坐标,再计算距离,避免整幅图像重采样。若需要校正图用于显示或后续分割,输出像素应通过逆向查找确定输入采样位置,避免前向投影留下空洞。双线性插值会平滑边缘,输出图的阈值位置未必与原始图的点坐标反算完全一致。
几何校正也不能补回镜头边缘已经丢失的空间信息。强拉伸区域会放大原始像素与模糊,畸变校正和分辨率应分别验收。对要求很高的尺寸任务,推荐先明确坐标映射与不确定度,再决定是否需要生成“看起来规则”的图像。
最后,把内参、畸变系数、输入分辨率、ROI 原点、像素合并模式和镜头状态作为同一个标定版本保存。裁剪图像之后仍使用未平移的主点,或者缩放图像后不调整焦距参数,都会让正确的标定模型产生错误结果。