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

Halcon指定区域的形状匹配

Halcon指定区域的形状匹配

文章目录

  • Halcon指定区域的形状匹配
    • 1.在参考图像中选择目标
    • 2.创建模板
    • 3.搜索目标

在这个实例中,会介绍如何根据选定的ROI选择合适的图像金字塔参数,创建包含这个区域的形状模板,并进行精确的基于形状模板的匹配。最后,将匹配到的形状区域在测试图像上标示出来。

1.在参考图像中选择目标

采集图像之后,接下来要做的是确定ROI的范围,创建一个包含目标的ROI。在本例中,首先使用read_image 算子获取参考图像,接着为了获取ROI,使用gen_rectangel1算子生成一个包含目标的矩形框。也可以使用其他类似的工具,如使用draw_rectangle1算子、draw_circlel算子创建一个包含目标物体的形状;或者利用形态学算法筛选出一个ROI。接着,使用reduce_domain 算子对选定的区域进行裁剪,创建模板图像。

2.创建模板

使用create_shape_model算子创建一个模板。在这之前,推荐使用inspect_shape_model算子,它可以帮助选择合适的模板参数,主要是金字塔层级和对比度。具体做法是,预设inspect_shape_model 算子的最后两个参数,其中NumLevels 表示金字塔的层级,Contrast表示点的最小对比度。该算子执行后会把预设了这两种参数的分级图像显示出来,可以根据需要判断参数设置得是否合理。例如,金字塔层级的最小图像如果不清晰,可以考虑降低层级数;如果对比度设置的值不足以提取出整个形状的轮廓,可以试着进行调整,以确定合适的参数。
在确定了金字塔层级和最小对比度之后,就可以创建模板了。创建模板时,除了上面两个参数外,还可以根据需要定义模板的其他参数。例如,可以通过AngleStart和AngleExtent 约束允许旋转的角度,通过 AngleStep约束角度变化的步长。这几个角度参数需要根据形状在图中可能发生的旋转角度进行设置。如果模板图像特别大,可以用Optimization对模型进行优化,减少点的数量。参数Metric 用来指定是否考虑极性的变化,如光照的影响。最后,还可以指定最小对比度参数MinContrast,用于将模板与图像噪声区分开来。
创建完成以后,create shape model算子会返回一个句柄,名称是ModelID,用来指定模板的名称。本例中还使用了get_shape_model_contours算子,用于观察提取出的形状轮廓。

3.搜索目标

创建好模板之后,接下来就是匹配计算。首先读取待检测的图像,然后使用find_shape_model算子搜索最佳匹配的区域,拽索到的区域的匹配分值会存入score参数中。如果各种参数都设定得很合适,应该会找到至少一个大于置信值的区域。
最后为了显示结果,可以在画面上依据计算结果绘图。这里绘制的是形状的轮廓,并根据图像的二维投影变换,将形状轮廓也进行了仿射变换,这样就能很清楚地看到结果。
如果这个模板不再使用,需用clear_shape_model算子将其清除,这样就可以将它所占用的内存释放了。该程序的运行结果如图所示。
在这里插入图片描述
图(a)为原始图像,用矩形框选择了箭头区域图像作为ROI,并根据其创建模板;图(b)为依据模板图像创建的图像金字塔;图(c)为测试图像,相比于原图,测试图像发生了小范围的缩放和旋转,并且有比较大的光照变化。拽索到最佳匹配形状后,在图上将其轮廓标示了出来。该程序的完整代码如下:

