halcon模板匹配干扰边缘消除办法(最硬核方式)

目录

  • halcon手绘形状匹配模板
    • 手绘形状匹配模板
    • 主要算子解析
        • draw_nurbs 绘制平滑曲线
          • 参数解释
        • create_shape_model_xld 使用XLD轮廓创建模板
          • 参数解释
    • 实例演示与解析
        • 实例代码展示与解析
        • 运行过程与处理展示
            • 读入图像
            • 绘制模板
            • 使用绘制的XLD创建模板
            • 查找模板

  • 博主写作不容易,还是需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

最近做了个项目,遇到一个问题,就是在创建形状匹配模板时候,干扰太多,像麻绳一样。

使用自定义区域去消除吧,因为轮廓长,边缘干扰距离近,操作起来不方便;
使用CAD图形创建模板吧,又因为产品随意性比较强,每次换产品都要从新画模板。

最终决定使用手绘模板的方式解决这个问题。

halcon手绘形状匹配模板

手绘形状匹配模板

为了避免大家产生理解歧义,这里对手绘形状匹配模板做一个解释。
所谓手绘形状匹配模板,就是在图像上画XLD轮廓,将这个XLD轮廓作为形状匹配模板。这样模板就由我们手绘而成,我们想让模板长什么样,就把模板画成什么样。

主要算子解析

draw_nurbs 绘制平滑曲线

draw_nurbs — 界面交互式绘制平滑曲线

draw_nurbs( : ContOut : WindowHandle, Rotate, Move, Scale, KeepRatio, Degree : Rows, Cols, Weights)

我们一般使用时参数设置如下:
draw_nurbs (ContOut1, WindowHandle, ‘true’, ‘true’, ‘true’, ‘true’, 3, Rows, Cols, Weights)

参数解释

ContOut(output_object)xld_cont→对象
与手绘轮廓近似的NURBS曲线。
WindowHandle(input_control)窗口→(整数)
窗口句柄。
Rotate(input_control)字符串→(string)
旋转使能,轮廓交互时可以旋转
默认值:“ true”
值列表:“ false”,“ true”
Move (input_control)字符串→(string)
移动使能,轮廓交互时可以使能
默认值:“ true”
值列表:“ false”,“ true”
Scale(input_control)字符串→(string)
缩放使能,轮廓交互时可以缩放
默认值:“ true”
值列表:“ false”,“ true”
KeepRatio(input_control)字符串→(string)
缩放时是否保持比例,是否等比例缩放
默认值:“ true”
值列表:“ false”,“ true”
Degree(input_control)整数→(整数)
NURBS曲线的曲度。合理的值是3到25。
默认值:3
建议值:2、3、4、5
限制:Degree> = 2
Rows(output_control)坐标.y数组→(真实)
控件多边形的行坐标。
Cols(output_control)坐标.x数组→(实数)
控件多边形的列坐标。
Weights (output_control)实数数组→(实数)
权重向量。

create_shape_model_xld 使用XLD轮廓创建模板

create_shape_model_xld — 使用XLD轮廓创建模板

create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast : ModelID)

我们一般使用时参数设置如下:
create_shape_model_xld (Contours , ‘auto’,-rad(180), rad(360), ‘auto’, ‘auto’, ‘ignore_local_polarity’, 10, ModelID)

参数解释

Contours (input_object)xld_cont(-array)→对象
输入将用于创建模型的轮廓。
NumLevels(input_control)整数→(整数/字符串)
金字塔等级的最大数量。
默认值:“自动”
值列表:1、2、3、4、5、6、7、8、9、10,“自动”
AngleStart(input_control)angle.rad→(实数)
模板的起始角度。
默认值:-0.39
建议值:-3.14,-1.57,-0.79,-0.39,-0.20、0.0
AngleExtent(input_control)angle.rad→(实数)
模板旋转角度的范围。
默认值:0.79
建议值:6.29、3.14、1.57、0.79、0.39
限制:AngleExtent> = 0
AngleStep(input_control)angle.rad→(真实/字符串)
旋转角度的步长(分辨率)。
默认值:“自动”
建议值:“自动”,0.0175、0.0349、0.0524、0.0698、0.0873
限制:(AngleStep> 0)&&(AngleStep <=(pi / 16))
Optimization(input_control)字符串(-array)→(string)
一种优化,以及用于生成模型的可选方法。
默认值:“自动”
值列表:“ auto”,“ no_pregeneration”,“ none”,“ point_reduction_high”,“ point_reduction_low”,“ point_reduction_medium”,“ pregeneration”
Metric(input_control)字符串→(string)
匹配指标。
默认值:‘ignore_local_polarity’
值列表:‘ignore_color_polarity’,‘ignore_global_polarity’,‘ignore_local_polarity’,‘use_polarity’
MinContrast(input_control)编号→(整数)
搜索图像中对象的最小对比度。
默认值:5
建议值:1、2、3、5、7、10、20、30、40
ModelID(输出控制)shape_model→(整数)
模板的句柄。

实例演示与解析

实例代码展示与解析

*读入图片进行显示
read_image (Image, 'C:/Users/22967/Desktop/ZL2KB/1.bmp')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
*手绘模板
draw_nurbs (ContOut1, WindowHandle, 'true', 'true', 'true', 'true', 3, Rows, Cols, Weights)   
*使用XLD轮廓创建模板
create_shape_model_xld (ContOut1, 'auto',-rad(180), rad(360), 'auto', 'auto', 'ignore_local_polarity', 10, ModelID)
*得到模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)  
*查找模板
find_shape_model (Image, ModelID, 0, 0, 0.8, 0, 0.5, 'least_squares', 0, 0.1, Row, Column, Angle, Score)
*显示查找结果
if(|Row|==0)dev_clear_window()dev_display(Image)          set_tposition (WindowHandle, 300, 300)write_string (WindowHandle, 'Not Find')stop()
else gen_cross_contour_xld (CrossFind, Row, Column, 200, Angle)
endif

