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 1read_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)endforelse* 未检测到目标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.mzph.cn/web/63735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java——多线程进阶知识

目录 一、常见的锁策略 乐观锁VS悲观锁 读写锁 重量级锁VS轻量级锁 总结: 自旋锁(Spin Lock) 公平锁VS非公平锁 可重入锁VS不可重入锁 二、CAS 何为CAS CAS有哪些应用 1)实现原子类 2)实现自旋锁 CAS的ABA…

达梦 本地编码:PG_GBK, 导入文件编码:PG_UTF8错误

问题 达梦 本地编码:PG_GBK, 导入文件编码:PG_UTF8错误 解决 右键管理服务器 查看配置 新建一个数据库实例,配置跟之前的保持一致 新建一个用户,跟以前的用户名一样 在用户上,右键导入,选择dmp的位置 导…

深度学习卷积神经网络CNN之MobileNet模型网络模型详解说明(超详细理论篇)

1.MobileNet背景 2.MobileNet V1论文 3. MobileNett改进史 4. MobileNet模型结构 5. 特点(超详细创新、优缺点及新知识点) 一、MobileNet背景 随着移动设备的普及,深度学习模型的应用场景逐渐扩展至移动端和嵌入式设备。然而,传统…

垂起固定翼无人机大面积森林草原巡检技术详解

垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段,以下是对该技术的详细解析: 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点,具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…

kubernates实战

使用k8s来部署tomcat 1、创建一个部署,并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…

数据挖掘之认识数据

在数据挖掘过程中,数据的认识是非常重要的一步,它为后续的数据分析、建模、特征选择等工作奠定基础。以鸢尾花数据集(Iris Dataset)数据集之鸢尾花数据集(Iris Dataset)-CSDN博客为例,下面将介绍…

统信UOS 1071 AI客户端接入本地大模型配置手册

文章来源:统信UOS 1071本地大模型配置手册 | 统信软件-知识分享平台 1. OS版本确认 1.1. 版本查看 要求:计算机,属性,查看版本(1070,构建号> 101.100) 2. UOS AI版本确认 UOS AI,设置&am…

定时任务——定时任务技术选型

摘要 本文深入探讨了定时任务调度系统的核心问题、技术选型,并对Quartz、Elastic-Job、XXL-Job、Spring Task/ScheduledExecutor、Apache Airflow和Kubernetes CronJob等开源定时任务框架进行了比较分析,包括它们的特点、适用场景和技术栈。文章还讨论了…

麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好,但是缺乏实时性,在实际应用中,咱们可以将rsync写进脚本,然后写进定时任务去备份,如果每天凌晨1:00…

wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新

背景: 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。 材料: wtformsflask_sqlalchemy 制作: 上代码 1、模型代码 from .exts import db from …

【AIGC-ChatGPT进阶副业提示词】末日生存指南 2.0:疯狂科学家的荒诞智慧

引言 在这个不断变化的世界中,末日似乎总是lurking在角落。但是,亲爱的幸存者们,不要害怕!因为我,疯狂科学家2099,正在这里为你们带来最新版本的末日生存指南。这不是你祖母的应急手册,而是一本…

BiLSTM:深度学习中的双向长短期记忆网络

目录 ​编辑 1. BiLSTM原理 2. BiLSTM的应用案例 3. BiLSTM研究进展 4. BiLSTM技术挑战 5. BiLSTM未来趋势 6. BiLSTM的实际应用示例 6.1 数据准备 6.2 构建BiLSTM模型 6.3 训练模型 6.4 评估模型 6.5 可视化训练过程 7. 结论 在深度学习的浪潮中,BiLS…

RK3588 , mpp硬编码yuv, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件.

powershell美化

powershell美化 写在前面 除了安装命令,其他都是测试命令,后续再写进配置文件 安装主题控件 安装主题oh-my-posh,powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…

2024/12/22周报

文章目录 摘要Abstract深度学习文献阅读1. 背景与问题2. 发明目的3. 方法与实现3.1 数据采集与变量选取3.2 BP神经网络建立稳态预测模型3.3 构建多目标优化函数3.4 多目标差分进化算法求解优化3.5 最优决策变量筛选3.6 实时控制 4. 系统实现5. 实际效果与验证5.1 仿真验证5.2 神…

前端编程训练 异步编程篇 请求接口 vue与react中的异步

文章目录 前言代码执行顺序的几个关键点接口请求vue与react中的异步 vue中的异步react的state修改异步 前言 本文是B站三十的前端课的笔记前端编程训练,异步编程篇 代码执行顺序的几个关键点 我们可以理解为代码就是一行一行,一句一句是执行(定义变…

C++-----函数与库

数学中的函数与编程中的函数对比 数学中的函数 - 数学函数是一种映射关系,例如,函数\(y f(x)x^{2}\),对于每一个输入值\(x\),都有唯一确定的输出值\(y\)。它侧重于描述变量之间的数量关系,通常通过公式来表示这种关系…

Loki 微服务模式组件介绍

目录 一、简介 二、架构图 三、组件介绍 Distributor(分发器) Ingester(存储器) Querier(查询器) Query Frontend(查询前端) Index Gateway(索引网关&#xff09…

C++ OpenGL学习笔记(1、Hello World空窗口程序)

终于抽出时间系统学习OpenGL 教程,同时也一步一步记录怎样利用openGL进行加速计算。 目录 1、环境准备1.1、库的下载1.2、库的选择及安装 2、OpenGL第一个项目,Hello World!2.1、新建hello world控制台项目2.2、配置openGL环境2.2.1 包含目录配置2.2.2 …

Linux系统命令基础

Linux命令⾏ [pypylinux ~]$ 普通⽤户py,登陆后 [rootpylinux ~]# 超级⽤户root,登录后root代表当前登录的⽤户 分隔符pylinux 主机名~ 当前的登录的位置,此时是家⽬录# 超级⽤户身份提示符 $ 普通⽤户身份提示符操作系统⽬录分隔符 Linux目录…