Halcon的模板匹配函数
best_match_mg(Image : : TemplateID, MaxError, SubPixel, NumLevels, WhichLevels : Row, Column, Error)
最佳匹配应用灰度匹配且使用图像金字塔。best_match_mg的工作原理与best_match类似,但由于使用了金字塔,因此速度更快。输入是一个具有可选的缩小域的图像。在图像域的这些点中搜索模板,其中模型完全位于图像中。这意味着,如果模型超出图像边界,将无法找到它。参数MaxError指定模板匹配的最大错误。使用较小的值会减少运行时间,但可能会错过模式。与“最佳匹配”相比,必须选择更大的MaxError值,因为金字塔较高级别的错误通常更大。
SubPixel指定结果是否以亚像素精度计算。NumLevels的值为1将产生类似于“最佳匹配”的运算符,即仅使用原始灰度值。对于大于1的值,算法从最低分辨率开始,搜索匹配误差最小的位置。在下一个更高的分辨率下,这个位置被细化。这将持续到最大分辨率(WhichLevels='all')。
作为一种替代方法,可以使用值为“original”的模式。在这种情况下,不仅误差最小的位置,而且所有低于最大误差的点都将在下一个更高的分辨率中进一步分析。这种方法速度较慢,但更稳定,而且错过正确位置的可能性很低。在这种情况下,通常可以从较低的分辨率开始(金字塔中的较高级别,即NumLevels的值较大),这会导致运行时间的减少。除了值'all'和'original'之外,您可以明确指定金字塔级别在“match all”和“best match”之间切换的位置。这里0对应于“original”,NumLevels-1相当于“all”。在大多数情况下,介于两者之间的值是速度和稳定检测之间的良好折衷。值越大,levels的运行时间越短,检测越稳定。NumLevels的值必须等于或小于用于创建模板的值。
在行和列中返回找到的匹配位置的位置。相应的误差在误差中给出。如果在MaxError下面找不到点,则返回值255表示错误,0表示行和列。如果所需对象丢失(找不到对象或位置错误),则必须将MaxError设置为更高或更低。同时检查照明是否已更改(请参见设置偏移模板)。
该位置的最大误差(无噪声)为0.1像素。平均误差为0.03像素。
下文中将举出具体实例。