halcon基于形状模板匹配算子的对比

本文详细介绍了Halcon的形状模型匹配算子,包括create_shape_model、create_scale_shape_model、create_aniso_shape_model和create_planar_uncalib_deformable_model。各个算子的用途、参数和应用场景进行了阐述,例如create_shape_model适用于模板形变不大的情况,create_scaled_shape_model用于处理各向同性比例缩放,create_aniso_shape_model处理各向异性比例缩放,而create_planar_uncalib_deformable_model则适合行列方向的独立缩放变形匹配。文章还提供了创建和匹配模型的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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(忽略局部极性)’ ,即使局部对比度发生改变,模型也会被发现。

### Halcon模板匹配算子使用方法及参数说明 #### 创建形状模型 创建形状模型是模板匹配的第一步,在此过程中定义了用于后续图像中寻找对象的特征。`create_shape_model` 函数负责构建这一模型,其语法如下: ```cpp create_shape_model(Image : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast : ModelID) ``` - `NumLevels`: 控制金字塔层数量,通常设为自动模式。 - `AngleStart`, `AngleExtent`, 和 `AngleStep`: 定义旋转范围及其增量[^4]。 - `Optimization`: 提供优化选项以提高速度或准确性。 - `Metric`: 设定评估标准,例如 `'use_polarity'` 表明目标和背景之间的灰度关系需一致[^1]。 - `MinContrast`: 设置最小对比度阈值。 #### 查找已知模型实例 一旦建立了形状模型,则可以利用特定函数来定位这些模型在新图片中的位置。对于固定大小的对象,可采用 `find_shape_model`; 若考虑缩放变化则应选用 `find_scaled_shape_model`. 后者允许指定角度搜索区间以及是否启用亚像素级精确定位[^5]. #### 参数调整与特殊情形处理 针对不同应用场景下的需求差异,可能还需进一步微调某些高级配置项。比如通过 `set_shape_model_param` 修改默认行为;当遇到变形、模糊边界等情况时,合理选择合适的算法策略变得尤为重要[^3]. #### 示例代码片段展示如何建立并应用一个简单的形状模型: ```cpp * 加载样本图像作为模板 read_image (Image, 'fabrik') * 构建形状模型 create_shape_model (Image, 0.5, -0.52, 1.57, 0.087, 'auto', 'use_polarity', 5, 10, ModelID) * 寻找匹配的位置 find_shape_model (SearchImage, ModelID, -0.39, 0.39, 0.087, 0.5, ['num_matches'], [1], Row, Column, Angle, Score) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值