Halcon 模板匹配基于相关性

文章目录

  • 基于相关性
  • 使用匹配助手

基于相关性

适用场景

模板匹配:当你需要在图像中找到一个已知的模板时,例如在工业生产线上检测产品的特定标识或零件的特征时,相关性匹配是一种简单而有效的方法。

实时应用:相关性匹配通常具有较快的计算速度,因此适合用于实时应用,比如机器人视觉、自动驾驶中的目标检测等场景。

光照变化较小:相关性匹配对光照变化不敏感,因此在光照变化相对较小的场景下,它的匹配效果会更好。

少量变形:当物体存在轻微的旋转、缩放或畸变时,相关性匹配通常能够保持较好的匹配性能。

创建匹配模板

+ create_ncc_model( Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID )
Template(in):单通道图像,它的区域可被创建为模板
NumLevels(in):金字塔的最大层级
AngleStart(in):模板的最小旋转
AngleExtent(in):旋转角度范围
AngleStep(in):角度步长
Metric(in):匹配标准
ModelID(out):模板句柄

查找模板

+ find_ncc_model( Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score )
Image(in):单通道图像,它的区域可被创建为模板
ModelID(in):模板句柄
AngleStart(in):模板的最小旋转
AngleExtent(in):旋转角度范围
MinScore(in):被找到的模板最小分数
NumMatches(in):被找到的模板个数
MaxOverlap(in):被找到的模板实例最大重叠部分
SubPixel(in):亚像素级别标志,true,false
NumLevels(in):金字塔层级数
Row(out):被找到的模板实例行坐标
Column(out):被找到的模板实例列坐标
Angle(out):被找到的模板实例的旋转角度
Score(out):被找到的模板实例的分数

清除模板

+ clear_ncc_model( : : ModelID : ) 句柄

在不同的曝光下模板匹配
在这里插入图片描述

* This example program shows how to use HALCON's correlation-based
* matching. In particular it demonstrates the robustness of this method against
* linear illumination changes.  The training is performed in an image with good
* illumination.  The matching is applied in images where the exposure time varies
* extremely from very short to very long.
read_image (Image, 'cap_exposure/cap_exposure_03')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_update_off ()
*绘制圆
gen_circle (Circle, 246, 336, 150)
*获取区域圆点坐标
area_center (Circle, Area, RowRef, ColumnRef)
*裁剪图片
reduce_domain (Image, Circle, ImageReduced)
*创建匹配模板
create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID)
dev_set_draw ('margin')
dev_display (Image)
dev_set_color ('yellow')
dev_display (Circle)
disp_message (WindowHandle, 'Trained NCC model', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
Rows := []
Cols := []
for J := 1 to 10 by 1
    read_image (Image, 'cap_exposure/cap_exposure_' + J$'02')
    find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)
    Rows := [Rows,Row]
    Cols := [Cols,Column]
    dev_display (Image)
    *显示匹配结果
    dev_display_ncc_matching_results (ModelID, 'green', Row, Column, Angle, 0)
    disp_message (WindowHandle, 'Found NCC model', 'window', 12, 12, 'black', 'true')
    if (J < 10)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor
* Compute the standard deviation of the found positions.  If the individual
* positions in Rows and Cols are examined, it can be seen that the standard
* deviation is caused mainly by the last four images, which are severely
* overexposed.
StdDevRows := deviation(Rows)
StdDevCols := deviation(Cols)

在这里插入图片描述

获取模板参数

+ determine_ncc_model_params(Template : : NumLevels, AngleStart, AngleExtent, Metric, Parameters : ParameterName, ParameterValue)
NumLevels:金字塔的最大层级,层数越多搜索的越快,可设为“auto”或010的整数。设置“auto”或0时create_ncc_model自动
AngleStart:模板旋转的起始角度(弧度)
AngleExtent:模板旋转角度范围 >=0
Metric:匹配标准 ‘use_polarity’ 使用全局,如果图像对比度不好,可用忽略全局’ignore_global_polarity’。'use_polarity'目标和背景的灰度关系保持模板和要匹配的区域灰度关系相同。 ‘ ignore_global_polarity ’对比度完全逆转也就是物体比背景颜色深也可以找到他Parameters:'all'/'num_levels'/'angle_step'  确定参数

