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