在机器视觉应用中,经常需要对图像进行仿射变换。

1、在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移、旋转、缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图像。

2、要进行仿射变换,必须先获取变换矩阵,形状匹配是获取变换矩阵的一种高效的方法。

3、Halcon的如下几个函数是专门用于计算变换矩阵的:

vector_angle_to_rigid :Compute a rigid affine transformation from points and angles.

vector_to_rigid :Approximate a rigid affine transformation from point correspondences.

vector_to_similarity :Approximate an similarity transformation from point correspondences.

vector_to_hom_mat2d :Approximate an affine transformation from point correspondences.

4、Halcon中用于形状匹配的函数有:

find_shape_model :Find the best matches of a shape model in an image.

find_shape_models :Find the best matches of multiple shape models.

find_scaled_shape_model :Find the best matches of a scale invariant shape model in an image.

find_scaled_shape_models :Find the best matches of multiple scale invariant shape models.

5、单匹配计算刚性变换矩阵:vector_angle_to_rigid只需要一个点对及一个角度对即可计算刚性变换矩阵,所以可直接利用find_shape_model的结果,但精度可能稍低。

6、双匹配计算刚性变换矩阵:vector_to_rigid需要至少两个点对的支持,所以需要用两次find_shape_model或用一次find_shape_models,精度会比单匹配高,但仍局限于刚性变换。

7、双匹配计算相似变换矩阵:vector_to_similarity用于计算相似变换矩阵,需要至少两个点对的支持,所以需要用两次find_scaled_shape_model或用一次find_scaled_shape_models。

8、三匹配计算一般变换矩阵:vector_to_hom_mat2d用于计算一般的其次变换矩阵,需要至少三个点对的支持,所以需要用三次find_scaled_shape_model或用一次find_scaled_shape_models。

9、综上,在不同情况下,选用相应的变换矩阵类型、形状匹配方法,可以达到事半功倍的效果!

create_shape_model

创建模板,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10;Metric参数决定模板识别的条件,如果设为’use_polarity’,则图像中的物体和模板必须有相同的对比度;创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数;另外,还需要获得这个模板的轮廓,用于后面的匹配,get_shape_model_contours()则会很容易的帮我们找到模板的轮廓;

create_shape_model_xld

find_shape_model

它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的增大其值。

vector_angle_to_rigid

affine_trans_contour_xld

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

基于形状匹配的参数关系与优化

在HALCON的说明资料里讲到了这些参数的作用以及关系,在上面提到的文章中也作了介绍,这里主要是重复说明一下这些参数的作用,再强调一下它们影响匹配速度的程度;

在为了提高速度而设置参数之前,有必要找出那些在所有测试图像中匹配成功的设置,这时需考虑以下情况:

① 必须保证物体在图像边缘处截断,也就是保证轮廓的清晰,这些可以通过形态学的一些方法来处理;

② 如果Greediness值设的太高,就找不到其中一些可见物体,这时最后将其设为0来执行完全搜索;

③ 物体是否有封闭区域,如果要求物体在任何状态下都能被识别,则应减小MinScore值;

④ 判断在金字塔最高级上的匹配是否失败,可以通过find_shape_model()减小NumLevels值来测试;

⑤ 物体是否具有较低的对比度,如果要求物体在任何状态下都能被识别,则应减小MinContrast值;

⑥ 判断是否全局地或者局部地转化对比度极性,如果需要在任何状态下都能被识别,则应给参数Metric设置一个合适的值;

⑦ 物体是否与物体的其他实例重叠,如果需要在任何状态下都能识别物体,则应增加MaxOverlap值;

⑧ 判断是否在相同物体上找到多个匹配值,如果物体几乎是对称的,则需要控制旋转范围;

如何加快搜索匹配,需要在这些参数中进行合理的搭配,有以下方法可以参考:

①  只要匹配成功,则尽可能增加参数MinScore的值;

②  增加Greediness值直到匹配失败,同时在需要时减小MinScore值;

③  如果有可能,在创建模板时使用一个大的NumLevels,即将图像多分几个金字塔级;

④  限定允许的旋转范围和大小范围,在调用find_shape_model()时调整相应的参数;

⑤  尽量限定搜索ROI的区域;

除上面介绍的以外,在保证能够匹配的情况下,尽可能的增大Greediness的值,因为在后面的实验中,用模板匹配进行视频对象跟踪的过程中,这个值在很大程度上影响到匹配的速度。

当然这些方法都需要跟实际联系起来,不同图像在匹配过程中也会有不同的匹配效果,在具体到某些应用,不同的硬件设施也会对这个匹配算法提出新的要求,所以需要不断地去尝试。

