Halcon 模板匹配基于相关性

news2024/9/27 15:28:07

文章目录

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

基于相关性

适用场景

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

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

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

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

创建匹配模板

+ 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: *******************************************
* 

手写案例

手写案例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

scratch认识图形 2023年12月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch认识图形 一、题目要求 1、准备工作 2、功能实现 二、案例分析

(0-1)分布

假设离散型随机变量X只可能取到0、1两个值&#xff0c;它的分布律为&#xff1a; &#xff0c;其中&#xff0c; 那么称X服从参数为p的0-1分布&#xff0c;也叫两点分布。 其实上面公式就是将下面两个式子写在一起&#xff1a;

【RTOS学习】任务创建 | 任务启动 | 任务切换 | 任务暂停和恢复 | 任务阻塞和唤醒 | 临界资源保护

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f30f;任务创建&#x1f9ed;TCB和栈&#x1f9ed;伪造现场&#x1f9ed;链表操作 &am…

solidity 特性导致的漏洞

目录 1、默认可见性 2、浮点数精度缺失 3、错误的构造函数 4、自毁函数 5、未初始化指针-状态变量覆盖 1、默认可见性 Solidity 的函数和状态变量有四种可见性&#xff1a;external、public、internal、private。函数可见性默认为 public&#xff0c;状态变量可见性默认为…

51单片机控制1602LCD显示屏输出自定义字符二

51单片机控制1602LCD显示屏输出自定义字符二 1.概述 1602LCD除了内置的字符外还提供自定义字符功能&#xff0c;当内置的字符中没有我们想要输出的字符时&#xff0c;我们就可以自己创造字符让他显示&#xff0c;下面介绍1602如何创建自定义字符。 2.1602LCD创建字符原理 自…

2023 re:Invent使用 PartyRock 和 Amazon Bedrock 安全高效构建 AI 应用程序

前言 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 “Your Data, Your AI, Your Future.&#xff08;你的数据&#xff0c;你的AI&…

利用Microsoft Visual Studio Installer Projects打包安装包

利用Microsoft Visual Studio Installer Projects打包安装包 具体步骤步骤1&#xff1a;安装扩展步骤2&#xff1a;创建 Setup 项目步骤3&#xff1a;设置属性步骤4&#xff1a;添加输出步骤5&#xff1a;添加文件步骤6&#xff1a;添加桌面快捷方式步骤7&#xff1a;添加菜单快…

使用Pytorch从零开始构建StyleGAN

本文介绍的是当今最好的 GAN 之一&#xff0c;来自论文《A Style-Based Generator Architecture for Generative Adversarial Networks》的 StyleGAN &#xff0c;我们将使用 PyTorch 对其进行干净、简单且可读的实现&#xff0c;并尝试尽可能接近原始论文。 如果您没有阅读过…

如何实现电脑文件夹自动备份?以下是图解教程

在当今迅猛发展的科技时代&#xff0c;电脑已经成为不可或缺的办公工具。随着使用时间的增加&#xff0c;存储在电脑中的文件数量也逐渐增多。然而&#xff0c;由于设备故障、手动误删等原因&#xff0c;文件的丢失问题成为一个不可忽视的风险。如果丢失的文件具有重要性&#…

文字转语音自动合成系统源码:让你的语音自动转成文字 附带完整的搭建教程

人工智能技术的不断发展&#xff0c;语音识别和自然语言处理技术已经逐渐成熟。文字转语音自动合成系统就是结合了这两项技术&#xff0c;将文字信息转化为语音输出&#xff0c;为用户提供更加便捷、高效的信息获取方式。这种系统在语音助手、智能客服、教育学习等领域有着广泛…

54 代码审计-TP5框架审计写法分析及代码追踪

目录 知识点1知识点2演示案例:demo代码段自写和规则写分析hsycms-TP框架-不安全写法-未过滤weipan21-TP框架-规则写法-内置过滤 知识点1 调试&#xff0c;访问&#xff0c;路由&#xff0c;配置&#xff0c;版本等 知识点2 自写写法&#xff1a;自己写代码&#xff0c;一步步…

