在产线上调过一堆视觉定位工位之后,我越来越确认一件事:模板匹配项目的成败,算法占三成,落地占七成。
参数会不会调、陷阱认不认识、验收怎么设计——这三件事决定了项目是"一次交付出厂"还是"驻场改到怀疑人生"。这篇是落地手册,把踩过的坑按顺序摆一遍。
模板匹配的可调参数看起来一堆,其实主线就三条。
特征尺度:精修层有多细,精度就有多高。
它决定匹配最后在最细的哪一层上给你结果。设为 1(原图分辨率)精度最好;调大可以提速、抗轻微散焦,但精度下降。精度不达标时第一反应应该是它,而不是去动别的。
速度尺度:粗搜层有多粗,粗定位就有多快。
它决定金字塔往上砍多少层。调大节拍变快,但两个副作用要警惕:目标变小之后特征变少,以及对称目标、小目标的漏检风险上升。厂商文档里那句"速度尺度值越大越易出错",是无数返工换来的。
阈值与链长:背景有多脏,就收得多紧。
边缘阈值控制"什么样的边算边":背景杂波多就调高,弱对比目标反而要调低。最短链长控制"多短的边算噪声":孤立噪点多就加大。这两个参数有自动确定模式,默认值能覆盖大多数工位,先跑自动,看效果再手动微调。
另外给从其他平台迁移参数的同学提个醒:不同厂商的"尺度"含义可能完全不同。有的平台尺度是"除数",有的是"层号",直接照抄参数会翻车。迁移前用一张方案文件里的实际轮廓点间距验证一下倍数,五分钟避免一下午。
1. 光照一变就找不到了。
如果用的是灰度比对类方法,这是必然的。换用基于边缘梯度方向的轮廓匹配,从机制上解决——这也是第 1 篇反复强调的选型原则。
2. 高对称目标,角度出来差 180 度。
圆形螺母、正方形料片这类目标,转个角度长得一模一样,属于原理性限制,调参无法根治。工程对策:建模时框进非对称的局部特征,或者接受"位置对、角度有歧义",在下游用它不敏感的维度。
3. 目标被遮挡,分数掉一截。
遮挡本质上是在"撕毁名片":挡掉多少比例,分数就掉多少。可调的是匹配的遮挡容忍参数(按实际遮挡率放宽,别过度),进阶做法是建模时用掩膜把"一定会被挡住的区域"剔出去,只保留判别特征。但要清楚底线:当遮挡恰好盖住目标唯一的旋转判别特征时,再好的算法也分不清正反——这是部分匹配的数学共性,不是 bug。
4. 目标跑出视野就丢。
传送带上的目标经常只露一半。这类工位要开"延拓容忍":允许匹配框出界一定比例仍输出结果。参数怎么定?想清楚工艺上"目标最多露多少也要找到",别凭感觉。
5. 精度总是差那么一点。
按这个顺序排查:特征尺度是否为 1 → 位姿精修是否开启 → 角度是否做了档位间细化 → 标定和真值本身是否可信。多数"算法不准"的案子,最后查出来是标定板和像素当量在说谎。
这是我最想告诉刚入行同学的一节。
用合成真值,别用人工读数。 把目标按已知的位置、角度、缩放合成到图里,算法输出的位姿和真值做差——位置、角度、缩放误差全部可量化。人工拖框读数的验收方式,本身就带半像素级误差。
看成功率,不看冠军案例。 一张图调到 0.1 像素谁都会,工业要的是几百张、跨班次、跨光照条件下成功率稳定。常见做法是覆盖平移、旋转、缩放、复合变换、遮挡多档的回归用例集,每次改动全量跑一遍。
做确定性验证。 同一组用例连跑两遍,结果必须零差异。输出抖动的算法在现场就是"时好时坏",而时好时坏在客户嘴里只有一种表述:不好用。
验收口径写进交付物。 "位置误差<3px、角度误差<2°、成功率 100%"这种判据要落纸面。视觉算法的验收,从来不看它最好能多准,而看它最差会多差。

精修与判据:粗定位的答案经过插值、迭代贴边和分数复核,合格才被输出。
三篇讲完,收个尾:
模板匹配不是什么新潮技术,它在工业现场跑了三十多年。但正如你在系列里看到的——让一个"老算法"在现代产线上稳定赚钱的,从来不是算法本身的新旧,而是背后一整套工程化的功夫。
这也是我建议每个机器视觉新人从模板匹配入门的原因:它小到能看懂全部细节,又大到能装下定位项目的全部问题。
你在落地时踩过什么坑?评论区聊聊。