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. 生成 ...
随机推荐
- System.out.println();快捷键
不同开发工具的输出快捷键是不一样的-System.out.println(); eclipse&my eclipse中是syso +(alt+/) idea 是sout +tab 或者sout ...
- 百度前端技术学院-基础-day5.6
今天学习了关于盒模型.浮动等页面布局的方法. 受到同学的启发,顺便学习了flex的布局. 还了解了一些编码的基本规则. 对我接下来的学习帮助很大. 交作业: HTML : https://github ...
- 将ACCESS 的数据库中的表的文件 导出了EXCEL格式
将ACCESS 的数据库中的表的文件 导出了EXCEL格式 '''' '将ACCESS数据库中的某个表的信息 导出为EXCEL 文件格式 'srcfName ACCESS 数据库文件路径 'desfN ...
- Java集合源码分析(六)——ConcurrentHashMap
目录 简介 源码分析 父类 接口 字段 内部类 1.链表节点结构 2.树根结构 3.树节点结构 方法 1.构造方法 2.基本并发方法 3.初始化表数组的操作 4.修改添加元素 5.统计元素数量 6.扩 ...
- Docker 安装 Redis 需要注意的地方
Docker 安装 Redis 需要注意的地方 拉取镜像 docker pull redis 可以使用redis:xxx xxx为版本号,不写默认是latest 启动容器 无配置文件无密码: dock ...
- sqli-labs less-24(二次注入)
less-24 原理: 在网站处理用户提交的数据的时候,只是将某些敏感字符进行了转义.因而使得用户第一次提交的时候不会被当做代码执行.但是这些数据存入数据库的时候却没有转义,而网站程序默认数据库中的数 ...
- OGG报错:Cannot load ICU resource bundle 'ggMessage', error code 2 - No such file or directory
[oracle@dgdb1 ~]$ ggsci Oracle GoldenGate Command Interpreter for OracleVersion 11.2.1.0.3 14400833 ...
- Windows远程报错:由于没有远程桌面授权服务器可以提供许可证,远程会话被中断
故障原因:Windowsserver超过两人的远程连接是收费的,有120天免费试用期,超过这个时间再连接就会报错. 解决方法一: 进行续费 解决方法二: 1,在运行里运行 mstsc /v:ip ...
- Maven笔记之面试题合集
简介:收集整理了网上关于Maven的面试问题,准备面试使用,答案通过各种资料查证编写. 1.什么是Maven? Maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理.Maven项目对 ...
- 彻底理解Spring如何解决循环依赖
Spring bean生命周期 可以简化为以下5步. 1.构建BeanDefinition 2.实例化 Instantiation 3.属性赋值 Populate 4.初始化 Initializati ...