首页 > 其他分享 >【快速阅读四】基于边缘信息的模版匹配中贪婪度参数的简单解析。

【快速阅读四】基于边缘信息的模版匹配中贪婪度参数的简单解析。

时间:2024-01-24 15:13:56浏览次数:27  
标签:得分 个点 模版 参数 贪婪 公式 解析

  对这个课题稍作研究,以便记录。

   在基于边缘的模版匹配中,我们知道可以有个贪婪度参数可以设置。在Halcon的帮助文档中,也有对他进行说明。我们在Halcon那本经典的书上,没有看到对这个参数的解析。不过他也有讲到在计算某个候选位置的得分时,如果满足一定的条件也可以提前结束对得分的判断,而判定这个点不是一个候选点,原文贴图如下: 

      

   这里我通俗的讲解下为什么可以有这个判断条件,也就是这个公式是如何得到的。

  我们知道,某个点的最大得分必然是1,这只有在每个点都和模版的特征点信息完全一致的情况下获取,这个时候,每个点的得分都是1/n,同时单独一个点的最大得分也是1/n,如果我们设定了目标的最小得分位Smin,那么当计算到第j个点后,还剩下 n-j 个点没有计算得分,那么最理想的情况就是这剩下的 n-j 个点都和模版对应的特征点完全一样,这样,剩下点的最大得分即为:  1/n *(n - j), 此时,如果前n个点的累计得分Sj 再加上后续的最大的理想得分 还小于Smin的话,那这个点肯定就不能满足目标的得分了,即:

       

  公式稍作移位后即得到:

        

  即书中的公式。

  当Smin = 0.7时,假如有100个边缘点,则不同的j 和 对应的临界值如下图所示:

                  

  前面三十个点对应的临界值是负数,是没有什么意义的,也么有必要做判断。

  当在程序中做这种判断时,所进行的操作是安全的,不会带来任何逻辑上的错误,也不会因为停止继续计算而造成目标漏判等问题,这个操作也会大大的提高程序的速度,毕竟大部分目标点都是无效的。

  另外,如果更加激进一点的判断手段呢,就是如果前面j个点的累计得分小于 平均值,则认为他不可能得到目标了,即如果符合下式,则直接退出计算:      

                                     

  很明显,当我们计算的前j个点恰好位于光照不均匀区或瑕疵区域时,很有可能把有效的目标点给剔除了,这样就丧失了意义,但是在快接近最后一些匹配点时,这样的规则就能较为安全的实现提前退出,因此,在codeproject的一个文章里,就提出了一个带贪婪度参数的一个停止计算公式:

      

  其中g表示贪婪度参数,其范围是[0,1],当其为0是,即为前述的最安全的公式,为1时,则为后续的最激进的公式。

  这个停止标准呢,在计算特征点时,前面的一些特征点使用的是较为安全的推断公式,随着特征点数量的增加,则越来越向后续激进的公式靠近。

  以下是一些比较曲线:

            

   其中红色为g = 0.5时的结果,绿色为g=0.7时的结果,蓝色的为安全的结束线,品红色的为最不请安全的停止线。

  其实在实际编程时,还要在前面的那个min公式里加上一个max的,即那个停止值不能小于0的。

  还是感觉这个公式有点不太完美,应该还可以有更为合适的公式的。

  

 

翻译

搜索

复制

<iframe height="240" width="320"></iframe>

标签:得分,个点,模版,参数,贪婪,公式,解析
From: https://www.cnblogs.com/Imageshop/p/17984597

相关文章

  • 深度解析Android APP加固中的必备手段——代码混淆技术
    AndroidAPP加固是优化APK安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下AndroidAPP加固的具体实现方式。混淆代码使用ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解,官网下载ipaguard即可。加固混淆为了保......
  • 线程管理神器:Executors全面解析
    内容摘要Executors在Java中提供了快速创建线程池的能力,其优点显著:它简化了线程管理,减少了代码量;提供了多种类型的线程池以适应不同场景;通过复用线程,降低了资源消耗,提高了系统响应速度和吞吐量。使用Executors,开发者能够更专注于业务逻辑,而无需深入底层线程细节。官方文档:https:/......
  • 前瞻性解析:数字孪生技术真正的实用价值
    在多领域2D、3D可视化监控层面确实是有实用价值的。数字孪生其实就是利用数字化技术创建的一个实体或系统的虚拟副本,它可以模拟和仿真现实世界的物理、工艺和行为特征。常被应用在2D和3D工业可视化监控中,通过将物理系统的数据与虚拟模型相结合,提供实时可视化的方式监测和管理......
  • 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
    BeanDefinition的解析过程(面向注解)前面的几篇文章对Spring解析XML文件生成BeanDefinition并注册的过程进行了较为详细的分析,这种定义Bean的方式是面向资源(XML)的方式。面向注解定义Bean的方式Spring的处理过程又是如何进行的?本文将会分析Spring是如何将 @Component......
  • C#析构函数解析:资源管理的精要和使用技巧
     在C#中,析构函数(Destructor)是一个特殊的方法,用于清理对象占用的资源。它是由垃圾回收器在对象被销毁时自动调用的。析构函数的原理是在对象即将被回收时执行一些清理操作,例如释放非托管资源或执行一些对象销毁前的必要操作。析构函数的基本原理:调用时机: 当对象被垃圾回收......
  • 44从零开始用Rust编写nginx,命令行参数的设计与解析及说明
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/......
  • # yyds干货盘点 # 解析json数据,指定列去解析报错如何破?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python解析的问题。问题如下:大佬们请问下这个是啥情况呀 解析json数据 指定列去解析报错JSONDecodeError:Expecting','delimiter:line1column73(char72)数据不多我就一个个去试指......
  • React 状态管理 valtio 解析
    valtio是什么valtio是一个很轻量级的响应式状态管理库,它基于Proxy实现,类似于vue的数据驱动视图的理念,使用外部状态代理去驱动React视图更新,不管在react组件内部还是外面都可以使用。下面提供valtio基本用法例子:https://codesandbox.io/embed/5x592g?view=Editor+%2B+Pr......
  • Go-命令行参数解析
    1.解析命令行参数程序在执行时,获取在命令行启动程序是使用的参数命令行(Commandlineinterface--CLI):基于文本来查看、处理、操作计算机的界面,又被称为终端、控制台命令:在命令行执行的程序,一般是一行,包含命令名字、子命令与命令相关的选项(Flag),Flag:传递给命令的参数......
  • 【python】SSTI模版注入
    0x00  PythonVene环境及介绍venv虚拟环境:创建和管理虚拟环境的模块首先aptupdate更新一下包管理安装你当前版本的python-venv选择一个目录,安装venv虚拟环境。我取的名是flask-venv。如何选中当前的venv呢?执行以下命令可以发现多了一个前缀flask-venv在当前目录安装f......