Halcon基于形状的模板匹配inspect_shape_model

Halcon基于形状的模板匹配

基于形状的匹配,就是使用目标对象的轮廓形状来描述模板。Halcon中有操作助手,可以直观
地进行形状模板匹配的参数选择以及效果测试。如果使用算子编写,步骤如下。
(1)从参考图像上选择检测的目标。使用合适的形状工具,如矩形选区等,从参考图像上选择ROI,然后使用reduce_domain算子将该区域裁剪成一个独立的图像区域。
(2)创建模板。在创建模板之前,建议使用inspect_shape model算子列出模板图像的各层级的金字塔图像和根据模板图像自动提取出的形状。查看这些信息有助于为创建模板选择合适的参数。
设置inspect_shape_model算子的最后两个参数NumLevels 和Contrast,其中NumLevels 表示金字塔的层级,Contrast表示点的最小对比度。该算子执行后将会把预设参数的金字塔分级图像显示出来,可以根据需要判断参数选取得是否合理。
图(a)为输入的图像,选取其中一部分图像用于创建形状模板,并在inspect_shape_model算子中设置金字塔层级NumLevel为4,Contrast为30;图(b)为该算子返回的每个层级的图像;图(c)为每个金字塔层级提取出的形状。
在这里插入图片描述
在确定了金字塔层级和最小对比度之后,使用create_shape_model算子创建形状模板。创建模板时,除了NumLevel和Contrast 两个参数已经明确外,还需要定义模板的其他参数。例如,AngleStart 和AngleExtent 用于约束可能旋转的角度,AngleStep用于约束角度变化的步长。如果模板图像特别大,可以用Optimization对模型进行优化,减少点的数量。值得一提的是Metric参数,相比互相关匹配中的Metric参数,这里的Metric有4个可选项,分别如下。
usepolarity:表示匹配得到的图像必须和模板图像的对比度“方向”相同。例如,模板中是个暗背景上有一个亮的目标,那么在检索时,只有符合匹配条件并且亮度比背景亮的目标才能匹配成功。
ignore_global_polarity:适用于全局对比度发生变化的情况,表示忽略全局对比度的变化,即匹配过程中的图像对比度可以与模板中的完全相反。例如,模板中是一个暗背景上有一个亮的目标,那么在检索时,即使目标对象很亮而背景很暗,也能匹配成功。
ignore local polarity :表示忽略局部对比度的变化,如果图像因为光照改变等原因发生局部对比度变化,可以选择这一项。
ignore_color_polarity :表示匹配过程忽略颜色对比度的变化,一般适用于多通道图像。如果不确定检测时会显示哪个通道的图像,可以选择此项。
Metric 参数可以用于因光照导致图像对比度发生变化的情况,默认值use_polarity可能会导致匹配失败,这时可以考虑修改Metric的值来调整匹配的效果。
创建完成以后,create_shape_mode1算子会返回一个句柄,名称是ModelID,用来指定模板的名称。
在创建形状匹配模板时,也可以直接使用XLD轮廓作为形状模板。
(3)搜索目标。创建好模板之后,接下来读取待检测的图像。使用find shape model算子搜索最佳匹配区域,将检测图像和模板句柄ModelID输入该算子中,搜索到的目标对象的匹配分值会存入参数Score中。如果各项参数都设定得很合适,那么在图中应该会找到至少一个大于最小匹配分值的区域。find_shape _model算子返回的结果,除了匹配分值外,还有目标的坐标和旋转角度。利用这些信息,可以进行位置与旋转角度的计算。
为了直观地显示结果,可以在画面上依据计算结果绘图,如使用dev_display_shape_matching_results 算子绘制匹配结果。
(4)清除模板。匹配结束后,使用clear_shape_model算子将模板清除,并释放内存资源。其代码如下:

*读取参考图像
read_image(Image, 'data/labelShape-0')
*根据要匹配的目标,围绕目标创建一个矩形,获取ROI区域
gen_rectangle1 (Rectangle, 34, 290, 268, 460)
*对ROI区域进行裁剪,得到模板图像
reduce_domain (Image, Rectangle, ImageReduced)
*测试金字塔的层级参数
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
*设置显示图像、绘制线条的线宽等窗口参数
dev_set_draw ('margin')
dev_set_line_width(3)
dev_display(Image)
dev_display(Rectangle)
*根据剪裁的模板图像创建基于形状的模板,返回模板句柄ShapeModelID
create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, 	ShapeModelID)
stop()
*读取用于测试的图像
read_image(SearchImage, 'data/labelShape-1')
*使用匹配算子进行形状模板匹配
find_shape_model (SearchImage, ShapeModelID, 0, rad(360), 0.5, 3, 0, 'least_squares', 0, 0.5, 	RowCheck, ColumnCheck, AngleCheck, Score)
*显示匹配结果,将匹配得到的实例以形状轮廓的形式绘制出来
dev_display_shape_matching_results (ShapeModelID, 'red', RowCheck, ColumnCheck, AngleCheck, 1, 1, 0)
*匹配结束,释放模板资源
clear_shape_model (ShapeModelID)

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

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

