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

一、代码的主要思路为:

这个例程展示了如何使用形状模型(Generic Shape Model)在含有高噪声的图像中进行对象检测。代码分为几个主要部分,包括模型的创建、训练、参数设置、搜索参数配置以及在线搜索过程。以下是详细的步骤和功能解释:

初始化与环境设置

  • 关闭并重新初始化设备(窗口)。
  • 读取一个示例图像crosses_01用于后续展示和说明。
  • 设置显示窗口的字体、颜色和线宽,为可视化做准备。
  • 显示图像描述信息和样本图像,暂停程序让用户查看。

创建形状模型(离线步骤)

  • 使用create_generic_shape_model创建一个形状模型对象。

定义模型模板(离线步骤)

  • 读取一个定义好的模型轮廓(ModelContour),这是模型匹配的基础。

设置模型参数(离线步骤)

  • 调整尺度不变性参数(最小和最大比例),以适应不同大小的对象。

训练形状模型(离线步骤)

  • 使用train_generic_shape_model根据提供的轮廓训练模型。

设置匹配度量(离线步骤)

  • 创建一个极性图像(PolarityImage)以辅助匹配,通过填充区域并根据轮廓反转部分区域的像素值。
  • 根据匹配结果计算单应性矩阵,并设置模型匹配度量,使用极性图像增强匹配效果。

估计最低金字塔级别(离线步骤)

  • 针对高噪声情况,使用一个样本搜索图像来自动估计搜索时应使用的最低金字塔级别,这有助于在噪声较大的情况下仍能有效匹配。

设置搜索参数(在线/离线均可)

  • 限制旋转角度范围、设置最大匹配数、允许的最大重叠以及贪婪度等,以优化搜索性能和结果质量。贪婪度设置为0意味着尽可能全面的搜索,不急于收敛。

在图像中查找模型(在线步骤)

  • 循环读取一系列测试图像(crosses_02crosses_11),在每张图像中使用训练好的模型进行匹配。
  • 对于每次匹配,获取所有匹配结果的轮廓,并在原图像上显示这些轮廓,同时提供匹配结果的文本说明。
  • 每处理完一张图片后,暂停一段时间以便观察。

清理与结束

  • 清空显示窗口,显示结束信息,重新开启设备更新,完成程序。

 二、具体代码注释如下

* 
* ***********************************************************
* This example shows how to use the 'high_noise_sample'     *
* parameter from the set_generic_shape_model_object         *
* operator to improve the matching rate for images          *
* containing very high noise. The operator estimates the    *
* lowest pyramid level automatically based on a provided    *
* sample search image. 
*查找图像中一个或多个形状模型的最佳匹配此示例演示如何使用“high_noise_sample”    
*参数 from the set_generic_shape_model_object        
*运算符,以提高图像的匹配率         
*包含非常高的噪音。运算符估计   
*最低金字塔级别自动基于提供的   
*示例搜索图像。                                     *
* ***********************************************************
* 
* Initialization.
dev_update_off ()
dev_close_window ()
* 
* Initialization of the display window using automatic size.
read_image (Image, 'crosses/crosses_01')
*打开一个新的图形窗口,以保留给定图像的纵横比。
dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)
*设置窗口的字体大小为14,格式为'mono',加粗,不倾斜
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*设置输出颜色
dev_set_color ('lime green')
*设置轮廓边缘的宽度
dev_set_line_width (3)
* 
* Visualization.
*显示描述文本
dev_display_description_text (WindowHandle)
stop ()
*显示例程图片
dev_display_sample_image (Image, WindowHandle)
stop ()
* 
* ***********************************************************
* Create the shape model (offline step)                     *
*创建形状模型(离线步骤)
* ***********************************************************
* 创建未被训练模型的句柄
create_generic_shape_model (ModelID)
* 
* ***********************************************************
* Define the model template (offline step)                  *
*定义模型模板
* ***********************************************************
* 
* The quality of the model contour is crucial.
*模型轮廓的质量至关重要
*从model_contour中读取ModelContour(模型轮廓)标志性对象
read_object (ModelContour, 'model_contour')
*
### Halcon `create_scaled_shape_model` 算子详解 #### 创建缩放形状模型概述 在Halton软件中,`create_scaled_shape_model`算子用于创建一个可以处理尺度变化的形状模型。此功能对于目标识别特别有用,在不同比例下都能找到匹配的对象[^2]。 #### 函数原型及参数说明 该函数定义如下: ```cpp create_scaled_shape_model(Image : : MinContrast, AngleStart, AngleExtent, ScaleMin, ScaleMax, Optimization, Metric, MinScore, BrightnessThreshold, IgnoreLocalPolarity, NumLevels, PyramidSubsamplingMethod : ModelID) ``` - **Image**: 输入图像。 - **MinContrast**: 对象边缘最小对比度。 - **AngleStart/AngleExtent**: 定义旋转范围的角度起点和跨度。 - **ScaleMin/ScaleMax**: 缩放因子的上下限。 - **Optimization/Metric**: 影响计算速度与精度的选择项。 - **MinScore/BrightnessThreshold/IgnoreLocalPolarity**: 控制匹配质量和其他特性检测条件。 - **NumLevels/PyrmaidSubSamplingMethod**: 处理多分辨率金字塔层数及其采样方式。 - **ModelID**: 输出的结果模型标识符。 #### 实际操作流程展示 下面给出一段完整的Python代码片段来演示如何调用这个算子并执行基本的任务: ```python import halcon as hl # 加载测试图片 image = hl.read_image('example') # 设置参数值 min_contrast = 5 angle_start = -hl.pi / 4 angle_extent = hl.pi / 2 scale_min = 0.8 scale_max = 1.2 optimization = 'auto' metric = 'use_polarity' min_score = 0.7 brightness_threshold = 128 ignore_local_polarity = 'true' num_levels = 'default' pyramid_subsampling_method = 'downsample' # 调用create_scaled_shape_model创建模型 model_id = hl.create_scaled_shape_model( image, min_contrast, angle_start, angle_extent, scale_min, scale_max, optimization, metric, min_score, brightness_threshold, ignore_local_polarity, num_levels, pyramid_subsampling_method) print(f'Created model with ID {model_id}') ``` 这段脚本展示了如何加载一幅图像,并利用指定的一系列参数配置去构建一个新的形状模型实例[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值