运行过程与处理展示

读入图像

在这里插入图片描述

绘制模板

在这里插入图片描述

使用绘制的XLD创建模板

在这里插入图片描述

查找模板

在这里插入图片描述

  • 博主简介:
  • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
  • 帮忙点个赞吧。哈哈。

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

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

相关文章

往文件中写数据--增量

有的功能需要打印日志文件&#xff0c;但是日志文件太多不方便查看&#xff0c;我就把信息输出到一个TXT文件中了。 下面就是我将要说的&#xff0c;往文件中写数据&#xff08;增量&#xff09;&#xff0c;代码很简单&#xff0c;也可以放在你的代码中运行一下&#xff1a; /…

SQL Server 数据库查找重复记录的几种方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列&#xff08;或多列&#xff09;的重复值。&#xff08;只可以查出重复记录的值&#xff0c;不能查出整个记录的信息&#xff09; 例如:查找stuid&#xff0c;stuname重复的记录&#xff1a; select stuid&#xff0c;s…

xvid 数据编码和解码

由于视频开发的需求&#xff0c;封装xvid c调用接口&#xff0c;使之优雅易用 我已经对pc camera视频流(RGB)进行尝试&#xff0c;编码之后传输到远程主机进行解码回放&#xff0c;效果不错 具体的xvid的参数可以进一步优化&#xff0c;这里只是提供简单的范例 1. xvid 解码 …

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍&#xff0c;现在我们开始写一个最初级的脚本写脚本的工具有很多&#xff0c;有文本文档&#xff0c;有PowerShell ISE&#xff0c;PowerShell Studio等&#xff0c;这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行&#xff0c;否则…

C#精准定时

文章目录简介StopWatch类例子1&#xff0c;用作延时例子2&#xff0c;用作算法耗时评估博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在自动化上位机编写过程中&#xff0c;上位机的定时应用在很多地方。对于工业上位机程序设计起…

联合体(union)和结构体(struct)的区别

1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈&#xff0c;单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的&#xff0c;WEB自动化测试一时半会还没有什么进展&#xff0c;所以决定先学习一下网站用的MVC架构&#xff0c;跟着教程写了一个小网站&#xff0c;大概也找到了WEB测试…

prototype与_proto_

1、prototype与_proto_ ①prototype&#xff1a;是函数才有的属性&#xff0c;这个属性是一个指针。当一个构造函数被创建时&#xff0c;该构造函数会自动生成一个prototype指针&#xff0c;该指针指向构造函数的原型。这个原型会有其他实例共享的一些属性和方法。 ②_proto_&a…

Halcon求取矩形顶点坐标

文章目录简介Halcon源码博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在使用Halcon画矩形时&#xff0c;并不能得到矩形四角顶点坐标。但是我们可以通过数学计算得到矩形定点坐标的位置。 我们在计算过程中需要知道矩形的长轴与短…

kafka常用的shell命令

kafka常用shell命令&#xff1a; ------------------------------------ 1、创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看创建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django报错

报错&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多线程实例(_beginThreadex创建多线程)

C多线程&#xff08;二&#xff09;(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例&#xff08;来自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主线程创建2个线程t1和t2&#xff0c;创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据&#xff0c;需要将数据导入数据库中&#xff0c;又不能一个一个手工录入&#xff0c;可以生成SQL&#xff0c;来批量操作。1.首先在第二行的H列&#xff0c;插入函数&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

题目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;现在给出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;问你x^(g[n*y]) mod (s 1)的值为多少。 解题思路&#xff1a; 首先可以得到的是g[n…

C#的两种类据类型:值类型和引用类型

目录什么是值类型&#xff0c;什么是引用类型概念&#xff1a;值类型和引用类型区别什么是值类型&#xff0c;什么是引用类型 概念&#xff1a; 值类型直接存储其值&#xff0c;而引用类型存储对其值的引用。部署&#xff1a;托管堆上部署了所有引用类型。 引用类型&#xf…

ring0 ring3 kernel driver

intel cpu的权限访问控制&#xff1a;ring0 ~ ring5. window、linux操作系统都只用了ring0&#xff0c;ring3&#xff0c;对应内核态和用户态. 驱动程序工作在内核态&#xff0c;没有main函数入口&#xff0c;而应用程序工作在用户态。转载于:https://www.cnblogs.com/yiii/p/6…

Linux 的多线程编程的高效开发经验

转自&#xff1a;http://www.chineselinuxuniversity.net/articles/22615.shtml 本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验&#xff0c;用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中&#xff0c;我们穿插一些 Windows 的编程用例用以对…

Visual C++中error spawning cl.exe解决办法

| 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 今天安装Vc6.0的时候出现了一个error spawning cl.exe的错误&#xff0c;在网上找了一些资料&#xff0c;才知道这是因为路径设置的问题引起的&#xff0c; “cl.exe”是VC真正的程序编译器&…

C#整数数据类型

文章目录博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 数据类型含义取值范围sbyte有符号8位整数-128 ~ 127&#xff08;-2^7 ~ 2^7-1&#xff09;byte无符号8位整数0 ~ 255&#xff08;0 ~ 2^8-1&#xff09;short有符号16位整数-32768 ~ 3…