基于形状的模板匹配

2023-05-16

前段时间一直在做图像模板匹配。需要对旋转模板进行匹配,并且对速度精度都有较高的要求。OpenCV里面并没有较好的解决方法。

cvMatchTemplate( const CvArr* image, constCvArr* templ,CvArr* result,int method )
Image  待搜索图像
Templ  模板图像
Result  匹配结果  用来存放通过以下方法计算出滑动窗口与模板的相似值
Method  计算匹配程度的方法
以上函数当模板存在较大旋转时就无法准确匹配了。

OpenCV形状匹配函数 

double cvMatchShapes(void* object1,void* object2,int method)
第一个参数是待匹配的物体1,
第二个是待匹配的物体2,
第三个参数method可以有CV_CONTOURS_MATCH_I1,CV_CONTOURS_MATCH_I2,CV_CONTOURS_MATCH_I3三种输入,这其实就是三种不同的判定物体相似的方法,匹配的返回值也是不一样的。

以上函数匹配精度也不高,只能达到像素级。
特征点匹配如Sift算法等需要图像质量较好,噪声大的图像不适应,而且找到特征点之间一一对应关系是难点。
halcon等商业软件这方面做的很好。 halcon基于形状的匹配Shape-Based matching能完美解决工业条件下的模板匹配问题。
HALCON提供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板,对整个图像建立模板也可以,但这样除非是对象在整个图像中所占比例很大,比如像视频会议中人 体上半身这样的图像,我在后面的视频对象跟踪实验中就是针对整个图像的,这往往也是要牺牲匹配速度的。 基本流程是这样的:
⑴ 首先确定出ROI的矩形区域,这里只需要确定矩形的左上点和右下点的坐标即可,gen_rectangle1()这个函数就会帮助你生成一个矩形,利用area_center()找到这个矩形的中心;
⑵ 然后需要从图像中获取这个矩形区域的图像,reduce_domain()会得到这个ROI;这之后就可以对这个矩形建立模板,而在建立模板之前,可以先对这个区域进行一些处理,方便以后的建模,比如阈值分割,数学形态学的一些处理等等;
⑶ 接下来就可以利用create_shape_model()来创建模板了,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10;Metric参数决定模板识别的条件,如果设为’use_polarity’,则图像中的物体和模板必须有相同的对比度;创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数;另外,还需要获得这个模板的轮廓,用于后面的匹配,get_shape_model_contours()则会很容易的帮我们找到模板的轮廓;
⑷ 创建好模板后,就可以打开另一幅图像,来进行模板匹配了。这个过程也就是在新图像中寻找与模板匹配的图像部分,这部分的工作就由函数find_shape_model()来承担了,它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的增大其值。

⑸ 找到之后,还需要对其进行转化,使之能够显示,这两个函数vector_angle_to_rigid()和affine_trans_contour_xld()在这里就起这个作用。前一个是从一个点和角度计算一个刚体仿射变换,这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用,把参考图像变为当前图像。



目前调用Halcon函数确实可以解决问题,但最终还是要自主开发,目前的方案是先粗定位再精定位,精度要到亚像素级别,并且能输出角度。

