Halcon 二维匹配

匹配:在训练图像中呈现一个所谓的模板。系统从这个模板中派生出一个模型,通过使用该模型来定位于搜索图像中的相似模板对象。此方法能够处理打光、杂乱、位置和旋转变换的图像。

匹配优点:鲁棒性和灵活性。匹配不需要对目标进行任何形式的分割。通过某些匹配方法,即使对象与其他对象重叠,也可以定位对象。

Halcon提供不同的匹配方法,选择哪种方法取决于图像和需要解决的问题。

不同的匹配方法如下:

基于相关性的匹配是根据灰度值和归一化的关系。

基于形状匹配代表机器视觉最新技术,而不适应灰度值,沿着轮廓提取特征,并用于模型的生产和匹配。

局部变换匹配类似于形状匹配,这可处理和返回不同的变形。特别是,除位置和分数外,匹配可以返回搜索图像重要特征,描述变换的向量场以及找到的模型实例的轮廓变换。

透视可变换匹配也类似基于形状匹配,此方法可处理变换较大的透视图,并且返回二维投影变换矩阵而不是2D姿态。

基于描述符的匹配与透视可变形匹配意义相同,在未校准情况下课二维投影变换矩阵,在校准情况下课获得三维位置信息。注意区别是点而不是轮廓被用来创建和识别模型。因此,适应于高纹理对象,但不适合具有圆形边缘的低纹理对象。下图总结二维匹配方法:

1 基本概念

匹配分为以下几步:

1.1 读取图像

获取图像进行模板匹配和训练。

1.2 创建模板

创建模板对象,需要指定覆盖训练图像中模板的感兴趣区域。图像稳定的部分才适合用于训练,训练算子的输入是简化图和控制参数,模型的句柄是训练输出。然后将用于立即搜索或存储到文件中。

1.3 寻找模型

创建(或加载)模型后,现在可以使用它来定位图像中的对象。每个方法都提供直线此任务的特定方法。如果找到一个或多个对象,则返回他妈的姿态(位置、旋转和缩放)或二维投影变换矩阵以及分数。这些值是期望结果可作为视觉过程的下一步的输入,例如定位感兴趣区域。

2 程序示例

2.1 简单示例

cpp 复制代码
read_image(ReferenceImage,'board/board_01')
create_generic_shape_model(ModelID)
gen_rectangle1(ROI,450,470,580,755)
reduce_domain(ReferenceImage,ROI,TrainingImage)
train_generic_shape_model(TrainingImage,ModelID)
set_generic_shape_model_param(ModelID,'num_matches',1)
set_generic_shape_model_param(ModelID,'min_score',0.6)

*
for i:=1 to 9 by 1
    read_image(SearchImage,'board/board_'+i$'02')
    find_generic_shape_model(SearchImage,ModelID,MatchResultID,NumMatchResult)
    
    *检索图像匹配结果
    get_generic_shape_model_result_object(Objects,MatchResultID,'all','contours')
    
    * 显示结果
    dev_display(SearchImage)
    dev_display(Objects)
    Text:='Found instances'
    dev_disp_text(Text,'window',12,12,'black', [], [])
    wait_seconds(1)
endfor

2.2 基于关联的匹配:在纹理中识别标签

cpp 复制代码
read_image(Image,'face_masks/face_mask_01')
create_generic_shape_model(ModelID)
gen_rectangle2(ROI,616.5,708.5,rad(-82.4054),50,35)
reduce_domain(Image,ROI,ImageReduced)
create_ncc_model(ImageReduced,'auto',rad(0),rad(360),'auto','use_polarity',ModelID)

NumImages:=9
Color:='green'
for Index:=1 to NumImages by 1
    read_image(Image,'face_masks/face_mask_'+Index$'02')
    find_ncc_model(Image,ModelID,rad(0),rad(360),0.7,1,0.5,'true',0,Row,Column,Angle,Score)
    dev_display_ncc_matching_results(ModelID,Color,Row,Column,Angle,0)
endfor
相关推荐
飞哥数智坊20 小时前
GPT-5-Codex 发布,Codex 正在取代 Claude
人工智能·ai编程
倔强青铜三20 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
虫无涯21 小时前
Dify Agent + AntV 实战:从 0 到 1 打造数据可视化解决方案
人工智能
Dm_dotnet1 天前
公益站Agent Router注册送200刀额度竟然是真的
人工智能
算家计算1 天前
7B参数拿下30个世界第一!Hunyuan-MT-7B本地部署教程:腾讯混元开源业界首个翻译集成模型
人工智能·开源
机器之心1 天前
LLM开源2.0大洗牌:60个出局,39个上桌,AI Coding疯魔,TensorFlow已死
人工智能·openai
Juchecar1 天前
交叉熵:深度学习中最常用的损失函数
人工智能
林木森ai1 天前
爆款AI动物运动会视频,用Coze(扣子)一键搞定全流程(附保姆级拆解)
人工智能·aigc
聚客AI1 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
BeerBear1 天前
【保姆级教程-从0开始开发MCP服务器】一、MCP学习压根没有你想象得那么难!.md
人工智能·mcp