Halcon 形状匹配参数详解
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
find_shape_model(Image : : //搜索图像
ModelID, //模板句柄
AngleStart, // 搜索时的起始角度
AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集
MinScore, //最小匹配值,输出的匹配的得分Score 大于该值
NumMatches, //定义要输出的匹配的最大个数
MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出
SubPixel, //计算精度的设置,五种模式,多选2,3
NumLevels, //搜索时金字塔的层数
Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况
Row,Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。
注意:
其输出参数共有4个。分别是目标在图像中的坐标(Row,Column)—重心坐标、目标的旋转角度以及匹配分值。
1.Row、Column的坐标并不是模板在搜索图像中的精确位置,因此不能直接使用他们。这些数值是为了创建变换矩阵被优化后的,你可以用这个矩阵的匹配结果完成各种任务,比如调整后续步骤的ROI。
2.Score是一个0到1之间的数,是模板在搜索图像中可见比例的近似测量。如果模板的一半被遮挡,该值就不能超过0.5。参数MinScore设置的越大,搜索的就越快。如果模板在图像中没有被遮挡,MinScore可以设置为0.8,甚至为0.9
3.Image的domain定义了模型参考点的搜索区域,模型参考点是在create_shape_model中用来创建模型的图像的domain区域的重心。不考虑使用函数set_shape_model_origin设置不同的初始位置。在图像domain区域的这些点内搜索模型,其中模型完全属于这幅图像。这意味着如果模型超出图像边界,即使获得的质量系数(score)大于MinScore也不能找到模型。这种性能可以通过set_system(‘border_shape_models’,‘true’)改变,这样那些超出图像边界,质量系数大于MinScore的模型也能找到。这时那些在图像外面的点看作是被遮挡了,可以降低质量系数。在这种模式下搜索的时间将要增加。
4.**参数AngleStart和AngleExtent确定了模板搜索的旋转角度。该角度尽量是create_shape_model算子中给定的角度一致。**参数AngleStart和AngleExtent确定了模型搜索的旋转角度,如果有必要,旋转的范围会被截取成为create_shape_model函数中给定的旋转范围。这意味着创建模型和搜索时的角度范围必须真正的重叠。在搜索时的角度范围不会改变为模2*pi的。为了简化介绍,在该段落剩下的部分所有角度都用度来表示,而在find_shape_model函数中使用弧度来设置的。因此,如果创建模板时,AngleStart=-20°、AngleExtent=40°,在搜索模板函数find_shape_model中设置AngleStart=350°、AngleExtent=20°,尽管角度模360后是重叠的,还是会找不到模板的。为了找到模板,在这个例子中必须将AngleStart=350°改为AngleStart=-10°。
5.参数MinScore定义模板匹配时至少有个什么样的质量系数才算是在图像中找到模板。MinScore设置的越大,搜索的就越快。如果模板在图像中没有被遮挡,MinScore可以设置为0.8这么高甚至0.9。
6.NumMatches定义了在图像上找到模板的最大的个数。如果匹配时的质量系数大于MinScore的目标个数多于NumMatches,仅仅返回质量系数最好的NumMatches个目标位置。如果找的匹配目标不足NumMatches,那么就只返回找到的这几个。参数MinScore优于NumMatches。
**如果Image中仅有1个目标,将NumMatches设置为1,将MinScore设置较低,比如0.5。该方式是一种较健壮的在Image中找到匹配目标的参数设置。
**
7.如果模型具有对称性,会在搜索图像的同一位置和不同角度上找到多个与目标匹配的区域。参数MaxOverlap是0到1之间的,定义了找到的两个目标区域最多重叠的系数,以便于把他们作为两个不同的目标区域分别返回。重叠的计算方法是基于找到的目标区域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0, 找到的目标区域不能存在重叠, 如果MaxOverla p=1,所有找到的目标区域都要返回。如果找到的两个目标区域彼此重叠并且大于MaxOverlap,仅仅返回效果最好的一个。
8.SubPixel确定找到的目标是否使用亚像素精度提取。如果SubPixel设置为’none’(或者’false’ 背景兼容),模型的位置仅仅是一个像素精度和在create_shape_model中定义的角度分辨率。如果SubPixel设置为’interpolation’(或’true’),位置和角度都是亚像素精度的。在这种模式下模型的位置是在质量系数函数中插入的,这种模式几乎不花费计算时间,并且能达到足够高的精度,被广泛使用。然而在一些精度要求极高的应用中,模板的位置应该通过最小二乘调整决定,比如通过最小化模板点到相关图像点的距离。与 ‘interpolation’相比,这种模式需要额外的计算时间。对于最小二乘调整的模式有:‘least_squares’, ‘least_squares_high’, 和’least_squares_very_high’。他们可用来定义被搜索的最小距离的精度,选择的精度越高,亚像素提取的时间越长。其级别越高,耗时越长。一般情况下,用’least_squares’能达到时间和精度的平衡。
然而,通常SubPixel设置为’interpolation’。如果希望设置最小二乘就选择’least_squares’,因为这样才能确保运行时间和精度的权衡。
如果目标相对于模板稍微有形变,其匹配的分值会较低。对于这样的目标,可在参数SubPixel额外传递一个最大允许目标变形的参数,‘max_deformation 1’,字符串中的数值是0到32之间的整数值。0代表不允许变形。**较高的最大允许变形值导致运行时长的增加且及承担了更高的匹配错误的风险。因此,最大变形应该选择尽可能的小。**为了获取一个有意义的分数值以及避免匹配错误,推荐把允许变量和最小二乘法联合使用。
9.NumLevels是在搜索时使用的金字塔层数,金字塔就是按图像分辨率将图像拆成一层一层的,金字塔层数越多,匹配速度越快。如有必要,层数截成创建模型时的范围。如果NumLevels=0,使用创建模板时金字塔的层数。另外NumLevels还可以包含第二个参数,这个参数定义了找到匹配模板的最低金字塔层数。NumLevels=[4,2]表示匹配在第四层金字塔开始,在第二层金字塔找到匹配(最低的设为1)。可以使用这种方法降低匹配的运行时间,但是这种模式下位置精度是比正常模式下低的,所谓正常模式是在金字塔最底层匹配。因此如果需要较高的精度,应该设置SubPixel至少为’least_squares’。如果金字塔最底层设置的过大,可能不会达到期望的精度,或者找到一个不正确的匹配区域。这是因为在较高层的金字塔上模板是不够具体的,不足以找到可靠的模板最佳匹配。在这种情况下最低金字塔层数应设为最小值。
注:在图像失焦、镜头出现模糊的情况下进行模板匹配时,需将该值设置为负,比如[0,-1],find_shape_model将返回金字塔最低级别上找到匹配的匹配项来找到待测目标。
另外,不同图像间,金字塔级别可能略有不同。为了方便对质量较差的图像匹配,在匹配时可以确定最低的金字塔级别。这里的技巧是,最低金字塔层可用负数指明。例如,如果NumLevels为[4,-2],匹配从第4层金字塔开始,跟踪到最低金字塔级别。如果在这层金字塔找不到匹配目标,继续降低金字塔级别进行搜索,把找到至少一个匹配目标的金字塔级别最为最低金字塔级别,并返回找到的目标。
10.参数Greediness确定在搜索时的“贪婪程度”。如果Greediness=0,使用一个安全的搜索启发式,只要模板在图像中存在就一定能找到模板,然而这种方式下搜索是相对浪费时间的。如果Greediness=1,使用不安全的搜索启发式,这样即使模板存在于图像中,也有可能找不到模板,但只是少数情况。如果设置Greediness=0.9,在几乎所有的情况下,总能找到模型的匹配。
最后,该模板寻找算子在找不到目标的情况下较为耗时,通过算子
set_shape_model_param (ModelID, ‘timeout’, 1000)
能设置匹配时长,如果find_shape_model达到’timeout’,立刻终止执行,无输出匹配结果,返回一个错误代码9400(H_ERR_TIMEOUT)。
相关文章:

Halcon 形状匹配参数详解
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score) find_shape_model(Image : : //搜索图像 ModelID, //模板句柄 AngleStart, // 搜索时的起始角度 AngleExte…...

C++11强类型枚举
C11引入了强类型枚举(enum class),也称为枚举类。 强类型枚举是一种更加类型安全的枚举类型,相对于传统的枚举类型,强类型枚举可以提供更好的安全性和可读性。 强类型枚举的格式如下: enum class 枚举名 …...

pytorch讲解(部分)
友爱的目录 自动求导机制从后向中排除子图自动求导如何编码历史信息Variable上的In-place操作In-place正确性检查 CUDA语义最佳实践使用固定的内存缓冲区使用 nn.DataParallel 替代 multiprocessing 扩展PyTorch扩展 torch.autograd扩展 torch.nn 多进程最佳实践共享CUDA张量最…...

C++ 基本的7种数据类型和4种类型转换(C++复习向p3)
文章目录 基本内置类型存储范围typedef 声明新名字enum 枚举类型类型转换 基本内置类型 boolcharintfloatdoublevoidwchar_t ⇒ short int 存储范围 可以这样 sizeof(int) 来确认 int 占用字节数 char,1字节,-128~127 或 0~255 wchar_t,2…...

Scrum敏捷迭代规划和执行
Sprint Backlog看板 迭代工作的开展是围绕Sprint Backlog展开的,在Leangoo中,我们需要为每个迭代创建一个Sprint Backlog看板。Sprint Backlog(迭代)看板,用于管理当前Sprint的需求和开发任务,可视化展示每…...

智警杯赛前学习1.1---excel基本操作
修改默认设置 步骤一:打开“Excel选项”窗口,打开“文件”菜单,选择“选项”标签 步骤二:在“Excel选项”窗口中,选择“常规与保存”标签,在“常规与保存”标签中,可以修改录入数据时的默认字体…...

【Android】Handle(一) 主要特点和用途
在Android中,Handler是一种消息处理机制,它允许我们在不同线程之间交换信息并更新UI。具体来说,Handler可以将一个Runnable或Message对象加入到消息队列中,并在合适的时间去执行它们。 以下是Handler的主要特点和用途:…...

40亿个QQ号,限制1G内存,如何去重?【已通过代码实现】
前几天发现一个有趣的文章 “40亿个QQ号,限制1G内存,如何去重?”,发现很有意思,就想着用代码实现一下,下面是分析和实现过程 一、审题分析 一个 QQ 号现在最长有 11 位,因为 int 是四字节,数值范围是2的31次方,因此得使用 long 存储,但考虑到实现,使用 int 存储(1…...

Talk预告 | 新加坡国立大学张傲:10%成本定制类 GPT-4 多模态大模型
本期为TechBeat人工智能社区第502期线上Talk! 北京时间06月01日(周四)20:00,新加坡国立大学在读博士生 — 张傲的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “10%成本定制类 GPT-4 多模态大模型 ”,届时将介…...

从C语言到C++_13(string的模拟实现)深浅拷贝+传统/现代写法
前面已经对 string 类进行了简单的介绍和应用,大家只要能够正常使用即可。 在面试中,面试官总喜欢让学生自己 来模拟实现string类, 最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。 为了更深入学习STL,下面我…...

reduce()方法详解
一、 定义和用法 reduce() 方法将数组缩减为单个值。 reduce() 方法为数组的每个值(从左到右)执行提供的函数。 函数的返回值存储在累加器中(结果/总计)。 注释:对没有值的数组元素,不执行 reduce() 方法。…...

C++虚假唤醒
概念: 虚假唤醒是指在使用条件变量时,线程被唤醒但条件并没有满足,导致线程执行错误的情况,这个过程就是虚假唤醒。 虚假唤醒弊端: 虚假唤醒会导致程序的正确性受到影响,因为唤醒的线程并没有满足条件&…...

【AI】dragonGPT - 单机部署、极速便捷
dragonGPT 从数据私有化,到prompt向量库匹配,再到查询,一条龙服务,单机部署,极简操作 pre a.需要下载gpt4all model到本地. ggml Model Download Link 然后将存放model的地址写入.env MODEL_PATH your pathb.…...

Uuiapp使用生命周期,路由跳转传参
Uniapp生命周期: 1. beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。 2. created:在实例创建完成后被立即调用。 3. beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。 …...

定积分的计算(牛顿-莱布尼茨公式)习题
前置知识:定积分的计算(牛顿-莱布尼茨公式) 习题1 计算 ∫ 0 2 ( x 2 − 2 x 3 ) d x \int_0^2(x^2-2x3)dx ∫02(x2−2x3)dx 解: \qquad 原式 ( 1 3 x 3 − x 2 3 x ) ∣ 0 2 ( 8 3 − 4 6 ) − 0 14 3 (\dfrac 13x^3-…...

leak 记录今天的一个小题
先看题, add没有大小限制,这里edit可以溢出8字节,也就是可以改后边的size,可以调用4次free没有调用函数只是把指针置0,show可以用一次. void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) {init_0(a1, a2, a3);while ( 1 ){menu();switch ( read_n() ){cas…...

软考A计划-试题模拟含答案解析-卷二
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...

【C++】pthread
一、pthread简介 pthread是C98接口且只支持Linux,使用时需要包含头文件#include <pthread.h>,编译时需要链接pthread库,其中p是POSIX的缩写,而POSIX是Portable Operating System Interface的缩写,是IEEE为要在各…...

2023年前端面试题汇总-浏览器原理
1. 浏览器安全 1.1. 什么是 XSS 攻击? 1.1. 1. 概念 XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。 XSS 的本质是因为网站没有对…...

react介绍,react语法,react高级特性,react编程技巧
React是一个用于构建用户界面的JavaScript库。它由Facebook开发,于2013年首次发布。React的主要目标是提高应用程序的性能和可维护性。React采用了一种称为“组件”的模式,使开发人员可以将应用程序拆分为小而独立的部分,从而更容易编写和维护…...

Locust接口性能测试
谈到性能测试工具,我们首先想到的是LoadRunner或JMeter。LoadRunner是非常有名的商业性能测试工具,功能非常强大。但现在一般不推荐使用该工具来进行性能测试,主要是使用也较为复杂,而且该工具体积比较大,需要付费且价…...

Python类的特殊方法(通过故事来学习)
在一座森林里,住着三只动物:狼、兔和熊。这三只动物都有不同的特点和能力,但是它们所有的行为都可以被抽象成一个“动物”类。现在,让我们来看看Python中的类和特殊方法如何帮助我们实现这个故事。 首先,我们可以定义…...

Vue.js 中的父子组件通信方式
Vue.js 中的父子组件通信方式 在 Vue.js 中,组件是构建应用程序的基本单元。当我们在应用程序中使用组件时,组件之间的通信是非常重要的。在 Vue.js 中,父子组件通信是最常见的组件通信方式之一。在本文中,我们将讨论 Vue.js 中的…...

Python之并发编程二多进程理论
一、什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 二、进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 三、并发与并行 无论是并行还是并发,在用户看来都是’同时’运行的&am…...

纯干货:数据库连接耗时慢原因排查
背景 最近公司的社区相关的服务需要优化,由于对业务不熟悉,只能借助监控从一些慢接口开始尝试探索慢的原因。由于社区相关的功能务是公司小程序流量入口,所以相应的服务访问量还是比较高的。针对这类高访问的项目,任何不留神的地…...

【OneNet】| stm32+esp8266-01s—— OneNet初体验 | 平台注册及设备创建 | demo使用
系列文章目录 失败了也挺可爱,成功了就超帅。 文章目录 前言1. OneNet平台注册2. 创建多协议接入设备3. 硬件连接4. 下载并运行Demo4.1 Demo下载4.2 运行Demo本小节结束 前言 最近准备耍下 Onenet平台 。下载了官方demo 遇到几个问题 1、创建接入设备 因为平台网页…...

解决win无法删除多层嵌套文件夹
起因:昨天研究jpackage工具,不小心搞得一个文件夹里嵌套了好几百个文件夹,用win自己的删除删不掉,shiftdel直接删除也不行,直接弹窗删除错误; 后来用电脑管家下载了个“文件粉碎”,添加目录&am…...

用Vue简单开发一个学习界面
文章目录 一.首先创建我们的Vue文件夹二.源代码BodyDemoHearderDemoHomeDemoMarkdownDemoFileManager.jsMain.js(注意绑定)APP源代码 效果图(按钮功能)新增二级菜单(v-for)需要的可以私信 一.首先创建我们的…...

Oracle数据库从入门到精通系列之五:数据文件
Oracle数据库从入门到精通系列之五:数据文件 一、数据文件二、Oracle数据库存储分配单位三、Oracle数据库文件系统机制四、段五、区段六、块七、表空间八、Oracle数据库存储层次体系小结一、数据文件 数据文件和重做文件是数据库中最重要的文件,数据最终会存储在这些文件中。…...

使用MockJS进行前端开发中的数据模拟
在前端开发中,有时我们需要在没有后端接口的情况下进行前端页面的开发和测试。这时,我们可以使用MockJS来模拟数据,以便进行开发和调试。MockJS是一个用于生成随机数据和拦截Ajax请求的JavaScript库,它能够帮助我们快速搭建起一个…...