点击下方卡片,关注「3D视觉工坊」公众号
选择星标,干货第一时间送达
来源:晶力智造
「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉算法源码、求职招聘等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!
畸变模型是为了解释光学误差,而不是为整个系统“兜底”。一旦你把不该它背的锅交给它,标定一定会“看起来很准,但用起来很飘”。为什么大家总想“多加几个畸变参数”?
在很多项目里,你一定见过这样的场景:标定 RMSE 还有点大,边缘误差压不下去,个别姿态下偏差明显。于是自然想到一句话:“要不把畸变模型再开高一点?”,k3、k4、k5、p1、p2、thin prism、rational model……参数一多,重投影误差真的会降。但问题是:降下来的那部分误差,真的是“畸变”吗?
二、先说清楚:畸变参数“天生该干什么”
从物理意义上,畸变模型只应该描述一件事:光线在镜头内部传播时,偏离理想针孔模型的系统性规律误差。
典型包括:径向畸变(镜片曲率),切向畸变(装配偏心),少量高阶非线性光学误差。注意关键词:光学、系统性、稳定。如果某种误差不满足这三个特征,它就不该交给畸变参数。
三、第一类“不该交给畸变”的误差:外参和结构问题
1. 相机位姿微动 ≠ 畸变
现实中最常见的错误用法是:用畸变参数,去“吃掉”相机位姿不稳定。
例如:支架热胀冷缩,相机上电后姿态微变,震动导致外参缓慢漂移。这些误差的本质是:R、t 在变,而不是成像几何在弯。如果你发现:同一姿态下,重投影误差随时间变化,高阶畸变项数值异常大,换个工位或换次安装就要重标,那几乎可以肯定:你在用畸变参数替结构问题“背锅”。
2. 姿态退化 ≠ 畸变不足
另一个经典误区:标定板角度太单一,Z 方向变化很小,结果外参不可观。此时 LM 会干一件事:把不可解的自由度,塞进畸变参数里。这会导致:标定时看似收敛,实际外推完全失效,畸变参数对姿态极度敏感。这不是畸变模型的问题,而是数据退化的问题。
四、第二类“不该交给畸变”的误差:检测与算法误差
1. 特征提取抖动 ≠ 光学畸变
在工业现场,经常出现这种情况:光照不稳定,反光、阴影、饱和,亚像素角点在跳。结果是:像素坐标在抖,而不是成像模型在变。如果你用畸变参数去拟合这些抖动:畸变项会变得不稳定,不同光照下标定结果差异极大。
工程结论很明确:算法噪声,应该靠算法解决,而不是靠几何参数硬拟合。
2. ISP 链路变化 ≠ 镜头畸变变化
尤其在嵌入式或量产系统中:ISP 去畸、裁剪、缩放,数字变焦、分辨率切换,RAW / YUV 管线变化,这些都会等效改变成像模型,但它们不是“镜头畸变”。
如果你发现:换 ISP 参数就要重标,畸变参数随软件版本变,同一镜头不同相机畸变差异巨大,那说明:你把成像链路误差,当成了光学畸变。
五、第三类“不该交给畸变”的误差:物理非刚性因素
1. 标定板形变 ≠ 镜头畸变
现实中:大尺寸标定板,铝板、塑料板,受温度、重力影响,它们往往不是严格刚体。如果你看到:中心拟合好,边缘始终对不上,畸变项越来越怪,很可能原因是:标定板自己弯了,而不是镜头弯了。
这种情况下,正确做法是:建立标定板形变模型,或限制使用区域,而不是继续堆畸变参数。
2. 工件非平面 ≠ 成像畸变
在“用工件当标定物”的场景里尤其危险:工件本身有翘曲,表面不完全共面,特征点不在同一几何平面,这类误差如果被交给畸变模型:你等于在用光学参数,拟合工件的加工误差。后果往往是:换一批工件,标定关系就“失效”。
六、一个非常实用的工程判断清单
你可以用下面这张“自检表”,如果某个误差满足:随时间变化、随姿态变化、随光照 / 算法变化、随安装状态变化,那它几乎一定不该交给畸变参数。
真正适合畸变建模的误差,通常是:长期稳定,与姿态无关,与光照无关,与软件无关。
畸变模型的职责,是解释光学规律,而不是掩盖系统问题。在高精度系统中,畸变建模做得好,往往不是参数多,而是边界清楚。
你在项目中有没有遇到过 “畸变参数看起来很怪,但又说不清哪里不对”的情况?欢迎在评论区聊聊。
本文仅做学术分享,如有侵权,请联系删文。
3D视觉1V1论文辅导
3D视觉硬件,官网:www.3dcver.com
3D视觉学习圈子
「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉算法源码、求职招聘等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!