halcon 相似度_halcon模板匹配相关推荐

  1. halcon学习笔记(14)——模板匹配

    halcon的模板匹配种类有很多种,方法各有优缺点,一般有基于灰度的匹配,基于形状的匹配等等,这里具体理论和方法不做详解,只简单总结一个实例.图像匹配一般需要对旋转放缩进行处理,另外为了提高搜索效率, ...

  2. HALCON基于形变的模板匹配实现

    基于形变的模板匹配 先看匹配结果: 下面是HALCON的代码,用匹配助手生成的,现在得到的就是模板上61个点的坐标,还有仿射矩阵,利用仿射矩阵可以算出61个点匹配上的像素坐标. * * Matchin ...

  3. 基于qt+halcon实现视觉定位模板匹配【附部分源码】

    文章目录 前言 演示视频 一.项目文件目录讲解 二.Qt Designer设置ui界面 1.CtuImageMatching.ui界面详解 2.CameraSetting.ui的设置 3.Calibr ...

  4. halcon知识:ncc_model模板匹配

    说明 除了常见的模板匹配之外,还有其它模板匹配,虽然不够主流,但尝试使用,也能解决许多问题.这里先说明ncc_model模板. 一.基于互相关匹配 一种基于灰度值的方法是基于相关的匹配.这种方法使用归 ...

  5. halcon基于形状的模板匹配第三例:rectify_result.hdev

    这个例子其实是在比较两种ROI"还原"的方式: 模板匹配后,获得仿射变换矩阵T,则对于ROI的分析有两种: 1.全局的,将T.inv()*Img_target得到目标图片全局还原后 ...

  6. Halcon学习笔记之模板匹配-基于形状的多模板匹配

    基于形状的模板匹配在我们实际的项目中应用最广,同时在一些项目中,光是选中一个目标作为匹配的模板,效果可能还达不到我们所需要达到的要求或者我们所需要检测的目标存在多个特征需要去判别,所以这个时候可以考虑 ...

  7. halcon 相似度_Halcon分类函数,shape模型

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化::: 用符号"**&quo ...

  8. HALCON 模板匹配的总结

    学习和掌握Halcon是如何进行模板匹配的.主要包括基于形状的模板匹配,基于相关性的模板匹配,基于组件的模板匹配,基于局部形变的模板匹配,以及基于描述符的模板匹配. HALCON提供的基于形状匹配的算 ...

  9. halcon窗体的移动和缩放_Halcon hWindowControl 鼠标缩放平移区域模板匹配绘制

    如题所示标题,想同时表达两个意思:1:缩放平移绘制区域,2:创建模板匹配区域并保存.被一个技术问题卡住折腾了近大半天时间+熬夜2个小时,经过不懈努力,反复验证各参数意义,找到了问题的原因,终于攻克难题 ...

最新文章

  1. 2021年大数据基础(一):大数据概念
  2. SAP SD基础知识之特殊的业务交易
  3. 【发现】Warcraft III v1.22 不用正版CDKey上Battle.net 续篇
  4. 在C#代码中应用Log4Net(一)简单使用Log4Net
  5. foreach php,详解PHP中foreach的用法和实例
  6. python创建csv文件并写入-Python 将数据写入文件(txt、csv、excel)
  7. 标准库 - 输入输出处理(input and output facilities) lua
  8. 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
  9. BP的matlab实现
  10. Android 4.0 ICS SystemUI浅析——SystemUI启动流程
  11. 速修复!NSA 报告四个严重和高危 Exchange Server RCE 漏洞
  12. 用php实现下载生成某链接的快捷方式
  13. Android开发中Ant命令编译和APK签名的一些心得
  14. PHP比较两个时间戳相差天时分秒
  15. 提取excel表数据成json格式的以及对图片重命名
  16. linux shell学习指南,shell脚本学习指南(shell脚本教程详细讲解) 电子扫描版
  17. Arduino学习(一)蓝牙模板之JDY-16 BLE(1)
  18. java ftp下载文件夹下的所有文件_ftp下载文件夹下的文件,从ftp下载某一文件夹下的所有文件...
  19. 拟物设计和Angular的实现 - Material Design
  20. oracle用户LOCKED(TIMED)原因及解决

热门文章

  1. canvas画布变换画六芒星
  2. 几个方法,教你PDF转换成图片怎么做?
  3. 电脑开机内存占用超50%如何解决
  4. 今天给大家介绍一篇基基于SSM超市管理系统的设计与实现
  5. C# 利用Dockmanager工具使窗体显示和隐藏
  6. 如何彻底删除软件的 Icloud 数据(Mac / iOS)
  7. sql多表联查,索引
  8. 电信业资深人士Ken Corcoran加入Comviva咨询委员会
  9. 第三章 jQuery
  10. GeoTools读取shp文件中文乱码解决方案汇总