* 这个例子用来介绍 HALCON中的形状模板匹配
dev_close_window()
*读取图像并获取其宽高
read_image(ModelImage, 'data/arrow1')
median_image (ModelImage, ImageMedian, 'circle', 6, 'mirrored')
get_image_size(ModelImage, Width,Height)
dev_open_window (0, 0, Width/2, Height/2, 'white', WindowHandle)
*显示模板图像
dev_display (ModelImage)
* 设置画笔颜色和线条
dev_set_color ('yellow')
dev_set_line_width (3)
* -------------------  形状模板匹配程序  ----------------
*第1步:选择模板中的目标
Row1 := 281
Column1 := 160
Row2 := 440
Column2 := 312
*用矩形框选定一个目标区域
gen_rectangle1 (ROI, Row1, Column1, Row2, Column2)
*显示ROI区域
dev_display (ROI)*剪裁出这个区域
reduce_domain (ModelImage, ROI, ImageROI)
*第2步,创建模板*检查模板参数
inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 4, 50)*显示金字塔各层级的图像,以检查层数的合理性
dev_display (ShapeModelRegions)
area_center (ShapeModelRegions, AreaModelRegions, RowModelRegions,ColumnModelRegions)
count_obj (ShapeModelRegions, HeightPyramid)*确定金字塔的层级
for i := 1 to HeightPyramid by 1
if (AreaModelRegions[i - 1] >= 15)NumLevels := iendif
endfor*使用ROI图像创建模板
create_shape_model (ImageROI, NumLevels, 0, rad(360), 'auto', 'none', 'ignore_global_polarity', 50, 10, ModelID)
*获取轮廓信息,用于结果显示
get_shape_model_contours (ShapeModel, ModelID, 1)
* step 3: 在检测图像中搜索模板
*读取检测图像
read_image(SearchImage, 'data/arrow2')
*寻找最佳模板匹配
find_shape_model (SearchImage, ModelID, 0, rad(360), 0.3, 1, 0.5, 'least_squares', 0, 0.7,	RowCheck, ColumnCheck, AngleCheck, Score)
*如果找到了目标,则将它标示出来
if (|Score| > 0.9)*计算刚性变换矩阵vector_angle_to_rigid (0, 0, 0, RowCheck, ColumnCheck, AngleCheck,	MovementOfObject)*应用二维仿射变换XLD轮廓,以便在图像中显示检测到的轮廓affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)*显示检测图像gen_rectangle2 (recResult, RowCheck, ColumnCheck, AngleCheck, 80, 80)dev_set_draw ('margin')dev_display (SearchImage)*标示出检测到的模板dev_display (ModelAtNewPosition)dev_set_color ('blue')dev_display (recResult)
endif
* -------------------  程序结束  -----------------
* 清除模板
clear_shape_model (ModelID)

相关文章:

Halcon指定区域的形状匹配

Halcon指定区域的形状匹配 文章目录 Halcon指定区域的形状匹配1.在参考图像中选择目标2.创建模板3.搜索目标 在这个实例中,会介绍如何根据选定的ROI选择合适的图像金字塔参数,创建包含这个区域的形状模板,并进行精确的基于形状模板的匹配。最…...

Linux——常用命令

1、命令的基本格式 对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。其实,服务器是一个连显示器都没有的家伙,要图形界面干什么&#xff…...

外包干了2个月,技术反而退步了...

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

洛谷C++简单题练习day6—P1830 城市轰炸

day6--P1830 城市轰炸--1.26 习题概述 题目背景 一个大小为 nm 的城市遭到了 x 次轰炸,每次都炸了一个每条边都与边界平行的矩形。 题目描述 在轰炸后,有 y 个关键点,指挥官想知道,它们有没有受到过轰炸,如果有&a…...

【linux-interconnect】What NVIDIA MLNX_OFED is?

NVIDIA MLNX_OFED Documentation v23.07 - NVIDIA Docs 文章目录 What NVIDIA MLNX_OFED is?Overview[Software Download](https://docs.nvidia.com/networking/display/mlnxofedv23070512#src-2396583107_NVIDIAMLNX_OFEDDocumentationv23.07-SoftwareDownload) Wh…...

Unity开发中的XML注释

在Unity开发中&#xff0c;XML注释主要用于C#脚本的注释&#xff0c;以帮助生成代码文档和提供IntelliSense功能。以下是一些关于如何使用XML注释的技巧&#xff1a; 创建注释&#xff1a; 在C#中&#xff0c;XML注释是由///或/**...*/开始的。例如 /// <summary> /// 这…...

[MQ]常用的mq产品图形管理web界面或客户端

一、MQ介绍 1.1 定义 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。 如果非要用一个定义来概括只能是抽象出来一些概念&#xff0c;概括为跨服务之间传递信息的软件。 1.2 MQ产品 较为成熟的MQ产品&#xff1a;IBMMQ&#xff08;IBM We…...

JWT令牌(JSON Web Token)

目录 1 前言 2 JWT令牌的组成 3 使用步骤举例 3.1 pom.xml中引入依赖 3.2 JWT生成 3.3 JWT验证 4 实践中的使用举例 4.1 拦截非法访问 4.1.1 编写为工具类 4.1.2 下发给用户 4.1.3 编写拦截器 4.1.4 注册拦截器 4.2 获取相关数据提升效率 1 前言 在我们编写的后端…...

华硕ASUS K43SD笔记本安装win7X64(ventoy为入口以支撑一盘多系统);友善之臂mini2440开发板学习

记录 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 K43SD 安装 win7X64 ) 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 (常规安装) 设置: 禁用UEFI 启用AHCI ventoy制作MBR(非UEFI)方式的启动U盘 U盘中放cn_windows_7_ultimate_wit…...

