一、halcon形状模型匹配常用算子
1)create_shape_model
2)create_scale_shape_model
3)create_aniso_shape_model
4)create_planar_uncalib_deformable_model
相同点:大部分参数定义是一样的,用法基本相同。
二、基于形状模型匹配算子详解
2.1 create_shape_model 基础形状模板
主要应用于模板没有太大的形变的条件下,局部可以有轻微变形
1)没有形变的情况下正常使用即可
create_shape_model (ImageReduced, 'auto', -0.39, 0.78, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
find_shape_model (Image, ModelID, -0.39, 0.78, 0.7, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)2)有局部变形的情况
create_shape_model (ImageReduced, 'auto', -0.39, 0.78, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) 创建模板正常使用
find_shape_model (SearchImage, ModelID, 0, 0, 0.4, 1, 0.5, 'max_deformation 1', 0, 0.9, Row, Column, Angle, Score)
在匹配模板时,SubPixel参数需设置成局部最大变形量即可
2.2 create_scale_shape_model 各向同性比例缩放形状模板
主要应用于模板在X和Y方向有相同的形变的场合,即x和Y向变形尺度比例一致的情况。
create_scaled_shape_model (ImageReduced, 5, rad(-45), rad(90), 'auto', 0.8, 1.0, 'auto', 'none', 'ignore_global_polarity', 40, 10, ModelID)
在创建模板时,只需要设置缩放比例即可,例如本例中的0.8到1.0
使用调试助手可以直接选择基于形状 ,使用的算子为create_scaled_shape_model
例程解析:
如下图:图片中有三个形状一样,但是尺寸大小不一样的图案。观察可以发现三个图案的有着各项同性比例缩放的关系,这时可以考虑可以使用各向同性比例缩放形状模板进行图像的配准
算子函数原型:
create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
参数说明:
1)Template:图像上要创建模型的图像,模型图像 Template 的定义域的重心(center of gravity)用作模型的原点origin(或者说参考点,reference point)。用 set_shape_model_origin 可以设置不同原点。
2)NumLevels:图像金字塔的级别
图像金字塔是图像多尺度表达的一种方式,是一种以多分辨率来解释图像的有效性但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状(自下而上)逐步降低,且来源于同一张原始图的图像分辨率集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。如果选择了一个完整的模型预生成,则在每个级别上都会以多个旋转角度和缩放比例生成模型。
3)AngleStart,AngleExtent和AngleStep,旋转角度相关
AngleStart:初始角度
AngleExtent,角度范围 决定模型在图像中可能出现的旋转角度范围
AngleStep 确定了所选角度范围内的步长
注意:find_scaled_shape_model 只能在该角度范围内找到模型,,如果在 find_scaled_shape_model 中未指定亚像素精度(subpixel accuracy),该参数会指定其中角度的可达精度。
亚像素,Sub Pixel
亚像素,面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的。但是在微观上,它们之间还有无限的更小的东西存在。这个更小的东西我们称它为“亚像素”。实际上“亚像素”应该是存在的,只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。
应根据对象的大小选择 AngleStep,角度步长 。较小的模型在图像中不会有很多不同的离散旋转。因此对于较小的模型,应选择较大的 AngleStep (这一点应该和受影响的像素有关)。
4)ScaleMin,ScaleMax和ScaleStep,缩放比例相关
ScaleMin 和 ScaleMax 确定了模型的比例(大小)范围。scale(译成比例好点)值为1时,对应模型的原始大小,参数 ScaleStep 确定了所选比例范围内的步长。因此,如果在 find_scaled_shape_model 中未指定亚像素精度,该参数指定 find_scaled_shape_model 中缩放的可达精度。
5)Optimization,优化
对于特别大的模型,通过将 Optimization 设置为非’none’的值以减少模型点的数量也许会很有用。如果 Optimization=‘none’ (即关掉优化),则所有模型点都会被存储。在其他情况下,根据 Optimization 的值的不同,点的数量会相应减少。如果点数减少,在 find_scaled_shape_model 中可能需要将 Greediness 参数设置为更小的值,如0.7或0.8。对于小模型,减少模型点的数量并不会加快搜索。因为该情况下,通常需要检查更多潜在的模型实例(模型小了,图像中存在的可能就更多了)。
如果将Optimization设置为’auto’, create_scaled_shape_model 将自动确定模型点数的减少。
no_pregeneration:不预先储存 (不占内存,速度快,精度相对弱)
pregeneration:预先存储(占内存,速度慢,精度高)
none:不去掉点
point_reduction_high:去边缘点-高 2/3
point_reduction_low :去边缘点-低 1/4
point_reduction_medium :去边缘点-中 1/3
6)Metric,度量/标准
如果 Metric = ‘use_polarity(使用极性)’ ,则图像中的对象必须和模型具有相同的对比度(Contrast)。比如,如果模型是一个在暗/深色背景上的明亮物体,则仅当对象比背景更亮时才会被找到。
如果 Metric = ‘ignore_global_polarity(忽略全局极性)’ ,即使对比度全局反转(即原本对象要比背景亮才能找到,现在对象比背景暗也能找到),对象也会被找到。该情况下, find_scaled_shape_model 的运行时间会略有增加。
如果 Metric = ‘ignore_local_polarity(忽略局部极性)’ ,即使局部对比度发生改变,模型也会被发现。