当前位置:首页 > 嵌入式 > 嵌入式分享

2D定位引导在产线落地时,一个很现实的问题是:不同定位工位选用不同的匹配算法,但不管是哪种算法,都会在某些场景下出现定位失败。同样是定位失败,表面看起来都是“系统找不到工件”或者“找到了但位置是错的”,背后原因却往往截然不同——模板匹配算法、边缘匹配算法、灰度匹配算法、基于特征的匹配算法,它们各自的失败机理不一样,排查的方向也完全不一样。很多调试工程师把定位失败笼统归因于“算法不够强”,就换个算法重试,结果问题依旧。真正有效的思路,是先搞清楚当前用的是哪类算法,再顺着该类算法的工作原理,反推它最可能在什么场景下失效。这篇文章就按常见算法类型,逐类分析各自的定位失败原因和典型场景。

模板匹配算法的失败原因

模板匹配是2D定位里结构较简单的一类,它的原理是把调试阶段存好的标准工件图像模板,在实时图像里逐位置滑动比对相似度,找出得分最高的位置。由于它的判断完全依赖模板和实时图像的灰度相似度,失败原因主要集中在对图像变化过于敏感这一点上。

第一类典型失败是全局灰度变化导致的识别失败。模板匹配比对的是一整块区域的灰度分布,如果实时图像的亮度整体发生变化——比如光照波动、光源老化、工件表面颜色换了批次——模板区域和实时图像的灰度差异就会整体放大,相似度得分大幅下降,直接跌破阈值报识别失败。这是模板匹配在光照不稳定的工位上容易翻车的主要原因。

第二类典型失败是局部遮挡造成的匹配失败。模板匹配要求整块模板区域尽可能完整匹配,只要工件被夹爪、料盒挡住一部分,或者表面沾了油污改变了局部灰度,被遮挡区域的灰度就和模板对不上,整个区域的匹配得分被拉低,一样会报识别失败。它对局部干扰几乎没有容忍度。

第三类典型失败是旋转角度超出搜索范围的失配。模板匹配本身对旋转敏感,如果工件摆放角度超出算法预设的旋转搜索范围,模板和旋转后的实时图像对不上,得分就会明显下降。要覆盖更大的角度范围,就得扩大旋转搜索,但会明显增加计算耗时。

基于边缘匹配算法的失败原因

边缘匹配只锚定工件外轮廓的几何边,不像模板匹配那样依赖内部灰度,因此抗光照波动和表面纹理变化的能力更强,但也有它独有的失败机理。

第一类典型失败是强反光造成的伪边缘误判。边缘匹配依赖检测灰度跳变找轮廓边,如果工件是高反光材质,光源打上去形成亮带,亮带边缘的灰度跳变和真实轮廓几乎一样强,算法很容易把反光带的伪边缘当成工件轮廓,导致算出的位置偏离真实值。这类失败不是“找不到”,而是“找错了边”,输出的位置坐标带着明显偏差。

第二类典型失败是严重遮挡导致的边缘点不足。边缘匹配靠大量边缘点的几何投票算位置,需要足够的边缘点参与计算。如果工件轮廓被大面积遮挡,可见的边缘点数量不够,投票算出的位置就会出现偏差,严重时直接触发识别失败。它对比模板匹配容忍局部遮挡,但这个容忍度有上限。

第三类典型失败是相似轮廓的多目标混淆。如果视野里同时出现多个外形轮廓相似的工件,边缘匹配在搜索时可能把旁边相似工件的边缘当成目标轮廓匹配,输出的位置对应错了对象。这类失败在散料堆叠、多工件紧邻摆放的场景里比较常见,需要在模板里增加目标独有的特征点才能区分。

基于特征点匹配算法的失败原因

基于特征点的匹配算法,是靠检测图像里具有独特结构的关键点(比如角点、交点、高对比度标记)来定位,它不依赖整块区域灰度,对光照和部分遮挡的适应能力较强,但也存在自身特点导致的失败场景。

第一类典型失败是特征点数量不足或分布不均。特征点匹配需要图像里存在足够多、且分布合理的关键点才能稳定解算出位置。如果工件表面过于光滑、缺乏角点和纹理,检测出来的特征点太少,或者特征点集中在画面一小块区域,算法的定位结果就会不稳定,甚至算不出有效的位置。这类失败常见于表面光滑的金属件、无明显纹理的塑胶件。

第二类典型失败是特征点相似导致的误匹配。如果工件表面存在多个形状相似的特征结构,比如多个位置都有相同形状的圆孔、角点,算法在匹配特征点时容易把这些相似特征对应错,把A特征点当成B特征点,导致算出的位置发生明显跳变。这类失败需要通过特征点的邻域描述符、或者限定匹配范围来减少误匹配。

第三类典型失败是对图像模糊、失焦敏感。特征点检测依赖图像里清晰、锐利的局部结构,如果镜头失焦、工件在运动中产生运动模糊,特征点的位置变得不清晰,检测到的特征点位置就会偏移,定位结果跟着偏差。这类失败在工件高速移动、相机固定拍摄的场景里比较常见。

结合场景选择与排查的思路

理清不同算法的失败机理之后,就可以在遇到定位失败时,先判断当前用的是什么算法,再按对应的失败原因方向去排查,而不是盲目换算法。

对于光照波动明显、工件表面纹理多变的场景,优先考虑边缘匹配或者特征点匹配,避开对灰度敏感的模板匹配;如果已经用了模板匹配却频繁失败,先检查光照稳定性,必要时改用对灰度变化不敏感的算法。对于高反光工件,哪怕用的是边缘匹配,也要先检查光源打光结构,消除反光伪边缘,再谈算法。对于表面光滑、缺乏特征点的工件,特征点匹配天然不适用,应优先考虑边缘匹配并做好轮廓提取。对于多工件紧邻、外形相似的生产状态,要在模板里加入目标独有的特征,帮助算法区分不同对象。

整体来看,2D定位引导的定位失败,没有通用的万能原因,不同算法的失效场景有本质区别。模板匹配败在灰度敏感、遮挡无容忍;边缘匹配败在反光伪边缘、遮挡超限、相似轮廓混淆;特征点匹配败在特征不足、误匹配、图像模糊。调试时先确认算法类型,再顺藤摸瓜定位到对应的失效机理,才能针对性地通过调整打光、优化特征、增加区分标记等方式解决问题,而不是在原地反复试不同算法。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