npm设置源(原淘宝源域名已过期)

今天打包机器报错&#xff0c; Couldnt find package "antd-mobile2.3.4" required by "neo-ui-mf-base1.0.41" on the "npm" registry. 找不到antd mobile的包&#xff0c;查看源发现淘宝域名npm.taobao.org 和 registry.npm.taobao.org 域名…...

操作系统-进程通信(共享存储 消息传递 管道通信 读写管道的条件)

文章目录 什么是进程通信为什么进程通信需要操作系统支持共享存储消息传递直接通信方式间接通信方式 管道通信小结注意 什么是进程通信 分享吃瓜文涉及到了进程通信 进程通信需要操作系统支持 为什么进程通信需要操作系统支持 进程不能访问非本进程的空间 当进程P和Q需要…...

NODE笔记 2 使用node操作飞书多维表格

前面简单介绍了node与简单的应用&#xff0c;本文通过结合飞书官方文档 使用node对飞书多维表格进行简单的操作&#xff08;获取token 查询多维表格recordid&#xff0c;删除多行数据&#xff0c;新增数据&#xff09; 文章目录 前言 前两篇文章对node做了简单的介绍&#xff…...

Scikit-Learn 高级教程——自定义评估器

Python Scikit-Learn 高级教程&#xff1a;自定义评估器 Scikit-Learn 提供了许多内置的评估器&#xff08;Estimator&#xff09;来进行机器学习任务&#xff0c;但在某些情况下&#xff0c;我们可能需要自定义评估器以满足特定需求。本篇博客将深入介绍如何在 Scikit-Learn …...

6 时间序列(不同位置的装置如何建模): GRU+Embedding

很多算法比赛经常会遇到不同的物体产生同含义的时间序列信息&#xff0c;比如不同位置的时间序列信息&#xff0c;风力发电、充电桩用电。经常会遇到该如此场景&#xff0c;对所有数据做统一处理喂给模型&#xff0c;模型很难学到区分信息&#xff0c;因此设计如果对不同位置的…...

Git 基本概念

Git是一种版本控制系统&#xff0c;用于跟踪文件的更改并协同开发代码。它具有以下基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git将文件存储在仓库中&#xff0c;它是保存项目历史记录和更改的地方。一个项目通常有一个主要的仓库。 …...

android:excludeFromRecents

android:excludeFromRecents 基础从根上影响 TaskexcludeFromRecents 属性可能会影响系统 基础 android:excludeFromRecents是一种在Android应用程序清单文件&#xff08;AndroidManifest.xml&#xff09;中使用的属性&#xff0c;用于指定一个Activity是否应该在最近任务列表…...

微信小程序登录获取手机号教程(超详细)

1. 背景介绍&#xff1a; 在我们开发微信小程序时&#xff0c;登录时&#xff0c;需要获取用户手机号作为唯一标识&#xff0c;下面我介绍一下获取手机号的教程。 本篇文章介绍后端获取方法&#xff1a; 前端工作 后端工作 前端 新建Page页面&#xff0c;在xxx.wxml中加入…...

uniapp app更新

uniapp app更新 这个版本要随之增加&#xff0c;不然刚更新时直接用app, 新包增加的那些页面跳转会有问题&#xff0c;不能跳新的页面 //app更新检测 updataApp(){const that this;uni.showLoading({title:加载中...})plus.runtime.getProperty(plus.runtime.appid, functio…...

C语言第八弹---一维数组

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 一维数组 1、数组的概念 2、⼀维数组的创建和初始化 2.1、数组创建 2.2、数组的初始化 2.3、数组的类型 3、⼀维数组的使用 3.1、数组下标 3.2、数组元素…...

科普栏目 | 水离子水壁炉是如何打造清新环境,提升居家生活?

现代生活中&#xff0c;人们对于居家环境的品质有着越来越高的要求。水离子水壁炉作为一种创新科技&#xff0c;通过其独特的功能&#xff0c;为居家生活带来了一系列的提升。 1.采用先进的技术&#xff0c;减少了对传统能源的依赖&#xff0c;让我们在提高生活品质的同时&…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...