注:转载请注明出处!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于形状的模板匹配 的相关文章

  • 个人面试经验分享

    九月 十月是收获的季节 xff0c 也是奔波的季节 我也不例外 xff0c 没有特殊的机遇 xff0c 也是经历了一次残酷的海选啊 xff0c 把我经历简单的分享给各位学弟学妹们 我数了一下大概面了六家公司 xff1a 阿里 xff0c 华
  • ImageField用法的一个例子

    本文以注册头像为例讲解一下ImageField怎么用 第1步我们要定义一个ImageField 在models py里面定义 这个是用来写到数据库里面的 def custom path instance filename ext 61 fi
  • ubuntu20.04配置远程连接sshd服务

    ubuntu20 04配置远程连接sshd服务 1 为什么要配置 xff1f 两种可能 xff1a 本机虚拟机上安装的系统 这种情况就是为了方便 xff0c 因为在虚拟机上只能操作不是很方便 xff01 远程机房的服务器 这种是必须的 xf
  • 使用adb从手机拉取apk包

    1 找到app对应的包名 xff1a 2 3 1 adb shell am monitor 2 启动需要获取包名的应用 3 窗口就会打印出来当前应用的包名 或者 xff1a 查看手机上所有app包名 xff1a adb shell pm l
  • 使用c++filt工具demangle C++符号

    demangle符号名 在调试C 43 43 程序时 经常会遇到未demangle的C 43 43 符号名 不了解mangle的规则时 并不太容易确定具体是哪个API 比如 使用objdump将boost日志动态库的符号表导出 你是否能够很
  • 我的2014

    不知不觉中2014已经离我们远去了 xff0c 回想起2014 xff0c 我经历了太多 xff0c 又不知从何说起 2013年年末我开通了CSDN博客 xff0c 所以我真正开始写博客是在2014年1月份 xff0c 在2014年中写博客
  • Zsh 入门(安装及使用)

    Zsh 入门 本文前提 CentOS 6 7 64 bitroot 用户 Zsh 介绍 Zsh 兼容 Bash xff0c 据传说 99 的 Bash 操作 和 Zsh 是相同的Zsh 官网 xff1a http www zsh org 先
  • 炼丹笔记二:数据清洗问题

    欢迎大家关注微信公众号 xff1a baihuaML xff0c 白话机器学习 码字不易 xff0c 未经授权禁止转载 xff0c 如转载 xff0c 请添加知乎好友 xff1a 会写代码的好厨师 xff0c 私信我 xff01 在这里 x
  • LayoutLM——文本与布局的预训练用于文档图像理解

    摘要 xff1a 预训练技术近年来在多种NPL任务中取得了广泛的成功 尽管广泛的NPL应用的预训练模型 xff0c 其大多聚焦于文本级别的操作 xff0c 而忽略了布局与风格信息 xff0c 这对文档图像的理解至关重要 该篇论文提出了Lay
  • 初识hash

    1 哈希表 哈希表 xff08 Hash Table xff09 是一种根据关键字直接访问内存存储位置的数据结构 通过哈希表 xff0c 数据元素的存放位置和数据元素的关键字之间建立起某种对应关系 xff0c 建立这种对应关系的函数称为哈希
  • 程序员们,AI来了,机会来了,危机也来了

    程序员们 xff0c AI来了 xff0c 机会来了 xff0c 危机也来了 1 人工智能真的来了 纵观古今 xff0c 很少有计算机技术能有较长的发展寿命 xff0c 大部分昙花一现 xff0c 比如 xff1a 昔日的DOS windo
  • 11.FreeRTOS学习笔记-内存管理

    几种内存分配算法的比较 heap 1 c 管理方案是 FreeRTOS 提供所有内存管理方案中最简单的一个 它只能申请内存而不能进行内存释放 并且申请内存的时间是一个常量 heap 2 c方案支持释放申请的内存 但是它不能把相邻的两个小的内
  • C#(Csharp)基础教程(上)(菜鸟教程笔记)

    C 及其开发环境简介 参考视频 c 教程 1 1 C 概述 C 是一个现代的 通用的 面向对象的编程语言 xff0c 它是由微软 xff08 Microsoft xff09 开发的 xff0c 由 Ecma 和 ISO 核准认可的 C 是由
  • Python 语法糖

    class person def init self func self f 61 func print 34 init 34 def call self args kwargs print 34 call 34 self f 第一种使用装
  • Makefile经典教程(掌握这些足够)

    makefile很重要 什么是makefile xff1f 或许很多Winodws的程序员都不知道这个东西 xff0c 因为那些Windows的IDE都为你做了这个工作 xff0c 但我觉得要作一个好的和professional的程序员 x
  • C语言 mkdir 创建多级目录

    通过例子来说明 xff1a 我要在当前目录下创建 head follow end 目录 C语言中mkdir原型为int mkdir const char pathname mode t mode mkdir 函数以mode方式创建一个以pa
  • pip3 install paramiko 安装失败

    running build ext generating cffi module build temp linux x86 64 cpython 37 cryptography hazmat bindings openssl c creat
  • PX4 的 ECL EKF 公式推导及代码解析

    如有谬误 xff0c 请联系指正 转载请注明出处 联系方式 xff1a e mail ericzzj 64 163 com github https github com ericzzj1989 matlab px4 msf
  • 基于K-近邻算法的手写数字识别研究

    摘要 xff1a 基于K 近邻算法研究手写数字 xff08 0 9 xff09 的识别问题 xff0c 本文通过对手写数字的图像进行处理 xff0c 提取特征向量 xff0c 使用Python实现了K 近邻算法 xff0c 并在此基础上开发
  • MySQL数据库学习体系笔记

    一 数据库系统概论 学习知识点 1 数据管理计算的产生和发展 2 关系型数据库中常用概念 3 结构化查询语音SQL简介 1 数据管理计算的产生和发展 应用程序通过数据库管理系统与数据库进行数据交互 xff08 插入 更新 删除数据 检索数据