控制输出参数:
                ParameterName:Parameters中选择的参数
                ParameterValue:Parameters中选择参数的具体值

在这里插入图片描述

* This example program shows how to use HALCON's
* operator determine_ncc_model_params to determine
* the parameters for a correlation-based matching.
* 
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
for Index := 1 to 3 by 1
    if (Index == 1)
        read_image (Image, 'smd/smd_on_chip_05')
        gen_rectangle1 (Rectangle, 180, 180, 430, 450)
    elseif (Index == 2)
        read_image (Image, 'fabrik')
        gen_rectangle1 (Rectangle, 335, 275, 420, 355)
    elseif (Index == 3)
        read_image (Image, 'mreut')
        gen_rectangle1 (Rectangle, 110, 195, 185, 275)
    endif
    dev_resize_window_fit_image (Image, 0, 0, -1, -1)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    dev_display (Image)
    dev_set_draw ('margin')
    dev_set_line_width (2)
    dev_set_color ('green')
    dev_display (Rectangle)
    reduce_domain (Image, Rectangle, ImageReduced)
    determine_ncc_model_params (ImageReduced, 'auto', -0.39, 0.79, 'use_polarity', 'all', ParameterName, ParameterValue)
    Message := 'NCC model parameters:'
    for I := 0 to |ParameterName| - 1 by 1
        Message[I + 1] := ParameterName[I] + ': ' + ParameterValue[I]
    endfor
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    if (Index < 3)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor
dev_update_on ()

使用匹配助手

选中助手
在这里插入图片描述打开Halcon 自带文件C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/barcode/gs1databar_limited/gs1databar_limited_01.png
在这里插入图片描述选中要匹配的区域
在这里插入图片描述选中基于互相关创建好模板
在这里插入图片描述参数对应create算子
在这里插入图片描述应用对应find算子
在这里插入图片描述加载另一张图片
在这里插入图片描述> 查找模板
在这里插入图片描述点击插入代码
在这里插入图片描述
在这里插入图片描述