PyQt6 简单介绍与安装

前文&#xff0c;参考文章&#xff1a; 参考文章一 参考文章二 PyQt6 简单介绍与安装 1、简单介绍2、PyQt6安装3、PyQt6版本查看4、PyQt6模块4.1 界面承载部分( 控件 )4.2 界面框架部分&#xff08;布局&#xff09;4.3 界面组件部分&#xff08;其实也是Widget类&#xff0…

Json数据报文解析-Gson库-JsonObject类-JsonParse类-JsonArray类

一、前言 本文我们将介绍如何解析Json数据&#xff0c;主要通过Gson库中的相关类来实现。 二、详细步骤 首先&#xff0c;我们要拿到一个基础的Json数据&#xff0c;这里将以下面的Json数据作为示例&#xff1a; {"code":"1","msg":"ok&q…

电脑监控软件丨老板的“管理神器”?员工的“噩梦伊始”?

不得不承认&#xff0c;老板们都很喜欢用电脑监控软件来管控员工的工作情况。但是面对这个话题&#xff0c;他们却又有不一样的感受。 老板的“管理神器”&#xff1f;——首先来说老板 不得不说&#xff0c;老板确实很喜欢用域之盾软件--电脑管控功能https://www.yuzhidun.cn…

mfc140u.dll丢失的解决方法的详细介绍,六种解决mfc140u.dll丢失的方法

今天的这篇文章将向各位分享一个有关电脑出现关于丢失mfc140u.dll错误的弹窗问题&#xff0c;这是一个很常见的问题。无论你是一名大学生还是其他身份&#xff0c;都可能会遇到这个问题。下面我会对mfc140u.dll丢失的解决方法进行详细的介绍。 一.六种解决mfc140u.dll丢失的方法…

浪潮信息大突破:全面开源1026亿参数模型源2.0

近日&#xff0c;浪潮信息发布了一项重大成就&#xff0c;宣布全面开源其1026亿参数的基础大模型——源2.0。该举措在AI产业界引起了广泛关注&#xff0c;被视为推动生成式人工智能产业快速发展的关键一步。 源2.0模型概览 源2.0是一个多参数级别的大模型&#xff0c;提供了1…

‘BLEUUID‘ does not name a type错误怎么解决?

摘要&#xff1a;arduino环境下对esp32蓝牙编程时会遇到BLEUUID does not name a type错误&#xff0c;本文介绍解决方法。 硬件设备是安信可ESP32-S模组。 错误发生在代码最开始的地方&#xff0c;include了一个蓝牙设备头文件&#xff0c;然后定义了UUID&#xff0c;注意看&a…

Conda 使用教程大全来啦

什么是 Conda&#xff1f; Conda 是一款功能强大的软件包管理器和环境管理器&#xff0c;您可以在 Windows 的 Anaconda 提示符或 macOS 或 Linux 的终端窗口中使用命令行命令 Conda 可以快速安装、运行和更新软件包及相关依赖项。Conda 可以在本地计算机上创建、保存、加载和…

人工智能改变医疗保健:人工智能如何革命医学

人工智能&#xff08;Artificial Intelligence, 简称AI&#xff09;的快速发展正逐渐改变着我们的生活方式和社会结构。在医疗保健领域&#xff0c;AI的应用不仅提供了更准确、高效的诊断和治疗手段&#xff0c;还为医生和患者之间的交流提供了新的途径。本文将探讨人工智能如何…

计算机组成原理-ATT格式vsIntel格式

文章目录 AT&T格式 vs lntel格式 x86汇编语言是lntel格式&#xff0c;还有一种汇编语言格式是AT&T AT&T格式 vs lntel格式 lntel格式中取主存地址内容未指明长度默认为32位&#xff0c;对应下图中第四行右边的指令 百分号 美元符号 小括号 可用于计算机结构体数组…