定位算法原理
关于不同的定位场景,最适合使用的算法原理,Halcon的原理文档中描述如下:
在图案缩放可用忽略,图案纹理丰富的场景,适合采用基于互相关的匹配。
输入参考图像,搜索图像,参考图像在搜索图像上滑动,得到滑动位置的NCC得分。如下图所示,高于阈值的最亮的地方认为是匹配位置。
从左到右分别是Search图,Kernel图,Score图。
比如搜索图是128128,模板图是6464,那么得分图为(128-64+1)*(128-64+1)。
使用的ZNCC公式:
定位工具原理
基于互相关的方案,会使用金字塔的方法进行优化,定位工具的原理为使用44降采样,22降采样,原始图不同尺度进行关联定位。高层金字塔的候选定位结果指导低层金字塔的小范围搜索,当低层金字塔定位失败时,可用使用高层金字塔给出一个可用接受的定位结果。
算法流程
原理
根据不同的配置,走不同的流程,默认不直接定位,不粗定位。
坐标系
ImKernel模板图像上的rcKernel生成定位的模板;
ImSearch检测图上指定搜索区域,Kernel在其上滑动,得到定位结果。
定位锚点在Kernel的中心。
按层定位,降采样定位结果在下一层金字塔上会扩展2像素进行搜索。
降采样方法对NCC得分影响
使用图像金字塔方法,可以提高算法效率,但降采样会对NCC得分造成影响。不合适的降采样方法,会导致NCC得分的显著降低。从而在高层金子塔无法找到候选结果,从而导致无法找全定位结果。这对当前自动建模确定版周有一定的影响。
均值降采样方法
在做4倍binning时,一个简单的实现是使用44的均值滤波,然后抽掉非4的整倍数的行和列得到降采样结果。这个算子效率会很高。
这种方法,即使是对于相同的图像,在xy方向各平移2像素后,重新降采样,得到的结果图像和原始图像降采样得到的图像在像素值上会有显著的差异。
一个极端了例子如下:
平移22像素后:
黑白网格降采样后居然变成了128的纯色灰度图。在这个极端的例子中,这个降采样方法是不能用的。
高斯降采样方法
参考opencv中pyrDown和buildPyramid,其代码实现使用的是
的高斯核。
滤波后抽掉偶数行和列,得到降采样后的图。
使用这个方法,上述黑白网格图像的滤波结果为:
继续降采样,得到结果为:
纹理特征仍然保留,且不随图像的平移而丢失纹理特征。
如果是对88的黑白网格,平移2个像素,使用均值滤波结果为
平移4个像素的滤波结果为:
而使用55高斯降采样的结果为,不随平移变化: