u 匹配方法的类型
通过所包含像素的灰度值关系描述模型的方法:
l 经典gray-value-based matching基于灰度值匹配,只在非常少的情况下使用,只能在光照可以变量化的情况下使用。
l 更加强大的correlation-based matching基于相关性的匹配,它使用规范化互相关( NCC )来分别匹配物体或patterns。不能返回缩放比例。适用于纹理随机变化的物体或形状略有变化的物体。此外,这种方法在处理强烈散焦的图像时也适用。
通过轮廓的形状描述模型的方法:
u shape-based matching基于形状的匹配,可以返回缩放比例,均匀缩放或各向异性缩放。物体存在遮挡或杂乱或者颜色发生变化情况下,仍然适用。
u component-based matching基于组件的匹配,它在物体的几个部件(刚性部分)相对于彼此移动的特定情况下使用,且物体不能缩放。
u local deformable matching局部可变形匹配,可返回向量描述物体实际的局部变形并且允许矫正包含变形模型的那部分图像。由于曲面扭曲,它只返回找到的模型实例的位置而不返回方向。
u perspective deformable matching透视变形匹配,它还可以处理透视变形并提供3D姿势校准版本,而不是可以导出的2D变换参数。
通过一组重要图像点描述模型的方法:
u descriptor-based matching基于描述符的匹配,匹配一组所谓的兴趣要点。与透视变形匹配类似,它可以处理透视变形并提供3D姿势校准版本,而不是可以导出的2D变换参数。
u 匹配方法的选择
根据2D或3D来选择(2Dobjects 指的是三维物体的二维图像):
u 正交视图下的2D object
可以选择gray-value-based,correlation-based, shape-based, component-based, 和 local deformable matching方法来从图片上查找2D物体。建立模板和查找模板的图片都是物体的正交视图。理论下也可以选择perspective deformable 或者 descriptor-based matching,但是他们都没有前面提到的五种方法快,他们更适合用于查找透视视图下的2D物体。
u 透视视图下的2D object
在透视视图下,可以获取2D物体的位置和方向,还可以获取物体的3D姿势,这种情况下可以选择perspective deformable 或者 descriptor-basedmatching。
u 3D object
3D匹配方法从多张2D图片中搜索3D物体。有多种匹配方法可以使用,例如基于形状的3D匹配,这种方法不是通过指定图片来建立模型,而是通过一个合成的DXF CAD模型。如果一个物体拥有复杂的3D,要把它从其它物体中识别出来需要用到三个维度,那就只能使用3D匹配。3D匹配方法只有在不止需要一个平面部分来把物体从图片上识别出来的情况下才需要使用。
如果一个3D物体包含一个特有的平面部分,而且这个部分在所有搜索图片上都能找到,或者如果搜索的平面对象可以在3D空间中任意定向,也可以选择透视视图下找2D物体的方法,如perspective deformable 或者 descriptor-basedmatching,因为这样更加方便快捷。选择哪种透视方法取决于具体应用。如果的物体在搜索图像中各向异性地缩放,只有perspective deformable是合适的。如果仅平移和旋转,则两种方法都适用。同时,也需要考虑物体的外观,这两种透视视图匹配方法最大的不同在于描述模型的方法,perspective deformable通过物体轮廓形状描述模型的。而descriptor-based matching通过一组重要图像点描述模型的。如果物体具有任意但固定的纹理特征,则descriptor-based matching更适合。
根据方法可以处理的物体的几何变换,返回的变换参数,可以处理遮挡、杂乱、光照变化的情况选择
平移 旋转 均匀缩放 各向异性缩放
X表示可以处理的变换
X表示返回的参数
阻挡 杂乱 光照变化
u 匹配的一般过程
1、准备参考图像(如果需要,可以进行一些预处理)
2、准备模板:通过选择ROI将参考图像Reduce为模板图像。
3、创建模型(如果需要,修改现有模型)
4、存储模型到文件中(如果需要重复使用)
5、从文件中查询信息(在重复使用先前存储的模型时用到)
6、限制搜索空间以加快匹配
7、在搜索图像(可能经过预处理的)中搜索模型
8、进一步处理匹配结果
9、并清除模型。
u 准备模板
u 选择合适的ROI将参考图像Reduce为模板图像
Ø 区域(ROI)可以通过显式定义其参数来指定。HALCON提供了多种算子,从标准形状(如矩形gen_rectangle2或椭圆形gen_ellipse)到自由形状(如多边形gen_region_polygon_filled),如果这些算子的参数无法确定,可以先画出来,再根据画出来的形状的参数来生成区域。
Ø 区域可以通过使用例如blob分析的图像处理来指定。图像首先通过threshold进行分割,然后选择有特定特征的部分作为ROI(一般通过算子connection、fill_up和select_shape)。还可以通过集合论创建复杂的ROI.(如union2和 difference.)
u 选择的ROI的影响
Ø ROI的参考点
默认选择ROI的中心点为参考点,用于估计模型的位置、旋转角度和缩放比例,如果没有选择ROI,图片的中心点为参考点。当模型的参考点位于图片内,才可以搜索出模型。创建模型后,我们可以修改参考点。一般情况下,不要去修改参考点。
Ø ROI的轮廓,形状、大小和方向
为了使模型具有良好的质量,应选择ROI以使噪声或杂波最小化。这可以通过“掩蔽”对象中包含杂波的部分来获得。例如基于形状的匹配需要电容器的模型。为了尽可能地排除杂乱,使用两个圆形区域之间的差来创建环形ROI。
此外,轮廓点的数量也会影响物体定位的准确度,轮廓点越多,定位越准确。
因为模板在不同方向上包含的轮廓不一样,匹配结果的准确度在不同方向上也会不一样。如果模板主要包含纵向的轮廓,则纵向的准确度高。所以尽可能选择包含足够的轮廓的区域。
旋转角度的准确度一方面由轮廓点到旋转中心的距离决定,一方面由轮廓的方向
与旋转中心的关系决定。
u 合成模型
Ø 创建一个合成模板图像
主要用于correlation-based matching、shape-based, component-based, localdeformable, 和perspective deformable
有一些应用从参考图片中很难提取模板图片(通过“掩蔽”对象,效果也不理想),这时候可以采用合成模板。
参考例程solution_guide/matching/synthetic_circle.hdev.
第一步:创建XLD轮廓
通过算子gen_ellipse_contour_xld创建轮廓,可以先画出轮廓。注意合成图像要比轮廓大,因为基于形状的匹配创建图像金字塔时使用,在本例中为选定金字塔匹配方法
第二步:创建一个图片并画出XLD轮廓
第三步:创建模型
通过合成图片创建模型。
Ø 直接使用XLD轮廓作为模型
对于shape-based matching、local deformable matching和perspectivedeformable matching,不需要创建合成图片来导出模型,可以直接使用XLD轮廓作为模型。
对于shape-based_matching,不需要提供参考图片、不需要选择ROI和不需要调用算子create_shape_model,create_scaled_shape_model, 或者 create_aniso_shape_model来构建模型。只需要简单调用算子create_shape_model_xld, create_scaled_shape_model_xld, 或者create_aniso_shape_model_xld。
对于local deformable matching和perspective deformable matching已有相应的算子。通过XLD轮廓创建模型时,没有关于模型极性的信息,所以当调用构建模型的算子时,参数Metric需要设置使得极性局部忽略(Metric ='ignore_local_polarity')。这会导致搜索明显变慢,Halcon提供了确定模板实例极性的方法。只需要慢速搜索一次一张可以代表所有搜索图片的搜索图片,然后调用算子set_shape_model_metric 、set_local_deformable_model_metric、set_planar_uncalib_deformable_model_metric或set_planar_calib_deformable_model_metric。然后极性信息就被保存于模板中,对接下来查找模板传递参数Metric时就可以设置为一个更加合适的值,例如’use_polarity’。
Ø 使用DXF模型导出XLD轮廓
使用算子read_contour_xld_dxf从DXF模型导出XLD轮廓后用XLD轮廓构建合成图片生成模型或直接生成模型。参考例程:examples\hdevelop\Applications\FA\pm_multiple_dxf_models.dev.和create_planar_calib_deformable_model_xld.dev 和create_planar_uncalib_deformable_model_xld.dev
u 存储模型到文件中
参考例程solution_guide/matching/reuse_model.hdev描述了如何重复使用模板(以基于均匀缩放形状的匹配为例):
1、 创建模板create_scaled_shape_model
2、 保存模板write_shape_model HALCON保存了XLD的轮廓、参考点和创建模板时使用的参数
3、 读取模板read_shape_model
4、 获取模板XLD轮廓get_shape_model_contours
5、 获取模板参考点get_shape_model_origin
6、 获取模板参数get_shape_model_params
存储在模板中的信息取决于模板的类型,很多类型的模板提供了算子去获取模板的参考点和参数,这些值都可以创建或修改模型。一些类型的模板还提供了算子来获得如基于形状的模型的轮廓或者如descriptor-based matching基于点的模型的感兴趣的点
u 加快搜索
u 限制搜索范围
搜索范围不仅包括图像的二维,还包括其他参数,例如可能的范围或者物体的多少部分必须可见(遮挡),可以旋转的角度,可以缩放的比例等等。
u 使用二次抽样