Halcon例程学习,基于形状的模板匹配align_measurements学习

一、代码主要思路为

  1. 初始化和模型创建

    • 首先,通过读取一个示例图像razors1,选择一个包含剃须刀片的区域作为模板,并计算该区域的质心。这一步是为后续的形状模型创建准备模板对象。
    • 使用选定的区域,通过create_generic_shape_model创建一个通用形状模型(Generic Shape Model)。接着,设置模型的一些参数,如金字塔层数(num_levels)、优化方法(optimization)、对比度阈值(contrast_high)等,并使用train_generic_shape_model对模型进行训练。这样,模型就学会了剃须刀片的典型特征。
  2. 测量区域定义

    • 定义了两个矩形区域(MeasureROI1MeasureROI2),这些区域对应于剃须刀片上需要测量的部分,例如刀刃间的距离或宽度。这些测量区域会在找到的每个刀片上应用,以检查其尺寸是否符合标准。
  3. 形状匹配和测量

    • 读取另一张待检测的图像razors2,并在其中查找与模型匹配的对象。通过find_generic_shape_model执行形状匹配,寻找图像中与模型相似的剃须刀片。
    • 对于每个找到的匹配项,代码计算一个仿射变换矩阵,将模型轮廓和测量区域映射到匹配对象的位置。这里提供了两种方式来获取变换矩阵,并展示了如何通过变换后的测量区域来测量剃须刀片的特性,比如刀片间的距离。
    • 使用measure_pairs函数对每把刀片上的测量区域进行边缘检测,进而计算出刀片间“牙齿”的数量和间距,以此来判断刀片的质量是否合格。如果发现间距异常(超过4.0单位),则标记该位置为缺陷,并在图像上显示红色矩形提示。
  4. 结果展示和交互

    • 在匹配和测量过程中,使用了多个stop命令,这通常是在Halcon的交互式开发环境(HDevelop)中用于暂停程序执行,以便用户可以查看当前处理结果并进行交互。
    • 最后,程序输出一条结束信息,并通过dev_update_on重新启用窗口更新,允许用户查看最终的处理结果。

通过形状匹配技术自动定位图像中的剃须刀片,然后通过预定义的测量区域对刀片的关键尺寸进行精确测量,从而实现对产品质量的自动检测和缺陷识别。

二、具体代码注释如下

* ------------------------------------------------------------------------------------------------
* This example program uses shape-based matching to align ROIs for the measure
* tool, which then inspects individual razor blades.
* The program can be run in two modes:
*   (1) with the full affine transformation
*   (2) using translate_measure
* Modify the next line to switch between the modes.
*本示例程序使用基于形状的匹配来对齐测量工具的ROI,以检查个别剃刀片。
* 该程序可以在两种模式下运行:
*   (1) 使用完整的仿射变换
*   (2) 使用translate_measure
* 修改下一行以在模式之间切换
USING_TRANSLATE_MEASURE := 0
* ------------------------------------------------------------------------------------------------
* General configuration of HDevelop.
* HDevelop的通用配置
dev_update_off ()
read_image (ModelImage, 'razors1')
* 获取图像指针及其参数
get_image_pointer1 (ModelImage, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
dev_display (ModelImage)
dev_set_color ('cyan')
dev_set_draw ('margin')
dev_set_line_width (2)
stop ()
* -------------------  Start of the application  ----------------
* Select the model object.
* 选择模型对象
Row1 := 46
Column1 := 57
Row2 := 79
Column2 := 94
* 创建两个矩形ROI区域
gen_rectangle1 (ROIPart1, Row1, Column1, Row2, Column2)
gen_rectangle1 (ROIPart2, Row1 + 364, Column1 + 13, Row2 + 364, Column2 + 13)
* 将两个region合并为一个region
union2 (ROIPart1, ROIPart2, ModelROI)
area_center (ModelROI, Area, CenterROIRow, CenterROIColumn)
dev_display (ModelImage)
dev_display (ModelROI)
stop ()
* 
* Create the model.
* 创建模型
* 将图像减少到ROI区域
reduce_domain (ModelImage, ModelROI, ImageROI)
create_generic_shape_model (ModelID)
* 设置模型参数金字塔层数为4,优化方法为none,对比度阈值为30
set_generic_shape_model_param (ModelID, 'num_levels', 4)
set_generic_shape_model_param (ModelID, 'optimization', 'none')
set_generic_shape_model_param (ModelID, 'contrast_high', 30)
* 基于提供的ImageROI,训练出一个能够识别具有相似形状特征的对象的模型
train_generic_shape_model (ImageROI, ModelID)
* 要从模型中获取轮廓信息存储在ModelContours中
get_generic_s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值