halcon案例学习之cbm_label_simple
*cbm_label_simple 程序说明:
*这个示例程序展示了如何使用基于组件的匹配来定位复合对象。在这种情况下,应该在图像中找到一个标签,用户既不知道其中的组件,也不知道它们之间的关系。因此,创建组件模型需要三个操作符:
* 1) gen_initial_components
* 2) train_model_components
* 3) create_trained_component_model
*最后,使用
* 4) find_component_model
dev_update_off ()
dev_close_window ()
*获取所有搜索图像
list_image_files ('label', 'default', [], SearchImageFiles)
SearchImageFiles := regexp_select(SearchImageFiles,'(label_[0-9]+.png)|(label_training_)')
*读取并显示模型图像
read_image (Image, 'label/label_model')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
*设置显示设置
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_line_width (2)
dev_set_draw ('margin')
dev_set_color ('blue')
*定义模型区域
gen_rectangle1 (ModelRegion, 119, 106, 330, 537)
*reduce_domain —缩小图像的域。
reduce_domain (Image, ModelRegion, ModelImage)
dev_display (ModelRegion)
disp_message (WindowHandle, 'Model image and model region', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*获取训练图像
*gen_empty_obj —创建一个空的对象元组
gen_empty_obj (TrainingImages)
for Index := 1 to 5 by 1
read_image (TrainingImage, 'label/label_training_' + Index)
*concat_obj —连接两个图标对象元组
concat_obj (TrainingImages, TrainingImage, TrainingImages)
endfor
*自动提取初始组件
* ---------------------------------------------
*gen_initial_components —提取组件模型的初始组件
gen_initial_components (ModelImage, InitialComponents, 40, 40, 20, 'connection', [], [])
dev_set_line_width (1)
dev_set_colored (12)
dev_display (Image)
dev_display (InitialComponents)
disp_message (WindowHandle, 'Extracted initial components', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 提取模型组件并训练关系
* -----------------------------------------------------
* (这可能需要几分钟!)
*get_system —获取HALCON系统参数的当前值
get_system ('pregenerate_shape_models', SavePregenerateShapeModels)
*set_system —设置HALCON系统参数
*pregenerate_shape_models 形状模型 此参数确定使用create_shape_model或create_scaled_shape_model
*创建的形状模型是否已完全预先生成('true')。该参数主要用于在最少的代码更改下实现两种模式之间的切换。通常,仅需要插入或更改一行。
*值:“ true”或“ false” 默认值:'false'
set_system ('pregenerate_shape_models', 'true')
*train_model_components —为基于组件的匹配训练组件和关系
train_model_components (ModelImage, InitialComponents, TrainingImages, ModelComponents, 40, 40, 20, 0.85, -1, -1, rad(15), 'reliability', 'rigidity', 0.2, 0.5, ComponentTrainingID)
set_system ('pregenerate_shape_models', SavePregenerateShapeModels)
*训练结果可以写入文件,以便
*结果可以在以后的程序中从文件中读取
*执行和时间要求高的培训不需要再次执行。
* write_training_components (ComponentTrainingID, 'train_label.ct')
* read_training_components ('train_label.ct', ComponentTrainingID)
dev_display (Image)
dev_display (ModelComponents)
disp_message (WindowHandle, 'Extracted model components', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*为计算出的关系添加小公差值,以覆盖训练图像中未出现的组件变化。
*Modify_component_relations —修改训练结果中的关系
modify_component_relations (ComponentTrainingID, 'all', 'all', 15, rad(5))
* 根据训练结果创建组件模型
* -------------------------------------------------------
create_trained_component_model (ComponentTrainingID, -rad(30), rad(60), 10, 0.8, 'auto', 'auto', 'none', 'use_polarity', 'false', ComponentModelID, RootRanking)
clear_training_components (ComponentTrainingID)
*在运行时映像中查找组件模型
for Index := 0 to |SearchImageFiles| - 1 by 1
read_image (SearchImage, SearchImageFiles[Index])
*find_component_model —查找图像中组件模型的最佳匹配
find_component_model (SearchImage, ComponentModelID, RootRanking, -rad(30), rad(60), 0.5, 0, 0.5, 'stop_search', 'prune_branch', 'none', 0.6, 'least_squares', 4, 0.9, ModelStart, ModelEnd, Score, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp)
dev_display (SearchImage)
for Match := 0 to |ModelStart| - 1 by 1
dev_display (SearchImage)
*get_found_component_model —返回找到的组件模型实例的组件
get_found_component_model (FoundComponents, ComponentModelID, ModelStart, ModelEnd, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp, Match, 'false', RowCompInst, ColumnCompInst, AngleCompInst, ScoreCompInst)
dev_display (FoundComponents)
endfor
disp_message (WindowHandle, 'Found components in image ' + (Index + 1) + ' of 15', 'window', 12, 12, 'black', 'true')
* 要不停止地运行程序,请取消激活以下行
if (Index < |SearchImageFiles| - 1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
*clear_component_model —释放组件模型的内存
clear_component_model (ComponentModelID)
halcon案例学习之cbm_label_simple的更多相关文章
- Storm入门2-单词计数案例学习
[本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑] 单词计数拓扑WordCountTopology实现的基本功能就是不停地读入 ...
- angular的splitter案例学习
angular的splitter案例学习,都有注释了,作为自己的备忘. <!DOCTYPE html> <html ng-app="APP"> <he ...
- 8.3 ContosoMVCWeb官方案例学习
1. 分页案例学习 2. 排序搜索案例学习 3.使用Configuration.cs中的Seed方法 在数据库迁移过程中,使用update-database,会运行seed方法.seed方法能够将初始 ...
- 通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性
引言 在过去的十年里, GPU (图形处理单元)已经从特殊硬件(特供)转变成能够在数值计算领域开辟新篇章的高性能计算机设备. 很多算法能够使用拥有巨大的处理能力的GPU来快速运行和处理大数据量.即使在 ...
- GIS案例学习笔记-三维生成和可视化表达
GIS案例学习笔记-三维生成和可视化表达 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:针对栅格或者矢量数值型数据,进行三维可视化表达 操作时间:15分钟 案 ...
- 获取字段唯一值工具- -ArcPy和Python案例学习笔记
获取字段唯一值工具- -ArcPy和Python案例学习笔记 目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...
- 面图层拓扑检查和错误自动修改—ArcGIS案例学习笔记
面图层拓扑检查和错误自动修改-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据源: gis_ex10\ex01\parcel.shp, ...
- 计算平面面积和斜面面积-ArcGIS案例学习笔记
计算平面面积和斜面面积-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据:实验数据\Chp8\Ex5\demTif.tif 平面面积= ...
- ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画
ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画 计划时间:第二天下午 教程:Pdf/405 数据:ch9/ex3 方法: 1. 创建DEM SA工具箱/插值分析/地形转栅格 2. 生成 ...
随机推荐
- C++详解(8-9)
八. C++函数的高级特性 对比于C语言的函数,C++增加了重载(overloaded).内联(inline).const和virtual四种新机制.其中重载和内联机制既可用于全局函数也可用于类的成员 ...
- 什么时候使用transition?什么时候使用animation?
不同点: 1. 触发条件不同.transition通常和hover等事件配合使用,由事件触发.animation则和gif动态图差不多,立即播放. 2. 循环. animation可以设定循环次数. ...
- hive实例的使用
一.hive用本地文件进行词频统计 1.准备本地txt文件 2.启动hadoop,启动hive 3.创建数据库,创建文本表 4.映射本地文件的数据到文本 5.hql语句进行词频统计交将结果保存到结果表 ...
- 「 洛谷 」P4539 [SCOI2006]zh_tree
小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...
- 仵航说 SpringBoot项目配置Log日志服务-仵老大
今天领导让我配置一个log日志服务,我哪里见过哟,然后就去百度了,结果挨个试下去,找到了一个能用的,分享给大家 大致四个地方 分别是 1.pom文件需要引入依赖 2.创建一个TestLog类 3.在y ...
- 职场PUA,管理者的五宗罪
在目前的社会环境下,程序员似乎成了"弱势群体".我们经常谈论的职场PUA已经成为程序员的代名词. 我一直在想,为什么这么多管理者能力会这么差. 但最后最吃亏的还是可怜的程序员. 也 ...
- APEX-数据导出/打印
前言: 由于公司使用了Oracle APEX构建应用,且在APEX新版本v20.2版本中增强了相关报表导出数据相关功能:正好现在做的事情也需要类似的功能,就先来学习一下Oracle的APEX相关功能及 ...
- ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪
这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- Python小白干货宝典:sorted()函数:列表元素排序
定义: sorted() 函数对所有可迭代的对象进行排序操作. 内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作. 语法: sorted 语法: sorted(i ...
- 扫描条形码获取商品信息(iOS 开发)
一.导入ZBarSDK及其依赖库(这不是本文侧重点) 1.下载地址 https://github.com/bmorton/ZBarSDK 2.导入头文件 #import "Z ...