目录

  • 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
  • 帮忙点个赞吧。哈哈。

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

  1. halcon模板匹配实践(1)算子参数说明与算子简介

    create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, ...

  2. Halcon模板匹配之读取dxf文件生成xld与后续操作

    实际操作过程见另外几篇: 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(一) Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角. 请注意,使用read_p ...

  3. halcon模板匹配学习(一) Matching 初印象

    什么是模板匹配呢?简单而言,就是在图像中寻找目标图像(模板),或者说,就是在图像中寻找与模板图像相似部分的一种图像处理技术.依赖于选择的方法不同,模板匹配可以处理各种情形下的变换,如照明.杂点.大小. ...

  4. Halcon 模板匹配专栏

    1.基于形态的匹配 先看原图 首先将要匹配的图片剪切出来 代码如下 *读取模板图片和要查找的目标图片 read_image (Image, 'green-dot') *read_image (Imag ...

  5. Halcon 模板匹配

    halcon 匹配圆: 基于形状的匹配 目标:对圆进行模板匹配,方式Bolb 分析. 1.首先获取一张图片, read_image (Image, 'C:/Users/admin/Desktop/Pi ...

  6. HALCON 模板匹配的总结

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

  7. Halcon模板匹配(基于相关性)

    基于相关性的模板匹配使用场景: 光照不均匀 明暗变化大 背景简单 套路方法 抠图:通过Blob分析或者直接画ROI,把要做模板的待识别物从背景中抠出来,抠图使用函数reduce_domain: 创建模 ...

  8. c#与halcon模板匹配控制EPSON四轴机器人输出旋转角度

    首先c#与halcon联合编程的方式在之前的博客有写到,并且halcon的find_shape_model算子也有提及,这里附上两个超链接不再赘述. 这篇博客主要讲讲这个find_shpe_model ...

  9. halcon模板匹配学习(二) 准备模板

    如下,我们将介绍匹配的第一个操作:准备模板 初始时刻,我们准备好参考图像,并对其做一定的处理,然后我们需要从参考图像中导出模板,也就是将参考图像裁剪成所谓的模板图像.获取模板图像可以通过设置ROI来完 ...

最新文章

  1. iOS组件化方案的几种实现
  2. Crawler:基于Crawler和P2P技术实现机器人智能在线下载
  3. OSGI和Spring动态模块–简单的Hello World
  4. oracle 修改nls_characterset,ORACLE NLS_CHARACTERSET字符集的更改
  5. 爹地,我找到了!15个极好的Linux find命令示例
  6. 常用基本控件测试用例(一)
  7. JVM常见的七种垃圾收集器的简单比较
  8. Java 动态绑定/多态
  9. 51nod1122 机器人走方格 V4
  10. QGIS教程02---QGIS加载数据的4种方法
  11. 惠普打印机,打印状态:需要注意,打印时显示:需要用户干
  12. win7新建ios开发环境
  13. 解决在RHEL/CentOS7.4以上版本无法使用AFD(Oracle ASMFD)特性
  14. FILecoin 将重大战略升级,FIL 或将引导商业数据
  15. 她当HR 15年,为思科、甲骨文招人!只说了一个秘密,网友炸锅了
  16. Oracle错误08s01,Java7 sqljdbc4 – getConnection()上的SQL错误08S01
  17. 二级备考:ppt自学知识笔记--基础操作1:ppt界面介绍
  18. 手机翻译html工具,1分钟教你用手机实时翻译,自带翻译功能就是强大,各牌手机均可...
  19. 1. 激活函数(Activation functions)
  20. 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件

热门文章

  1. Delphi编译报错对照表
  2. [C++] Nested Radical Constant
  3. ICE第三篇------一些疑难点
  4. STM32堆栈溢出的问题
  5. 笔记:设计模式(3)-Abstract Factory抽象工厂模式
  6. IMP出现的ORA-01401错误可能和字符集有关(转载)
  7. 输入框输入数字,且不能有小数点存在
  8. CCF 差分约束--201809再卖菜
  9. 你必须很努力,才能看上去毫不费力
  10. 百度富文本编辑器,改变图片上传存储路径