当前位置: 首页 > article >正文

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解

项目目标

本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。


实现思路

安全环检测分为以下核心步骤:

  1. 模型图像加载与处理: 读取包含安全环的模型图像,并定义感兴趣区域 (ROI),以减少背景干扰。
  2. 形状模型创建: 基于感兴趣区域提取特征,训练通用形状模型(Generic Shape Model)。
  3. 目标匹配检测: 在待检测图像中搜索安全环,输出位置、方向和检测结果。
  4. 结果可视化: 通过绘制轮廓和方向箭头,直观展示安全环的位置和方向信息。

代码讲解

以下是完整代码的逐步解析,重点放在每个步骤的核心功能和逻辑。


1. 初始化

* 关闭窗口更新以优化性能
dev_update_window ('off')

* 加载模型图像
read_image (ModelImage, 'image/rings_01')

* 获取图像尺寸
get_image_size (ModelImage, 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_update_window ('off')) 以提高运行性能。
    • 读取模型图像并获取图像尺寸,为后续显示做准备。
    • 打开一个适配图像尺寸的显示窗口。

2. 定义感兴趣区域 (ROI)

* 设置安全环的ROI
Row := 251
Column := 196
Radius := 103

* 创建圆形区域作为ROI
gen_circle (ModelROI, Row, Column, Radius)

* 显示ROI
dev_display (ModelROI)
  • 核心功能:
    • 使用 gen_circle 函数定义圆形区域,圈定包含安全环的区域。
    • 通过 ROI 减少背景干扰,确保模型训练的准确性。

3. 检查并创建形状模型

检查模型区域
* 裁剪图像,仅保留ROI部分
reduce_domain (ModelImage, ModelROI, ImageROI)

* 检查ROI的形状特征
inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)

* 显示检查结果
dev_clear_window ()
dev_display (ShapeModelRegion)
  • 核心功能:
    • 使用 reduce_domain 裁剪图像,只保留 ROI。
    • 调用 inspect_shape_model 检查模型区域的形状特征,确保模型质量。
创建形状模型

在这里插入图片描述

* 创建并训练通用形状模型
create_generic_shape_model (ModelID)
set_generic_shape_model_param (ModelID, 'metric', 'ignore_global_polarity')
train_generic_shape_model (ImageROI, ModelID)

* 提取模型轮廓
get_generic_shape_model_object (ShapeModel, ModelID, 'contours')

在这里插入图片描述

  • 核心功能:
    • 调用 create_generic_shape_model 创建模型,随后通过 train_generic_shape_model 基于 ROI 图像训练模型。
    • 设置模型参数 ignore_global_polarity,忽略极性变化,增强鲁棒性。

4. 目标匹配与检测

* 设置形状匹配参数
set_generic_shape_model_param (ModelID, 'max_overlap', 0.55)
set_generic_shape_model_param (ModelID, 'min_score', 0.4)

* 遍历待检测图像
for i := 1 to 7 by 1
    read_image (SearchImage, 'image/rings_' + (i + 1)$'02')
    dev_display (SearchImage)

    * 进行形状匹配
    find_generic_shape_model (SearchImage, ModelID, MatchResultID, NumMatchResult)

    * 如果检测到物体
    if (NumMatchResult > 0)
        set_tposition (WindowHandle, 20, 24)
        write_string (WindowHandle, '检测到目标数量:'+NumMatchResult)

        * 遍历所有检测结果
        for j := 0 to NumMatchResult - 1 by 1
            * 获取目标轮廓
            get_generic_shape_model_result_object (Objects, MatchResultID, j, 'contours')
            dev_set_color ('cyan')
            dev_display (Objects)

            * 获取位置和方向信息
            get_generic_shape_model_result (MatchResultID, j, 'row', Row)
            get_generic_shape_model_result (MatchResultID, j, 'column', Column)
            get_generic_shape_model_result (MatchResultID, j, 'hom_mat_2d', HomMat2D)

            * 计算方向箭头终点
            affine_trans_pixel (HomMat2D, -120, 0, RowArrowHead, ColumnArrowHead)
            dev_set_color ('blue')
            disp_arrow (WindowHandle, Row, Column, RowArrowHead, ColumnArrowHead, 2)
        endfor
    else
        * 未检测到目标
        set_tposition (WindowHandle, 20, 20)
        write_string (WindowHandle, '未检测到物体!')
    endif
endfor
  • 核心功能:
    1. 目标匹配:
      • 使用 find_generic_shape_model 在每张图像中搜索目标。
      • 匹配结果包括目标数量、位置(行、列坐标)和方向(仿射矩阵)。
    2. 显示检测结果:
      • 高亮显示目标轮廓,并绘制箭头标注方向。
      • 若检测不到目标,则显示“未检测到物体”的提示。
        -在这里插入图片描述
        在这里插入图片描述

在这里插入图片描述


5. 清理资源与结束程序

* 恢复窗口更新
dev_update_window ('on')

* 清理形状模型
clear_shape_model (ModelID)
  • 核心功能:
    • 恢复窗口更新。
    • 释放形状模型资源,避免内存占用。

项目核心思路总结

  1. 模型训练:
    使用感兴趣区域提取安全环的形状特征,生成通用形状模型。

  2. 多图像匹配:
    遍历多张待检测图像,利用形状模型进行目标匹配,输出目标位置和方向信息。

  3. 结果可视化:
    通过高亮轮廓和绘制箭头,直观展示安全环的位置与方向。


适用场景

该项目适用于以下应用场景:

  • 工业生产中的零件检测: 如汽车轮毂、机械零件中的环状目标检测。
  • 视觉质量控制: 检测物体位置和方向是否符合预期。

代码与资源

通过网盘分享的文件:安全环
链接: https://pan.baidu.com/s/1gAHHtwL53Sow00jUHD_Z2g?pwd=jkcf 提取码: jkcf

http://www.kler.cn/a/453211.html

相关文章:

  • JS 异步 ( 一、异步概念、Web worker 基本使用 )
  • Jmeter下载安装配置教程(多版本)
  • centos制作离线安装包
  • mongodb和Cassandra
  • 基于谱聚类的多模态多目标浣熊优化算法(MMOCOA-SC)求解ZDT1-ZDT4,ZDT6和工程应用--盘式制动器优化,MATLAB代码
  • 使用Docker部署一个Node.js项目
  • windows nmake 安装openssl
  • Java 中压缩图片并应用 EXIF 旋转信息
  • .NET能做什么?全面解析.NET的应用领域
  • MPLS小实验:利用LDP动态建立LSP
  • c# 线程 AutoResetEvent 的Set()函数多次调用
  • JavaWeb 开发基础入门
  • VIVO C++开发面试题及参考答案
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>电话号码的字母组合
  • 一文大白话讲清楚javascript单点登录
  • Vue.js 高级组件开发:设计模式与实践
  • Huggingface下载模型的几种方式
  • 文件解析漏洞中间件(iis和Apache)
  • 01-linux基础命令
  • Android 13 非 Launcher 应用开机启动:通过监听开机广播实现
  • linux下搭建lamp环境(dvwa)
  • Qt 应用程序转换为服务
  • MySQL基础-事务
  • 代码随想录算法【Day2】
  • Docker Run使用方法及参数详细说明
  • 【mysql】id主键列乱了之后,重新排序(可根据日期顺序)