接上贴所提到,轮廓匹配是基于轮廓梯度方向来匹配的。基本原理是linemod的原理,用向量加法优化速度,替代滑窗的卷积。
本人认为vm轮廓模板也是使用该原理。
Linemod算法小结原文链接:https://blog.csdn.net/zmdsjtu/article/details/79933822
linemod原理原文链接讲解的很清楚。下文主要讲一下实现中的问题以及 mv对比halcon速度实测。
匹配原理已经有了。工程实现是个问题。我们轮廓模板匹配,只需要2D,而且需要旋转,缩放。
所以创建模板对象的时候,需要根据不同的金字塔层,创建不同步长(旋转步长,缩放步长)的模板。
以下就是工程实现过程中,我认为的一个提升速度方法:
匹配的时候,由高层开始匹配。根据高层匹配程度(速度快,精度差),决定底层匹配(速度慢,精度高)时,是否需要剪裁无效区域后再匹配。
例如:假设模板尺寸(i*j),原图尺寸(m*n),假设取了五层金字塔层。
先在第五层下匹配。第五层模板尺寸(i/32 * j/32).第五层原图尺寸(m/32 * n/32)。全角度,全缩放 匹配到的坐标是 (c1,r1)。
然后再第四层匹配。第五层模板尺寸(i/16 * j/16).第五层原图尺寸(m/16 * n/16)。全角度,全缩放 匹配到的坐标是 (c2,r2)。
如果(c1,r1)*2 = (c2,r2) (等于或偏差2个像素以内)。可以认为这个匹配点是正确的,那就直接跳到原图去匹配。并把匹配区域缩小 只比模板大20个像素。
即:原模板 尺寸(i*j), 原图尺寸(i+20 * j+20)。在这个尺度范围内匹配,角度和缩放,取刚才对比的最大范围。这样极大加快是匹配速度,同时保证了匹配精度。
如果(c1,r1)*2 != (c2,r2)(等于或偏差比较大),那继续去第三差匹配。丢掉第五层。让第三层与第四层匹配结果对比。依次类推。
使用同一组图片测试。图片分辨率是 5472*3648 两千万黑白图片。
用一组图片测试 vm 快速匹配 平均时间大概是35ms 精度匹配 平均时间大概是 45ms
而用halcon测试, 平均时间大概是 5ms
本测试不是非常严谨,主要是vm可调参数少,只能是让vm可调参数与halcon的一致,其他参数控制不了。
本测试只能大致的说明,halcon在调整好参数后,可以做到高速匹配。2000万图片,5ms。真的非常快了。
当然VM也很优秀,35ms。这个速度,基本上可以满足99.9%以上的项目需求。
(因为把全图查找,缩小为局部查找(2000*2000范围 400万像素内)速度迅速提升,耗时只要10ms左右。
(我自己写的匹配算法,大概要120ms左右。还有很大的进步空间。)
以上就是模板匹配的分享。
在工程中,模板匹配是最常用的工具。主要用来纠正对象位置不一致。
接着就是位置修正。然后是精定位,比如找圆。找直线,找交点,找垂线等等。
下图是halcon的组手工具,显示的是halcon最基础也是最重要的工具。其中就有 “模板匹配”,测量矩形 ,标定,字符训练检测,图片采集。
下一篇,测量矩形 测量矩形是所有测量的基础,是找圆,找直线的基础。