设置首页收藏本站
开启左侧

[文档] Halcon基于组件的匹配(基于形状的扩展)

[复制链接]
Criss 发表于 2023-3-23 17:26:44 | 显示全部楼层 |阅读模式
基于组件的匹配是基于形状的匹配的扩展。像基于形状的匹配一样基于组件的匹配提取轮廓,并将其形状与先前创建的形状进行匹配模特。但是与基于形状的匹配相比,组件模型由几个组件组成,这些组件可以改变它们的关系,即它们可以相对于彼此移动和旋转。可能的关系必须是在创建模型时确定或指定。然后,实际的匹配返回找到了模型实例。
请注意,与基于形状的匹配相比,基于组件的匹配没有缩放大小是可能的。
定位可以相对移动的组件的任务比过程稍微复杂一点需要进行基于形状的匹配。
例如,代替单个ROI,几个ROI(包含初始的组件)必须被选择或提取。此外,这些关系,即必须确定模型组件。

流程:
WeChat Screenshot_20230323170606.png

例如:下面的例子来判断开关状态
1.提取初始组件特征:
  1. read_image (ModelImage, 'bin_switch/bin_switch_model')
  2. gen_rectangle1 (Region1, 78, 196, 190, 359)
  3. gen_rectangle1 (Sub1, 150, 196, 190, 321)
  4. difference (Region1, Sub1, InitialComponents)
  5. gen_rectangle1 (Region2, 197, 204, 305, 339)
  6. gen_rectangle1 (Sub2, 205, 232, 285, 314)
  7. difference (Region2, Sub2, InitialComponent)
  8. concat_obj (InitialComponents, InitialComponent, InitialComponents)
  9. dev_display (ModelImage)
  10. dev_display (InitialComponents)
复制代码

WeChat Screenshot_20230323170426.png
(左)带有两个初始组件的参考图像(开关为“开”);(右)训练图像(开关是关)。

2.训练组件之间可能存在的关系(必须确定这种关系)
  1. read_image (TrainingImage, 'bin_switch/bin_switch_training_1')
  2. train_model_components (ModelImage, InitialComponents, TrainingImage, \
  3. ModelComponents, 30, 30, 20, 0.7, -1, -1, rad(25), \
  4. 'speed', 'rigidity', 0.2, 0.5, ComponentTrainingID)
复制代码


3.创建组件模型
如果训练的结果令人满意,就可以创建组件模型。为了让模型不那么严格,之前使用modify_component_model将创建小公差添加到获得的关系中。
  1. modify_component_relations (ComponentTrainingID, 'all', 'all', 1, rad(1))
  2. create_trained_component_model (ComponentTrainingID, 0, rad(360), 10, 0.7, \
  3. 'auto', 'auto', 'none', 'use_polarity', \
  4. 'false', ComponentModelID, RootRanking)
复制代码


4.找到组件模型并导出对应关系
WeChat Screenshot_20230323172624.png
  1. read_image (SearchImage, 'bin_switch/bin_switch_' + ImgNo)
  2. find_component_model (SearchImage, ComponentModelID, 1, 0, rad(360), 0, \
  3. 0, 1, 'stop_search', 'prune_branch', 'none', 0.6, \
  4. 'least_squares', 0, 0.85, ModelStart, ModelEnd, \
  5. Score, RowComp, ColumnComp, AngleComp, ScoreComp, \
  6. ModelComp)
  7. dev_display (SearchImage)
  8. for Match := 0 to |ModelStart| - 1 by 1
  9. get_found_component_model (FoundComponents, ComponentModelID, \
  10. ModelStart, ModelEnd, RowComp, \
  11. ColumnComp, AngleComp, ScoreComp, \
  12. ModelComp, Match, 'false', RowCompInst, \
  13. ColumnCompInst, AngleCompInst, \
  14. ScoreCompInst)
  15. dev_display (FoundComponents)
  16. visualize_bin_switch_match (AngleCompInst, Match, WindowHandle)
  17. endfor
  18. Figure
复制代码

本地图像位置:(代码中使用基于%HALCONIMAGES%的相对路径,可直接打开图像)
  1. %HALCONIMAGES%\bin_switch
  2. (打开cmd命令行,输入echo %HALCONIMAGES%\bin_switch 复制路径即可)
复制代码

图片链接:https://pan.baidu.com/s/11uUkSuGDWJ_VLeKZPGtTiQ
提取码:ie3f
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Atom_Du 发表于 2023-4-7 09:22:15 | 显示全部楼层
有开关原图,模板,和待匹配的图吗?😁😁😁😁
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
214a 发表于 2023-4-7 10:56:46 | 显示全部楼层
给下开关原图吧
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
一馨一依 发表于 2023-4-7 14:49:02 | 显示全部楼层
学习一下下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| Criss 发表于 2023-4-7 15:23:25 | 显示全部楼层
214a 发表于 2023-4-7 10:56
给下开关原图吧

自带图片,直接read_image就可以了。一般在C:\Users\Public\Documents\MVTec\HALCON-22.11-Steady\examples\images\bin_switch
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
5279Halcon 发表于 2023-4-23 09:05:19 | 显示全部楼层
学习一下,谢谢楼主分享!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
haclon 发表于 2023-4-24 16:33:20 | 显示全部楼层
谢谢楼主分享!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
xiaomianzhou 发表于 2023-4-26 10:53:27 | 显示全部楼层
谢谢楼主的分享
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
xusese 发表于 2023-4-26 11:36:31 | 显示全部楼层
学习一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
13026614149 发表于 2023-4-30 10:28:38 | 显示全部楼层
不错,学习一下啊
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表