随机推荐

  • "NetVLAD"场景识别模型解读

    c论文 xff1a NetVLAD CNN architecture for weakly supervised place recognition 来源 xff1a CVPR 2016 应用 xff1a NetVLAD是一种场景识别算法
  • 装饰器-带参数的装饰器动态传值

    带参数的装饰器动态传值 文章目录 带参数的装饰器动态传值装饰器实现的简单实现装饰器参数动态传入值把装饰器实例方法 改成静态方法装饰器函数写类的外面总结一下 有一个函数 xff0c 返回字符串类型 xff0c 现在需要在这个 字符串上添加链接
  • C#的实现FTP传送文件

    简介 xff1a 接上文实现对FTP的传送文件 xff0c 此文和上文可以说是如出一辙 xff0c 不过此文是通过cmd进行建立连接的 xff0c 建立连接后也是通过以下几个步骤实现操作 建立文件的层级结构如上文 xff0c 这里就不啰嗦了
  • x210v3开发板u-boot-2012.10移植之六---系统时钟初始化

    疯雨 版权所有 xff0c 转载请注明 http blog csdn net u010346967 欢迎加入 朱老师物联网大课堂qq群 一起学习进步 群号 xff1a 397164505 此系列的文章前提 xff1a 熟悉uboot启动流程
  • 安卓手机投屏到win10电脑

    PC端操作 手机端操作 xff08 Mi6为例 xff09 pc端弹出提示 xff0c 选择是
  • 一种解决按键开关电平毛刺问题的算法

    一种解决按键开关电平毛刺问题的算法 通过检测按键开关的相应管脚电平状态来判断按键是否按下 xff0c 按键未按下时 xff0c 对应管脚电平的为高 xff0c 按下之后对应管脚电平变为低电平 xff0c 松开之后 xff0c 回复高电平 x
  • 华为鸿蒙系统:基于微内核的全场景分布式OS

    华为鸿蒙系统 xff1a 基于微内核的全场景分布式OS 1 分布式架构首次用于终端OS xff0c 实现跨终端无缝协同体验 2 确定时延引擎和高性能IPC技术实现系统天生流畅 3 基于微内核架构重塑终端设备可信安全 4 通过统一IDE支撑一
  • STM32 通用GPIO模拟I2C实现

    STM32 通用GPIO模拟I2C实现 通用GPIO模拟I2C通信实现样例 1 GPIO初始化 ifdef HW I2C1 硬件I2C初始化 PA8 I2C1 SCL GPIO StructInit amp GPIO InitStructu
  • STM32 定时器实现样例

    STM32 定时器实现样例 1 定时器的初始化2 中断使能和中断优先级设置 1 定时器的初始化 void Tim5 init void TIM TimeBaseInitTypeDef TIM5 TimeBaseStructure NVIC
  • SVN服务器端口号(80)被占用导致无法访问的解决方案

    SVN服务器端口号被占用导致无法访问的解决方案 1 问题现象描述2 解决方法 1 问题现象描述 1 xff09 SVN show log 命令提示如下 xff1a 2 xff09 SVN commit代码时提示 xff1a 以一种访问权限不
  • 电磁波谱和光纤通信使用频段

    电磁波谱和光纤通信使用频段
  • STM32复位类型及判断方法

    STM32复位类型及判断方法 一 系统复位 xff1a 二 电源复位三 备份域复位四 复位的标志位五 复位标志位检索 判断什么原因导致的复位六 STM32软件复位方法 转载连接 xff1a https www cnblogs com per
  • C波段 波长和中心频率对应表

    C波段 波长和中心频率对应表
  • [译]badblocks指令

    原贴 http www linuxfly org post 192 htm 14 12月 译 badblocks指令 大 中 小 2007 12 14 16 40 分类 基础知识 系统命令 by linuxing 硬盘是一个损耗设备 xff
  • SecureCRT 脚本示例

    SecureCRT 脚本示例 language 61 34 VBScript 34 interface 61 34 1 0 34 crt Screen Synchronous 61 True 39 This automatically ge
  • rdesktop使用参数解析

    我自己使用的参数 xff1a rdesktop f z a 16 g workarea x modem u wangkai p wangkai r clipboard PRIMARYCLIPBOARD r disk MyDisk 61 va
  • linux-011中休眠函数以及唤醒函数的分析(sleep_on,wake_up)

    先看一下代码 xff1a void sleep on struct task struct p struct task struct tmp if p return if current 61 61 amp init task task p
  • ubuntu无法打开terminal

    在编译openjdk源码的时候 xff0c 将语言设置为LANG 61 c 关机之后再开机就无法打开terminal 无论采用哪种方式 后来到网上查找答案 xff0c 解决方法如下 1 ctrl 43 alt 43 F1 进入命令行模式 之
  • 51单片机三线串行驱动12864液晶

    以前写12864的液晶程序都是用的并行的方式 xff0c 这种方式焊接起来很麻烦 xff0c 而且占用的IO口比较多 今天尝试使用串行方式来驱动该模块 本程序是基于STC89C52的12864串行模式的程序 xff0c 硬件电路连接只需要5
  • 基于形状的模板匹配

    前段时间一直在做图像模板匹配 需要对旋转模板进行匹配 xff0c 并且对速度精度都有较高的要求 OpenCV里面并没有较好的解决方法 cvMatchTemplate const CvArr image constCvArr templ Cv