Halcon基于局部形变的模板匹配

2024-01-25 00:12

本文主要是介绍Halcon基于局部形变的模板匹配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Halcon基于局部形变的模板匹配

基于局部形变的模板匹配与基于形状的模板匹配的相似之处是,二者都是通过检测目标的形状轮廓进行匹配的;不同之处在于,前者的匹配过程可以接受轻微的形变,其匹配步骤如下。
(1)准备模板。在创建模板之前,先读取输入图像,选择要检测的目标选区。选择时要注意选取包含目标的典型结构,也可以适当包含目标区域以外的邻域像素,然后将得到的参考图像转化为单通道的灰度图像。
(2)创建基于局部形变的匹配模型。创建模型的方式有两种,一种是使用create_local_deformable_model算子,从模板图像中创建模型;另一种是根据目标的XLD轮廓创建,使用create_local_deformable_model_xld算子。两种方式的输入不同,但是大部分参数都相同。
如果想使用自动参数,除了把参数值设为auto以外,还可以使用determine_deformable_model params 算子获取推荐的参数,然后根据实际匹配效果决定是否需要修改这些参数。如果要调整与金字塔层级相关的参数,也可以使用inspect _shape_model算子查看不同层级的金字塔图像效果,这一点与基于形状的模板匹配类似。
如果想获取原图的轮廓以便以后与形变对比,可以使用get_deformable_model_contours算子。
(3)搜索目标。模型创建好以后,首先确定输入的图像是单通道灰度图像,然后使用find_loacal_deformable_model算子进行匹配。它将返回目标的位置和分数,以及形变的轮廓等信息。该算子的参数与另外几种匹配算法类似,可以通过调整匹配参数来提升匹配的效率。
(4)优化匹配过程。如果一次匹配的效果不理想,可以通过调整匹配参数来优化匹配的结果。例如,修改搜索空间、限制图像金字塔的层级等。
(5)清除模型。匹配结束后,使用clear_deformable_model算子将模板清除,并释放内存资源。在获得基于形变的模板匹配对象之后,将获得对象的坐标、匹配分数,但是不会返回旋转角度、缩放系数等参数。
根据ResultType的定义,将返回一些参数用于校正图像,以及获取形变的轮廓等。其代码如下:

dev_close_window ()
*读取参考图像,这里读取的是单通道灰度图像	
*这里的参考图像是已经剪裁好的感兴趣区域图像,可以直接作为模板图像
read_image (ModelImage, 'data/creamlabel')
*设置显示窗口参数
dev_open_window_fit_image (ModelImage, 0, 0, -1, -1, WindowHandle)
*创建局部形变模板,返回局部形变模板句柄ModelID
create_local_deformable_model (ModelImage, 'auto', rad(-15), rad(30), 'auto', 1, 1, 'auto', 1, 1, 'auto', 'none', 'use_polarity', [40,60], 'auto', [], [], ModelID)
*获取局部形变模板的轮廓
get_deformable_model_contours (ModelContours, ModelID, 1)
*为了将模板轮廓可视化显示,需要将轮廓与图像实物对应起来
*因此出于可视化显示的目的,先获取模板图像的几何中心
area_center (ModelImage, Area, Row, Column)
*进行仿射变换
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate)
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2DTranslate)
*设置轮廓显示的线条参数,显示模板图像与轮廓
dev_set_line_width (2)
dev_display (ModelImage)
dev_display (ContoursAffinTrans)
stop ()
*读取测试图像,这里的图像中更包含模板图像,并且有一定的形变
read_image (DeformedImage, 'data/cream')
*显示用于测试的局部形变图像
dev_resize_window_fit_image (DeformedImage, 0, 0, -1, -1)
dev_display (DeformedImage)
*进行局部形变模板匹配
find_local_deformable_model (DeformedImage, ImageRectified, VectorField, DeformedContours, ModelID, rad(-14), rad(28), 0.9, 1, 0.9, 1, 0.78, 0, 0, 0, 0.7, ['image_rectified','vector_field','deformed_contours'], ['deformation_smoothness','expand_border','subpixel'], [18,0,0], Score, Row, Column)
*显示形变轮廓
dev_display (DeformedImage)
dev_set_line_width (2)
dev_set_color ('red')
dev_display (DeformedContours)
stop()
*匹配结束,释放模板资源
clear_deformable_model (ModelID)

这篇关于Halcon基于局部形变的模板匹配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641495

相关文章

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col