相关文章

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1(按照要求修改后放到新string里)思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

CocoaPods的安装和使用

前言 本篇文章讲述CocoaPods的安装和使用 安装cocoaPods 如果电脑没有安装过cocoaPods,需要先安装,使用下面的命令: sudo gem install cocoapods输入密码后开始安装,需要等待。。。但是我这里报错了。 The last version of d…

nexus清理docker私库

下载nexus-cli客户端,并非必须下载到服务器,理论上只要能访问到nexus就行 wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli这个链接下载不了了,末尾有资源下载,里面包含了完整包和脚本&#xff0…

即插即用篇 | YOLOv8 引入 SENetv2 | 多套版本配合使用

卷积神经网络(CNNs)通过提取空间特征并在基于视觉的任务中实现了最先进的准确性,彻底改变了图像分类。所提出的压缩激励网络模块收集输入的通道表示。多层感知机(MLP)从数据中学习全局表示,在大多数用于学习图像提取特征的图像分类模型中起到关键作用。在本文中,我们引入…

npm ,yarn 更换使用国内镜像源,阿里源,清华大学源

在平时开发当中,我们经常会使用 Npm,yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的,如果没有梯子的话。会感觉特别特别慢,所以,使用国内的源是非常有必要的。 Nnpm, yarn 常用命令 常用命令&am…

Appium 环境配置

Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念: •无需用户对 App 进行任何修改或…

opencv#27模板匹配

图像模板匹配原理 例如给定一张图片,如上图大矩阵所示,然后给定一张模板图像,如上图小矩阵。 我们在大图像中去搜索与小图像中相同的部分或者是最为相似的内容。比如我们在图像中以灰色区域给出一个与模板图像尺寸大小一致的区域,…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…

数组A[m+n]中存放了两个线性表(a1,a2,.....am)和(b1,b2.....bn),将数组中的两个线性表的位置互换,要求空间复杂度为1

要求空间复杂度为O(1),那么不可以借助辅助数组来完成此操作 算法思路:可先将此数组逆置变成bn,......b1,am,....,a1,然后分别逆转两个线性表的数据元素 算法实现 1、定义一个函数,该函数的功能是可以对一个数组的任意连续的部分进…

UDP和TCP代理协议有什么区别?哪个更好

在互联网的世界里,数据传输的方式有很多种,其中 UDP 和 TCP 是两种常见的传输协议。而代理协议则是为了在网络中传输数据时提供安全、稳定和高效的传输环境。那么,UDP 和 TCP 代理协议有什么区别呢?哪个更好呢?接下来&…

内网穿透的应用-使用Docker搭建一个Wiki.Js知识库系统并实现分享他人远程创作

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

力扣移掉k位数字402

Problem: 402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 给你一个以字符串表示的非负整数 num 和一个整数 k &…

阿里云 SAE 2.0 正式商用:极简易用、百毫秒弹性效率,降本 40%

作者:黛忻 本文主要介绍阿里云 Serverless 应用引擎(以下简称 SAE )如何帮助企业跨越技术鸿沟,从传统应用架构无感升级到 Serverless 架构,以更高效、更经济的方式进行转型,快速进入云原生快车道&#xff0…

ATA-3090B功率放大器在医疗行业器官芯片中的应用

科学技术的发展,不断改变着我们的世界,也造福着我们的生活,在未来我们会拥有更健康的体魄,更长久的器官芯片技术在医疗行业的应用越来越广泛。该技术基于生物工程和微电子领域的交叉学科,在实现人工器官和组织复杂功能…

el-table样式错乱解决方案

bug: 图片的椭圆框住的地方,在页面放大缩小之后就对不齐了。 原因: 主要原因是当你对页面放大缩小的时候,页面进行了重构,页面的宽高及样式进行了变化,但是在这个更新的过程中,table的反应并没…

分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测

分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测 目录 分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本…

Java面试汇总——jvm篇

目录 JVM的组成: 1、JVM 概述(⭐⭐⭐⭐) 1.1 JVM是什么? 1.2 JVM由哪些部分组成,运行流程是什么? 2、什么是程序计数器?(⭐⭐⭐⭐) 3、介绍一下Java的堆(⭐⭐⭐⭐) 4、虚拟机栈(⭐⭐⭐⭐) 4.1 什么是虚拟机栈&…

C#,入门教程(28)——文件夹(目录)、文件读(Read)与写(Write)的基础知识

上一篇: C#,入门教程(27)——应用程序(Application)的基础知识https://blog.csdn.net/beijinghorn/article/details/125094837 C#知识比你的预期简单的多,但也远远超乎你的想象! 与文件相关的知识&#xf…

【JAVA】我和我的第一个“对象”相遇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-zAjv1fTLGQmnqncy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

刷题总结 1.23

三阶B-树根节点最少有一个关键字,其他节点最少【3/2】-1(向上取整),即为1; 所以该B树为一颗满二叉树,关键字个数为31; 这里的最优二叉树指的是赫夫曼二叉树,由赫夫曼二叉树的构造可…