halcon 基于形状的模板匹配

【适用场景】

适用于尺度变化较小的场景。虽然可以设置缩放尺度,但是耗时增加太大。

【对模板的要求】

清晰(尽量大,如logo比其他对象大)、区别度明显、范围尽量小(模板区域越大越耗时,如只框取logo)

【相关函数】

create_generic_shape_model,train_generic_shape_model,find_generic_shape_model

指定参数较多 create_shape_model,find_shape_model

【提升匹配成功率的参数】以create_generic_shape_model (ModelHandle)为例

*适应一定的尺度缩放(尺度尽量覆盖样本可能出现的大小,否则匹配角度会不精确)
set_generic_shape_model_param (ModelHandle, 'scale_row_min', 0.9)
set_generic_shape_model_param (ModelHandle, 'scale_row_max', 1.1)
set_generic_shape_model_param (ModelHandle, 'scale_column_min', 0.9)
set_generic_shape_model_param (ModelHandle, 'scale_column_max', 1.1)

*匹配目标个数、最低分数

set_generic_shape_model_param (ModelHandle, 'num_matches', 1)

set_generic_shape_model_param (ModelHandle, 'min_score', 0.3)

关于min_score的注意事项:如果设置较高(如0.5)可能检测不出,使用0.3检出,但是查看结果score是0.8。可能是官方bug。因此建议先以较低分数检测出,之后通过score判断是否检测正确。

【提升速度】需要实际测试,很玄学

 在满足准确率的条件下, 'min_score'尽量提高,速度影响非常大。

缩小图像一半。定位模板一般是大的、对比度明显的区域(缩小一半,一般还很明显)。缩小图像可以弱化小区域,可能有提升匹配准度的效果。

'min_contrast',速度相差十倍。需自己测试合适的min_contrast,10-50间速度呈下抛物线。对准确率的影响需要测试。

推荐逐个匹配。ModelLabelIDs如果是多个模板组合,一次性匹配多个的速度<for 循环单个匹配的速度。而且一次性匹配多个的结果会乱序(不与ModelLabelIDs里的模板顺序一致),而以score大小排序。

find_generic_shape_model (ImageOCR, ModelLabelIDs, MatchResultIDs, Matches)
for id := 1 to |ModelLabelIDs| by 1
    find_generic_shape_model (ImageOCR, ModelLabelIDs[id-1], MatchResultID, Matches)      
endfor

 

【官方案例】

halcon22.11版本,更新了很多基于形状的案例(应该是优化了,具体优化点不详)

find_generic_shape_model_workflow.hdev

adapt_shape_model_high_noise.hdev

posted @ 2023-02-02 11:25  夕西行  阅读(2026)  评论(3编辑  收藏  举报