* 
* Matching 03: ************************************************
* Matching 03: BEGIN of generated code for model initialization
* Matching 03: ************************************************
* 
* Matching 03: Obtain the model image
read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/boxes/cardboard_boxes_01.png')
* 
* Matching 03: Build the ROI from basic regions
gen_rectangle2 (ModelRegion, 382.938, 520.5, rad(128.186), 236.162, 193.603)
* 
* Matching 03: Reduce the model template
reduce_domain (Image, ModelRegion, TemplateImage)
* 
* Matching 03: Create the correlation model
create_ncc_model (TemplateImage, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
* 
* Matching 03: Get the reference position
area_center (ModelRegion, ModelRegionArea, RefRow, RefColumn)
* 
* Matching 03: Display the model region
dev_display (Image)
dev_set_color ('green')
dev_set_draw ('margin')
dev_display (ModelRegion)
gen_cross_contour_xld (TransContours, RefRow, RefColumn, 20, 0.0)
dev_display (TransContours)
stop ()
* 
* Matching 03: END of generated code for model initialization
* Matching 03:  * * * * * * * * * * * * * * * * * * * * * * *
* Matching 03: BEGIN of generated code for model application
* 
* Matching 03: Loop over all specified test images
TestImages := ['C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/boxes/cardboard_boxes_03.png']
for T := 0 to 0 by 1
    * 
    * Matching 03: Obtain the test image
    read_image (Image, TestImages[T])
    * 
    * Matching 03: Find the model
    find_ncc_model (Image, ModelID, rad(0), rad(360), 0.8, 0, 0.5, 'true', 0, Row, Column, Angle, Score)
    * 
    * Matching 03: Display the centers of the matches in the detected positions
    dev_display (Image)
    for I := 0 to |Score| - 1 by 1
        * Matching 03: Display the center of the match
        gen_cross_contour_xld (TransContours, Row[I], Column[I], 20, Angle)
        dev_set_color ('green')
        dev_display (TransContours)
        hom_mat2d_identity (AlignmentHomMat2D)
        hom_mat2d_translate (AlignmentHomMat2D, -RefRow, -RefColumn, AlignmentHomMat2D)
        hom_mat2d_rotate (AlignmentHomMat2D, Angle[I], 0, 0, AlignmentHomMat2D)
        hom_mat2d_translate (AlignmentHomMat2D, Row[I], Column[I], AlignmentHomMat2D)
        * Matching 03: Display the aligned model region
        affine_trans_region (ModelRegion, RegionAffineTrans, AlignmentHomMat2D, 'nearest_neighbor')
        dev_display (RegionAffineTrans)
        * Matching 03: Insert your code using the alignment here, e.g. code generated by
        * Matching 03: the measure assistant with the code generation option
        * Matching 03: 'Alignment Method' set to 'Affine Transformation'.
        stop ()
    endfor
endfor
* 
* Matching 03: *******************************************
* Matching 03: END of generated code for model application
* Matching 03: *******************************************
* 

手写案例

手写案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<软考高项备考>《论文专题 - 8 论文的项目背景之背景段的写法》

1 背景特征 比较好的背景特征&#xff1a; 语句通顺&#xff0c;简洁明了逻辑清晰、层次分明&#xff08;建议分1段-2段描写)项目内容描写清楚&#xff0c;和规模相符合&#xff08;从你写的项目内容和业务描述上&#xff0c;能够勾勒出项目的原型图)技术新颖、路线清晰、描写…

我的隐私计算学习——匿踪查询

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具&#xff0c;经由自己阅读后整理而成。 &#xff08;一&#xff09;PIR的介绍 ​ 匿踪查询&#xff0c;即隐私信息检索&#xff08;Private InformationRetrieval&#xff0c;PIR&#xff09;&#xff0c;是安全多方计算…

Epicypher:CUTANA™ E. coli Spike-in DNA

来源于Escherichia coli&#xff08;E.coli&#xff09;的片段DNA可以用作核酸酶靶向切割和释放&#xff08;CUT&RUN&#xff09;的实验标准化的spike-in对照。产品CUTANA™ E. coli Spike-in DNA含有足够的材料&#xff0c;可用于100-200个CUT&RUN样本&#xff08;高丰…

Linux系统编程总结:进程间通信之网络编程

这一块内容放在进程间通信也没有问题&#xff0c;因为进程间通信研究的就是进程之间如何进行协同操作、如何交换数据进行对话的过程&#xff0c;上一篇文章介绍的几种机制都是用在一台机器上的进程互相进行通信的&#xff0c;而网络套接字这种机制则是用来为两台不同机器上的进…

使用apriori来挖掘关联规则

1、apriori最重要的三个概念&#xff1a; 1、支持度 支持度 (Support)&#xff1a;指某个商品组合出现的次数与总订单数之间的比例。 在这个例子中&#xff0c;我们可以看到“牛奶”出现了 4 次&#xff0c;那么这 5 笔订单中“牛奶”的支持度就是 4/50.8。 2、置信度 置信度…

Win10错误代码0x80070005的解决方法

在Win10电脑操作过程中&#xff0c;用户可能会遇到各种各样的问题&#xff0c;从而影响到自己正常使用电脑办公。现在&#xff0c;就有用户遇到了错误码0x80070005的提示&#xff0c;但不清楚具体的解决方法。下面小编给大家分享不同的解决方法&#xff0c;解决后Win10电脑就能…

IP属地变化背后的原因

随着互联网的普及和技术的不断发展&#xff0c;IP属地变化的现象越来越受到人们的关注。近日&#xff0c;有网友发现自己的IP属地发生了变化&#xff0c;引发了广泛讨论。那么&#xff0c;IP属地为什么会发生变化呢&#xff1f; 首先&#xff0c;网络环境的变化是导致IP属地变化…

如何设置自动通过好友申请+自动回复?

1. 提供即时服务 当用户发送微信消息时&#xff0c;微信可以自动回复相应的内容&#xff0c;如欢迎语、订单确认、问题解答等&#xff0c;提供即时服务&#xff0c;不需要用户等待或反复发送消息。这种自动回复可以在特定的时间内自动通过好友请求&#xff0c;发送预先设置的…

PFA气体吸收瓶耐强酸PFA洗气瓶PFA鼓泡瓶特点分析

洗气瓶的别称有多种&#xff0c;取决于不同的地区和行业。以下是一些常见的别称&#xff1a; 1. 清洗瓶&#xff1a;因其主要用途是清洗气体样品而得名。 2. 干燥瓶&#xff1a;用于干燥气体样品的容器。 3. 气体净化瓶&#xff1a;用于净化气体样品的设备。 4. 气体清洗器…

性能测试 —— 认识 jmeter (性能测试流程 性能测试通过标准)

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 1 性能测试技能树   性能测试是一项综合性的工作&#xff0c;致力于暴露性能问题&#xff0c;评估系统性能趋势。性能测试工作实质上是利用工具去模拟大量用户来验证系统…

docker-harbor的私有仓库

仓库 保存镜像 私有&#xff0c;自定义用户的形式登录仓库&#xff0c;拉取或者上传镜像&#xff08;内部管理的用户&#xff09; harbor:VMware公司开发的&#xff0c;开源的企业级的docker registry项目 帮助用户快速的搭建一个企业级的docker仓库的服务 支持中文 harbor…

磁盘空间分析工具你知道几个!8个易学易用的磁盘分析工具,让你对硬盘知根知底

以下是我对可用磁盘空间分析工具(有时称为存储分析器)的首选列表。在我的电脑上试用了其中几个应用程序后,我可以确认这里列出的应用程序是100%免费使用的,并且在弄清楚是什么填满了硬盘、闪存驱动器或外部驱动器中做了很多工作,其中一些甚至允许你直接从程序中删除文件。…

曹操出行集成:无代码API连接广告推广与用户运营

曹操出行集成的必要性 随着科技的不断进步&#xff0c;无代码API集成已经成为企业提升效率、优化营销策略的重要手段。对于新能源汽车共享服务领导者曹操出行而言&#xff0c;将其服务集成至企业营销系统中&#xff0c;不仅可以提升客户体验&#xff0c;还能加强品牌的市场竞争…

智慧工地防盗新手段:TSINGSEE青犀工地智能监控防盗系统方案

工地监控大家都很了解&#xff0c;主要是利用视频监控摄像头全方位无死角地对工地场所进行监控&#xff0c;并在汇聚平台&#xff08;如&#xff1a;安防监控系统EasyCVR平台&#xff09;上进行统一汇聚与分发。不过随着科技的发展&#xff0c;智能视频监控在工地监管方面又有了…

2023iEnglish学习成长营结营 助力自主阅读习惯养成

iEnglish智能英语学习解决方案日前消息,2023年最新一期的365天和1000天“iEnglish学习成长营”顺利结营。据悉,截至今年12月,完成365天和1000天每天坚持不低于30分钟的英语原版阅读人数分别累计突破15万人和2万人。而当前,21天、100天、365天以及1000天四种不同目标和意义的iEn…

Service Intelligence重磅来袭!AI驱动服务云更智能

11月中旬&#xff0c;Salesforce宣布推出了Service Intelligence &#xff0c;这是一款适用于Service Cloud的全新分析应用程序&#xff0c;旨在提高座席工作效率、削减成本并提高客户满意度。 Service Intelligence由Salesforce的实时超大规模数据引擎Data Cloud提供支持&am…

【设计模式--行为型--状态模式】

设计模式--行为型--状态模式 状态模式定义结构案例优缺点使用场景 状态模式 定义 对有状态的对象&#xff0c;把复杂的判断逻辑提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 结构 环境角色&#xff08;Context&#xff09;&#xff…

定位某个类是在哪个JAR的什么版本开始出现的

背景 我们在依赖第三方JAR时&#xff0c;同时也会间接的依赖第三方JAR引用的依赖&#xff0c;而当我们项目中某个依赖的版本与第三方JAR依赖的版本不一致时&#xff0c;可能会导致第三方JAR的在运行时无法找到某些方法或类&#xff0c;从而无法正常使用。 如我正在开发的一个…

华为配置策略路由(基于IP地址)示例

组网需求 如图1所示&#xff0c;汇聚层Switch做三层转发设备&#xff0c;接入层设备LSW做用户网关&#xff0c;接入层LSW和汇聚层Switch之间路由可达。汇聚层Switch通过两条链路连接到两个核心路由器上&#xff0c;一条是高速链路&#xff0c;网关为10.1.20.1/24&#xff1b;另…

YOLOv8使用SAHI切片辅助推理:《SAHI切片辅助推理解析》推理教程(附推理源代码)

💡该教程为改进RT-DETR指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 YOLOv8使用SAHI切片辅助推理:《SAHI切片辅助推理解析》推理教程(附推理源代码…