机器视觉_HALCON_模板匹配_1.CreateScaledShapeModel

本文详细介绍了HALCON中的create_scaled_shape_model算子,包括其功能、参数说明和使用场景。算子用于创建等轴性缩放的形状模型,用于图像的模板匹配。重点讨论了角度范围、缩放比例、对比度和优化选项对模型生成和匹配性能的影响。此外,提到了完全预生成模型的概念以及其内存和性能考虑。
摘要由CSDN通过智能技术生成


一、前言

在HALCON算子手册中,每个算子会包含四种编程语言(HALCON原生程序、C#、C++以及C)下的介绍。

本文以HALCON原生程序下的介绍,来学习 create_scaled_shape_model 算子(用其它语言联合HALCON开发,肯定也要能看懂HALCON原生示例程序)。虽然标题的CreateScaledShapeModel是大驼峰命名法(是C#和C++采用的命名),但这是因为我以往文章标题前缀都是以下划线分隔的。如果这边也使用下划线分隔,那标题就变成了 机器视觉_HALCON_模板匹配_create_scaled_shape_model ,虽然现在的命名引入了HALCON和其它编程语言混淆的另一个歧义。

在介绍算子前,先了解一些前置知识。

模板匹配一般指的是计算机视觉中的匹配技术。有时可能还会听到模式匹配,模式匹配(pattern matching)是一个更广的概念,它的匹配数据集可以是图像、文本、声音等各种形式的数据。

模板匹配(template matching) 是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。

模板匹配相关资料中经常会看到图像、模板和模型三个词, 图像、模板和模型 的概念分别如下:

  • 图像(image):图像是真实世界的投影,它是由光线经过透镜成像形成的二维图像。图像可以是数字图像,也可以是模拟图像。数字图像是由像素组成的矩阵,每个像素的数值标识该点的亮度或颜色值。模拟图像则是由连续的光强分布表示的图像。通俗来讲,图像就是采集到的一张张图片。
  • 模板(template):模板是一个固定的图像区域,它通常用于在图像中寻找与其最相似的区域。模板可以是任何形状的图像区域,例如一个矩形、一个圆形、一个多边形等。模板可以是二值图像、灰度图像或彩色图像。通俗讲,模板就是图像上裁一块下来,用作目标图形的图像,它是用户想在图像中找到的对象,也是图像的一部分。
  • 模型(model):模型是对真实世界中的物体或场景的抽象表示。在计算机视觉中,模型通常用于描述物体的形状、运动、纹理等特征,以便进行识别、分类等任务。

因此,图像是原始数据,模板是用于在图像中寻找目标的工具(通常是一个小的图像区域,而图像是整张大图)。模型则用于描述物体的特征和变化。这样说,可能还是有点抽象。下面给个图示说明:

原始图像(一个圆饼)

模板(裁剪出圆饼区域)

模型(将模板抽象化)

二、create_scaled_shape_model 算子

2.1 名称

create_scaled_shape_model 算子会准备一个用于匹配的 等轴性(isotropically)缩放模型(model)

isotropically


各向同性的(不随量度方向变化的特性);等轴性的;
我的理解是等比缩放的,就像下图这样的:
在这里插入图片描述

从名称直译也可知,它会准备(是准备而不是创建是因为它并不能直接输出一个模型,而是提供一个ModelID供你使用)一个比例缩放的形状模型,该模型可以作为一个模板图案,用于在后续图像中寻找类似对象。

2.2 算子签名

create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)

2.3 说明

使用该算子,你得准备一个模板,将该模板传入到算子参数 Template 中,作为一个等轴缩放的形状模型,用于匹配。模型的ROI作为 Template 的定义域(domain,简称域)进行传递。

定义域,domain
通俗讲就是一幅图像中有内容的区域。
HALCON中指的是图像要被处理的部分。因此有了ROI(感兴趣区域)。
定义域是HALCON中的region,可以被灵活定义(可以是一系列不连通像素的集合)。

输出参数 ModelID 是该模型的句柄(句柄就是我通过这个“柄”可以去使用该模型),用于后续调用 find_scaled_shape_model 。模型图像 Template 的定义域的重心(center of gravity)用作模型的原点origin(或者说参考点,reference point)。用 set_shape_model_origin 可以设置不同原点。模型是用多个图像金字塔级别生成的,并存储在内存中。

图像金字塔,image pyramid
图像金字塔是图像多尺度表达的一种方式,是一种以多分辨率来解释图像的有效性但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状(自下而上)逐步降低,且来源于同一张原始图的图像分辨率集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
在这里插入图片描述

如果选择了一个完整的模型预生成,则在每个级别上都会以多个旋转角度和缩放比例生成模型。

2.3.1 输入参数说明

  1. NumLevels,(金字塔)级别数量
    金字塔级别的数量由 NumLevels 确定。它的值应尽可能大,这样可以显著减少寻找对象所需的时间。另一方面,NumLevels 也必须选择得当,以使模型在最高金字塔级别仍是可识别的,且包含足够数量的点(至少四个)。这点可通过 inspect_shape_model 的输出来检查。如果没有生成足够的模型点,系统会在内部减少金字塔级别的数量,直到在最高金字塔级别上找到足够的模型点。如果该过程导致模型没有金字塔级别生成,即,在最低金字塔级别上模型的数量还是太少,则 create_scaled_shape_model 会返回一条错误信息。

    如果 NumLevels 设置为’auto’(或设置为0以向后兼容), create_scaled_shape_model 会自动确定金字塔级别的数量。用 get_shape_model_params 可以查询到自动计算的金字塔级别数量。在极少数情况下, create_scaled_shape_model 确定的金字塔级别数量值会过大或过小。如果所选的金字塔级别数量过大,模型可能无法在图像中被识别,或者可能需要在 find_scaled_shape_model 中设置非常小的 MinScoreGreediness 才能找到模型(最小分数小了,相当于降低了匹配标准;贪婪值小了,相当于找的更仔细了);若选择了过小的金字塔级别数量,find_scaled_shape_model 寻找模型所需的时间可能会增加。在这些情况下,应使用 inspect_shape_model 的输出来选择金字塔级别数量。

  2. AngleStart,AngleExtent和AngleStep,旋转角度相关
    参数 AngleStart,初始角度AngleExtent,角度范围 决定模型在图像中可能出现的旋转角度范围。请注意, find_scaled_shape_model 只能在该角度范围内找到模型。参数 AngleStep 确定了所选角度范围内的步长。因此,如果在 find_scaled_shape_model 中未指定亚像素精度(subpixel accuracy),该参数会指定其中角度的可达精度。

    亚像素,Sub Pixel
    亚像素,面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的。但是在微观上,它们之间还有无限的更小的东西存在。这个更小的东西我们称它为“亚像素”。实际上“亚像素”应该是存在的,只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。

    应根据对象的大小选择 AngleStep,角度步长 。较小的模型在图像中不会有很多不同的离散旋转。因此对于较小的模型,应选择较大的 AngleStep (这一点应该和受影响的像素有关)。
    如果 AngleExtent 不是 AngleStep 的整数倍,AngleStep 应做相应修改。为确保模型实例在使用 find_scaled_shape_model 时返回的旋转角度值不会恰好为0.0,可能的旋转范围做了如下修改:如果不存在正整数值n,使得 AngleStart 加上n倍的 AngleStep 恰好为0.0,则AngleStart减小最多一个 AngleStep ,而 AngleExtent 增加一个AngleStep。

  3. ScaleMin,ScaleMax和ScaleStep,缩放比例相关
    ScaleMinScaleMax 确定了模型的比例(大小)范围。scale(译成比例好点)值为1时,对应模型的原始大小。参数 ScaleStep 确定了所选比例范围内的步长。因此,如果在 find_scaled_shape_model 中未指定亚像素精度,该参数指定 find_scaled_shape_model 中缩放的可达精度。与AngleStep一样,应根据物体的大小选择ScaleStep。如果缩放范围不是ScaleStep的整数倍,ScaleStep会做相应修改。为确保对于未缩放的模型实例,find_scaled_shape_model 返回的比例值正好是1.0,可能的比例范围会做如下修改:如果没有正整数值n使得ScaleMin加上n乘以ScaleStep恰好为1.0,则ScaleMin会减少到ScaleStep,ScaleMax会增加到ScaleStep,从而使可能的缩放范围增加到ScaleStep。

  4. Optimization,优化
    对于特别大的模型,通过将 Optimization 设置为非’none’的值以减少模型点的数量也许会很有用。如果 Optimization=‘none’ (即关掉优化),则所有模型点都会被存储。在其他情况下,根据 Optimization 的值的不同,点的数量会相应减少。如果点数减少,在 find_scaled_shape_model 中可能需要将 Greediness 参数设置为更小的值,如0.7或0.8。对于小模型,减少模型点的数量并不会加快搜索。因为该情况下,通常需要检查更多潜在的模型实例(模型小了,图像中存在的可能就更多了)。

    如果将Optimization设置为’auto’, create_scaled_shape_model 将自动确定模型点数的减少。

  5. Metric,度量/标准
    参数 Metric 确定模型在图像中被识别的条件/标准。

    如果 Metric = ‘use_polarity(使用极性)’ ,则图像中的对象必须和模型具有相同的对比度(Contrast)。比如,如果模型是一个在暗/深色背景上的明亮物体,则仅当对象比背景更亮时才会被找到。

    如果 Metric = ‘ignore_global_polarity(忽略全局极性)’ ,即使对比度全局反转(即原本对象要比背景亮才能找到,现在对象比背景暗也能找到),对象也会被找到。该情况下, find_scaled_shape_model 的运行时间会略有增加。

    如果 Metric = ‘ignore_local_polarity(忽略局部极性)’ ,即使局部对比度发生改变,模型也会被发现。比如,若对象的某部分是中等灰度的(既不亮也不暗),这种情况下该模式会很有用,其中较暗或较亮的子对象都能被发现。由于这种情况下, find_scaled_shape_model 的运行时间会显著增加,因此通常最好使用 create_scaled_shape_model 创建多个模型,来映射对象可能的对比度变化,并用 find_scaled_shape_models 同时去匹配它们。

    以上三种metric仅适用于单通道图像(single-channel image)。如果将多通道图像用作模型图像或搜索图像,仅第一个通道会被使用(并且不会返回错误信息)。

    如果 Metric = ‘ignore_color_polarity’ ,即使色彩对比度局部改变,模型也会被找到。例如,如果对象的某些部分是可以改变颜色的,如从红色变为绿色。特别是在事先不知道对象在哪些通道中可见的情况下,这种模式非常有用。该模式下,find_scaled_shape_model 的运行时间也许会显著增加。metric ‘ignore_color_polarity’ 可用于具有任意数量通道的图像。如果将其用于单通道图像,其效果与’ignore_local_polarity’相同。应注意的是,对于 Metric = ‘ignore_color_polarity’ ,在使用 ‘create_scaled_shape_model’ 创建模型时和使用 ‘find_scaled_shape_model’ 搜索模型时,通道的数量可以不同。例如,这可以用于从合成生成的单通道图像创建一个模型。此外,应注意通道不需要包含光的光谱(如RGB图像中)。通道也可以包含从不同方向照亮对象获得的同一对象的图像。

  6. Contrast,对比度
    参数 Contrast 确定模型点必须具有的对比度。对比度是衡量对象与背景之间或者同一对象不同部分之间的局部灰度差异的指标应选择适当的对比度,以仅使用模板的明显特征来建立模型 。比如,现在模板(template)是以下图形,

    提取模型的时候可能不需要把整个图形取出,而只需要取其中明显特征,

    Contrast 还可以包含一个有两个值的元组。该情况下,模型使用类似于 edges_image 中使用的**滞后阈值(hysteresis threshold)**方法进行分割。此处,元组的第一个元素确定较低阈值,第二个元素确定较高阈值。可选地,Contrast 可以包含第三个值作为元组的最后一个元素。该值会确定一个阈值,用于选择基于组件大小的重要模型组件,也就是说,若组件的点数少于指定的最小大小,组件将被抑制。每个连续的金字塔级别,最小尺寸阈值除以2。如果需要抑制小的模型组件,但不执行滞后阈值处理,然而,在 Contrast 中仍需要指定三个值。该情况下,前两个值可以简单地设置为相同的值。可以使用 inspect_shape_model 提前检查此参数的效果。

    Contrast 设为 ‘auto’ ,create_scaled_shape_model 会自动确定上面描述的三个值。此外,只有对比度(‘auto_contrast’)、滞后阈值(‘auto_contrast_hyst’)和最小尺寸(‘auto_min_size’)能被自动确定。其余未能自动确定的值可以以元组的形式额外传递。同时也允许各种组合:
    例如,若传递了['auto_contrast', 'auto_min_size'],则对比度和最小尺寸都会自动确定。若传递了['auto_min_size',20,30],则最小尺寸被设为自动确定,滞后阈值被设为20和30,以此类推。某些情况下,可能会发生自动确定的对比度阈值不那么令人满意的情况。例如,如果由于特定应用程序原因需要包含或抑制某些模型组件,或者对象包含多种不同的对比度,则应优先使用手动设置这些参数。因此,在调用 create_scaled_shape_model 之前,应使用 determine_shape_model_params 自动确定对比度阈值,并随后使用 inspect_shape_model 进行验证。请注意, MinContrast 会影响自动对比度估计的结果,也会影响最小尺寸的估计。

  7. MinContrast,最小对比度
    使用 MinContrast ,可以确定 find_scaled_shape_model 执行的识别中,模型至少具备的对比度。换句话说,该参数将模型从图像噪声中分离出来。因此,一个好的选择是通过图像中噪声引起的灰度值变化范围来确定。例如,如果灰度值在10灰度级波动, MinContrast 应设为10。如果模型和搜索图像使用多通道图像,并且 Metric = ‘ignore_color_polarity’ ,则必须将一个通道中的噪声乘以通道数的平方根来确定 MinContrast 。例如,在单通道图像中的灰度值在10个灰度级范围内波动,且图像是一个三通道图像, MinContrast 应设为17。显然, MinContrast 必须小于 Contrast 。如果模型要在非常低的对比度图像中被识别, MinContrast 必须设置为相应较小的值。如果模型要在严重遮挡的情况下仍能被识别, MinContrast 应略大于噪声产生的灰度值波动范围,以确保 find_scaled_shape_model 能够稳定、准确地提取模型的位置和旋转情况。

若将 MinContrast 设为 ‘auto’ ,则最小对比度将根据模型图像中的噪声自动确定。因此,仅在识别过程中的图像噪声与模型图像中的噪声类似时,自动确定才有意义。此外,在某些情况下,建议增加自动确定的值,以便提高抗遮挡能力。可以使用 get_shape_model_params 查询自动计算的最小对比度。

2.3.2 完全的模型预生成

可选地,在 Optimization 中可以传递第二个值。该值确定模型是否被完全预生成。 Optimization 的第二个值必须设置为 ‘pregeneration’(预生成)‘no_pregeneration(不预生成)’ 。如果未使用第二个值(只传了一个值),则用 set_system(‘pregenerate_shape_models’, …) 设置模式。使用默认值 (‘pregenerate_shape_models’ = ‘false’)时,模型不会被完全预生成。模型的完全预生成通常会导致更低的运行时间,因为不需要在运行时转换模型。然而,在该情况下,创建模型所需的内存和时间会显著增加。还应注意,由于在运行时转换模型必然导致转换后的模型的内部数据与预生成的转换模型不同,因此不能期望两种模式返回完全相同的结果。例如,如果模型没有完全预生成, find_scaled_shape_model 通常会返回较低的分数(score),与完全预生成模型相比,这可能需要设置更低的 MinScore 值。此外,在两种模式下插值(interpolation)得到的姿势可能略有不同。如果需要最大准确度,应通过最小二乘法(least-squares)调整以确定模型的姿势。

如果选择了模型完全预生成,则根据所选角度和比例范围预生成模型,并存储在内存中。存储模型所需内存与角度步长、缩放步长和模型中的点数成正比。因此,如果 AngleStepScaleStep 太小,又或者 AngleExtent 或 比例范围太大,则可能会发生模型不再适配(虚拟)内存的情况。在该情况下,需增大旋转角度步长或比例步长,或者缩小角度范围和比例范围。无论何种情况,模型都尽量适配主内存,因为这可以避免操作系统的分页,使得找到对象的时间大大缩短。由于通过 find_scaled_shape_model 可以以亚像素分辨率确定角度,因此对于直径小于200像素的模型,可以选择 AngleStep ≥ 1°ScaleStep ≥ 0.02

如果选择 AngleStep = ‘auto’ScaleStep = ‘auto’ (或两种情况都为0以实现向后兼容), create_scaled_shape_model 会自动根据模型的大小确定合适的角度或缩放步长。自动计算的角度和缩放步长可以使用 get_shape_model_params 查询。

如果不选中完全预生成模型,则该模型仅在每个金字塔级别上以参考姿势创建。在这种情况下, find_scaled_shape_model 中必须在运行时将模型转换为不同的角度和比例。因此,模型的识别可能需要更长的时间。

请注意,预生成的形状模型是针对特定图像大小量身定制的。由于运行时的原因,在使用同一模型并行搜索不同大小的图像时不支持。该情况下,必须使用相同模型的副本,否则程序可能崩溃。

2.4 执行信息

  • 多线程类型:reentrant,可重入的(可与非独占算子并行运行)
  • 多线程范围:global,全局的(可被任意线程调用)
  • 不使用并行化处理

该算子会返回一个句柄。注意,这种句柄类型的实例的状态可能被特定算子更改,即使句柄用作这些算子的输入参数。

2.5 参数

Template(input_object)
输入图像,其定义域被用来创建模型。
NumLevels(input_control)
金字塔级别的最大数量。
默认值:‘auto’
可能的值:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘auto’
AngleStart(input_control)
图案/模板的最小旋转角度
默认值:-0.39
建议值:-3.14, -1.57, -0.79, -0.39, -0.20, 0.0
AngleExtent(input_control)
旋转角度的范围
默认值:0.79
建议值:6.29, 3.14, 1.57, 0.79, 0.39
限制: AngleExtent >= 0
AngleStep(input_control)
角度的步长(分辨率/精度)
默认值:‘auto’
建议值: ‘auto’, 0.0175, 0.0349, 0.0524, 0.0698, 0.0873
限制: AngleStep >= 0 && AngleStep <= pi / 16
ScaleMin(input_control)
图案/模板的最小比例
默认值:0.9
建议值:0.5, 0.6, 0.7, 0.8, 0.9, 1.0
限制: ScaleMin > 0
ScaleMax(input_control)
图案/模板的最大比例
默认值:1.1
建议值:1.0, 1.1, 1.2, 1.3, 1.4, 1.5
限制: ScaleMax >= ScaleMin
ScaleStep(input_control)
缩放/比例步长(分辨率/精度)
默认值:‘auto’
建议值:‘auto’, 0.01, 0.02, 0.05, 0.1, 0.15, 0.2
限制: ScaleStep >= 0
Optimization(input_control)
优化项的类型和生成模型可选的方法
默认值:‘auto’
可能的值: ‘auto’, ‘no_pregeneration’, ‘none’, ‘point_reduction_high’, ‘point_reduction_low’, ‘point_reduction_medium’, ‘pregeneration’
Metric(input_control)
匹配的标准/条件
默认值:‘use_polarity’
可能值: ‘ignore_color_polarity’, ‘ignore_global_polarity’, ‘ignore_local_polarity’, ‘use_polarity’
Contrast(input_control)
模板图像中对象对比度的阈值或滞后阈值以及对象部分的可选最小尺寸。
默认值:‘auto’
建议值:‘auto’, ‘auto_contrast’, ‘auto_contrast_hyst’, ‘auto_min_size’, 10, 20, 30, 40, 60, 80, 100, 120, 140, 160
MinContrast(input_control)
搜索图像中对象的最小对比度。
默认值:‘auto’
建议值:‘auto’, 1, 2, 3, 5, 7, 10, 20, 30, 40
限制: MinContrast < Contrast

ModelID(output_control)
模型的句柄。

2.6 执行结果

若参数均有效, create_scaled_shape_model 返回值为2(H_MSG_TRUE)。如有必要,将引发异常。如果选择的参数 NumLevelsContrast 使得模型包含的点太少,则会引发错误 8510。

2.7 可能的前驱算子

draw_region, reduce_domain, threshold

2.8 可能的后继算子

find_scaled_shape_model, find_scaled_shape_models, get_shape_model_params, clear_shape_model, write_shape_model, set_shape_model_origin

2.9 替代选择

create_shape_model, create_aniso_shape_model

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值