halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类。
一、 Shape_Based匹配方法
1.1 形状匹配常见的有四种情况
- 一般形状匹配模板shape_model、
- 线性变形匹配模板planar_deformable_model、
- 局部可变形模板local_deformable_model、
- 和比例缩放模板Scale_model
1.2 四种匹配的特点
匹配函数类型 | 特点 |
shape_model | 不支持投影变形的模板匹配,是速度是最高的。 |
planar_deformable_model | 是支持投影变形的匹配 |
local_deformable_model | 是支持局部变形的匹配 |
Scale_model | 是支持投影变形的匹配 |
1.3 一般形状匹配模板shape_model
一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小或是投影变形如倾斜等,均会影响查找结果。涉及到的算子通常为:
- create_shape_model
- find_shape_model
1.4 线性变形匹配模板planar_deformable_model
一般形状匹配模板是指模板在行列方向上可以进行适当的缩放。行列方向上可以分别独立的进行一个适当的缩放变形来匹配。主要参数有:
- 行列方向查找缩放比例、
- 图像金字塔、
- 行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、
- 设置超找的角度、
- 已经超找结果后得到的位置和匹配分数
线性变形匹配又分为两种:
- 带标定的可变形模板匹配和
- 不带标定的可变形模板匹配。
涉及到的算子有:
- 不带标定的模板:
创建和查找模板算子create_planar_uncalib_deformable_model和find_planar_uncalib_deformable_model
- 带标定模板的匹配:
先读入摄像机内参和外参 read_cam_par 和read_pose 创建和查找模板算子 create_planar_calib_deformable_model和find_planar_calib_deformable_model
1.5 局部变形模板
是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。例如包装纸袋上图案查找。参数和线性变形额差不多
算子如下:
- create_local_deformable_model
- find_local_deformable_model
1.6 比例缩放末班匹配
是介于一般形状匹配和线性变形匹配之间的一种方法。它可以匹配放大或是缩小的模板,但是仅限于模板大小的缩放,即行列缩放因子一样。这也是它和线性缩放最大的不同。
涉及到的算子如下:
- create_scale_shape_model和
- find_scale_shape_model
二、 Gray-Value-Based匹配
基于灰度值的匹配是经典的方法,只有当内部的灰度值 对象没有变化,如果没有丢失的部分和没有杂乱。该方法可以在搜索图像中旋转的对象实例。请注意,对于几乎所有应用程序, !其他方法,例如,基于相关的匹配或基于形状的匹配之一方法,是首选。只有罕见情况,非常缓慢的基于经典灰度值的匹配是优选的,包括匹配必须是光照变化的情况。如果,例如一个 必须找到彩色图案,并且搜索图像中对象的色调值不得偏离,模板图像中对象的色调值,光照不变的方法可能更少合适,因为他们使用归一化的灰度值,即,他们评估灰度之间的相对差异 值而不是绝对值。
2.1 创建模板方法如下
- create_template
- create_template_rot
- clear_template
- write_template
- read_template
2.2 匹配搜索操作
- best_match,
- best_match_mg,
- best_match_pre_mg,
- best_match_rot;
- best_match_not_mg,
- fast_match,fast_match_mg;
2.3 模板调整操作
- adapt_template
- set_offset_template
- set_reference_template
三、Component-Based匹配
基于组件的匹配是基于形状匹配的扩展。他可以看成多个形状模板,具有一定连接结构共同组成的模板。
与基于形状的匹配一样,基于组件的匹配提取轮廓并将其形状,与预先创建的模型匹配。但与基于形状的匹配相反,组件模型由多个组件组成,这些组件可以改变它们的关系,即它们可以相对于彼此移动和旋转。这在创建模型时必须确定或指定可能的关系。然后,实际匹配返回找到的模型实例的各个关系。请注意,与基于形状的 匹配比较,对于基于组件的匹配,无法进行大小缩放。
定位可以相对移动的组件的任务比 基于形状的匹配所需的过程更长。例如,不是单个 ROI,而是多个 ROI (包含初始组件)必须被选择或提取。此外,关系,即 必须确定模型组件之间可能的移动。概览,图 3.16 说明了基于组件的匹配所需的主要步骤。
参考流程图。
关于更多信息可以专题说明。
3.1 操作列表
- clear_component_model 释放组件模型的内存。
- clear_training_components释放组件训练结果的内存。
- cluster_model_components在训练结果中采用用于创建模型组件的新参数。
- create_trained_component_model根据经过训练的组件准备用于匹配的组件模型。
- deserialize_component_model反序列化一个序列化的组件模型。
- deserialize_training_components反序列化一个组件训练结果。
- find_component_model在图像中找到组件模型的最佳匹配。
- gen_initial_components提取组件模型的初始组件。
- get_component_model_params返回组件模型的参数。
- get_component_model_tree返回组件模型的搜索树。
- get_component_relations返回包含在训练结果中的模型组件之间的关系。
- get_found_component_model返回已找到的组件模型实例的组件。
- get_training_components返回特定图像中的初始或模型组件。
- inspect_clustered_components检查从训练中获得的刚性模型组件。
- modify_component_relations修改训练结果中的关系。
- read_training_components从文件中读取组件训练结果。
- serialize_component_model序列化组件模型。
- serialize_training_components序列化一个组件训练结果。
- train_model_components为基于组件的匹配训练组件和关系。
- write_training_components将组件训练结果写入文件。