匹配:在训练图像中呈现一个所谓的模板。系统从这个模板中派生出一个模型,通过使用该模型来定位于搜索图像中的相似模板对象。此方法能够处理打光、杂乱、位置和旋转变换的图像。
匹配优点:鲁棒性和灵活性。匹配不需要对目标进行任何形式的分割。通过某些匹配方法,即使对象与其他对象重叠,也可以定位对象。
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