Halcon指定区域的形状匹配

news2024/10/2 11:54:26

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 := i
    endif
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1412861.html

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

相关文章

08 BGP 华为官方文档 十一条选路原则

BGP 华为官方文档 十一条选路原则 丢弃下一跳不可达的路由 1)比较“协议首选值-pref-val”属性,数值越大越好,默认值是0,只在本设备生效,不在网络中传递 2)比较“本地优先级-local_pref”属性,…

初识数据库

数据库技术的基础术语 在学习数据库技术之前,我们先认识与该技术密切相关的基本术语,分别是数据库 (Database, DB)、数据库管理系统(Database Management System, DBMS)和数据库 系统(Database System, DBS),具体介绍如下。 1. 数据库 数…

win10安装redis并配置加自启动(采用官方推荐unix子系统)

记录,为啥有msi安装包,还这么麻烦的用linux版本redis的安装方式,是因为从github上下载别人制作的msi报毒,还不止一处,这种链接数据库的东西,用别人加工过的,都报毒了还用就是傻逼了。 所以采用…

13.while条件循环语句 (4)

while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标、有范围的使用场景。 while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件…

IP 地址如何进行动态分配?

由于 IP 地址资源的有限性,大部分用户上网都是使用动态 IP 地址,而不是静态 IP 地址。动态 IP 地址指的是在需要的时候才进行 IP 地址分配的方式,而静态 IP 地址是固定分配一个 IP 地址,每次都用这一个地址。因此,IP 地…

AI PC的引擎 – 英特尔第 14 代处理器Meteor Lake架构分析

英特尔从2023年12月开始在笔记本电脑中发售首款 Meteor Lake 第 14 代 Core Ultra 芯片,开启新的“AI PC”时代。这款芯片采用了全新的架构,将CPU分为四块“瓷砖”(tiles):CPU Tile,SoC Tile,Gr…

Python学习从0到1 day9 Python函数

苦难是花开的伏笔 ——24.1.25 函数 1.定义 函数:是组织好的,可重复使用的,用来实现特定功能的代码段 2.案例 在pycharm中完成一个案例需求:不使用内置函数len(),完成字符串长度的计算 #统计字…

海外云手机三大优势

在全球化潮流下,企业因业务需求对海外手机卡等设备的需求不断攀升,推动了海外云手机业务的蓬勃发展。相较于自行置备手机设备,海外云手机不仅能够降低成本,还具备诸多优势,让我们深入探讨其中的三大黄金优势。 经济实惠…

Vulnhub靶机:FunBox 9

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:FunBox 9(10.0.2.37) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/funb…

NGINX如何实现rtmp推流服务

最近直播大火,直播推流软件遍地开花,那么用NGINX如何进行推流呢?下面我们就简单的介绍一下用NGINX的rtmp模块如何实现视频推流,我们主要从一下几点介绍: 推流拉流推流认证拉流认证 package mainimport ("fmt&qu…

Elasticsearch基础篇(八):常用查询以及使用Java Api Client进行检索

ES常用查询以及使用Java Api Client进行检索 1. 检索需求 参照豆瓣阅读的列表页面 需求: 检索词需要在数据库中的题名、作者和摘要字段进行检索并进行高亮标红返回的检索结果需要根据综合、热度最高、最近更新、销量最高、好评最多进行排序分页数量为10&#xf…

vscode 代码格式化很短就换行,以及缩放设置

安装vetur 打开vscode设置settings.json { "editor.tabSize": 2,//缩进单位"vetur.format.defaultFormatter.html": "js-beautify-html","vetur.format.defaultFormatterOptions": {"js-beautify-html": {"wrap_line…

项目测试 手机系统 改串号 写IMEI 改MEID 改手机型号 等信息配置信息 演示视频 和一键新机

项目测试 手机系统 改串号 写IMEI 改MEID 改手机型号 等信息配置信息 演示视频 和配置说明 项目-手机系统支持直接改串号 IMEI MEID 手机型号 等信息配置信息 演示视频 支持 条形码 SN IMEI 1 IMEI 2 MEID 唯一SN 蓝牙地址 wifi地址 mac "一键新机"这个术语通常出现…

视频有点大能做二维码吗?视频转成二维码图片的方法

怎么把一个比较大的视频转二维码图片呢?现在很多人会以二维码为载体来存储视频文件,其他人只需要扫码生成二维码就可以观看视频。有的视频因为时间比较长,尺寸比较大,文件会比较大,那么几十几百m大小的视频如何快速制作…

不学前沿技术与朽木浮草何异 Java 10新特性

不学前沿技术与朽木浮草何异? Java 10新特性 ​ 发布于 2018 年 3 月 20 日,最知名的特性应该是 var 关键字(局部变量类型推断)的引入了,其他还有垃圾收集器改善、GC 改进、性能提升、线程管控等一批新特性。 概览(…

Shell脚本------函数与数组

目录 一、函数 1、函数是什么? 2、函数的格式 3、函数的调用方法 ①脚本:查看当前操作系统 ②脚本二:函数备份yum线上源,创建yum本地源和清理缓存安装httpd 4、函数的返回值 5、函数传参 6、函数变量的作用范围 1、实例…

2024年【安全员-B证】考试技巧及安全员-B证操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 安全员-B证考试技巧参考答案及安全员-B证考试试题解析是安全生产模拟考试一点通题库老师及安全员-B证操作证已考过的学员汇总,相对有效帮助安全员-B证操作证考试学员顺利通过考试。 1、【多选题】《建筑施…

Rocky8 顺利安装 Airflow 并解决数据库报错问题

rocky是替代centos的服务器系统,稳定可靠。rocky8会比centos7新,可以支持更多服务软件的安装,免去升级各种库的麻烦,本文运行airflow服务就用rocky8系统。airflow是一个定时任务管理系统,功能强大,目前是ap…

机器学习算法(二)

一、朴素贝叶斯 朴素贝叶斯(Naive Bayes)是基于贝叶斯定理。它测量每个类的概率,每个类的条件概率给出 x 的值。这个算法用于分类问题,得到一个二进制“是 / 非”的结果。看看下面的方程式。 先验概率:即基于统计的概…

python基础学习-03 安装

python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksP…