1、常用于识别定位、测量、机械手抓取等
2、多用形状匹配
1、基于灰度(极少用)
【案例best_match : 常规灰度匹配流程】
【案例best_match_mg : 根据灰度图调整模板】
【案例set_reference_template : 设置从哪里开始搜索】
2、基于相关性(少用)
【案例find_ncc_model_exposure:常规相关性匹配流程】
3、基于形状(最常用)
一阶导数算子、二阶导数算子
1、找到区域轮廓,生成模板,查找模板轮廓与目标区域轮廓
图像金字塔:一般设为 3-5层
模板、实例(找到的区域)
手法:采集 - 预处理 - 抠图 - 创建模板 - 查找 - 显示
【案例】
1、采集图像
2、预处理:获得作为模板匹配的区域,一般会稍微膨胀
3、抠图(手动抠图/Blob抠图)
4、创建模板
create_scaled_shape_model() 匹配的图像可缩放(行列等比例缩放)、旋转
Template:用于创建模板的图像
NumLevels:金字塔层数
*AngleStart:模板开始角度 视情况而定
*AngleExtent:模板角度范围
AngleStep:模板角度步长
*ScaleMin:最小缩放比例
*ScaleMax:最大缩放比例
ScaleStep:缩放步长
Optimization:优化算法
*Metric: 匹配极性
Contrast:模板与实例的对比度
MinContrast:模板前景与背景的对比度(对比度越大,则轮廓点数越少,一般20左右)
ModelID:创建的模板句柄
create_aniso_shape_model() :匹配的图像行列可不等比例缩放
create_shape_model() :匹配的图像不可缩放
5、查找(对应创建的模板形式)
find_scaled_shape_model(s) 寻找匹配可旋转缩放的图像
Image: 模板匹配的目标图像
ModelID: 匹配模板句柄
AngleStart: 匹配其实角度(注:此处的角度值与缩放值均在创建模板的参数范围内即可)
AngleExtent:匹配角度范围
ScaleMin: 匹配目标的最小缩放比例
ScaleMax: 匹配目标的最大缩放比例
MinScore: 最小分数,类似于匹配度,分数低于这个值的目标,则不会被匹配上
* NumMatches:查找个数(0为查找所有)
MaxOverlap: 目标重叠度
SubPixel:亚像素精度
* NumLevels:金字塔层数
* Greediness:贪婪度(找不到需要调整参数)
Row:查找结果行坐标
Column:查找结果列坐标
Angle:查找结果角度
Scale:查找结果缩放比例
Score:查找结果分数,即匹配度
find_aniso_shape_model(s):
find_shape_model(s):
【案例关键点】
1、find_scaled_shape_model: 常规模板匹配创建及匹配(行列缩放为等比例)
2、first_example_shape_matching: 芯片模板匹配(不可缩放)
3、find_aniso_shape_model: 匹配目标的行列比例可缩放(可不等比例),单个模板对应多个目标
5、reuse_model: 保存模板文件
6、pm_multiple_models: 多模板匹配(内部包含从cad文件导入轮廓)
7、check_soft_cheese :多模板匹配
8、find_cococa_packages_max_deformation(或find_shape_model_max_deformation): 类似包装袋等非刚性物体表面有形变的匹配(重点参数:max_deformation N,N越大允许形变越大)
9、使用均值创建模板(案例4)
10、matching_image_border: 匹配边界图像时需设置
11、matching_coins: 缩减一个区域,指定从该出查找减少查找时间
12、matching_defocused_pcb : 模糊查找,查找时金字塔设为[0, -n]
13、process_shape_model:创建模板前,看下模板是否完整,是否需要修改,修改后再创建模板
14、find_peanut_candies_local_deformable: 柔性产品、包装袋产品形变(形变大时使用本组合算子)
create_local_deformable_model:创建模板
find_local_deformable_model:查找
15、set_shape_model_timeout :设置查找最长时间,超过便不查
16、set_shape_model_min_contrast: 设置模板与实例的最小对比度,提高查找正确率
手法:采集 - 预处理 - 获取xld轮廓 - 创建模板 - 查找 - 显示
1、采集图像
2、预处理:
3、获取xld轮廓
4、创建模板
create_scaled_shape_model_xld() :匹配的图像可缩放、旋转
create_aniso_shape_model_xld() :匹配的图像仅仅在X、Y方向缩放
create_shape_model_xld() :匹配的图像不可缩放
5、查找(对应创建的模板形式)
find_scaled_shape_model(s) 寻找匹配可旋转缩放的图像
find_aniso_shape_model(s):
find_shape_model(s) :
【案例关键点】
create_shape_model_xld: 创建xld轮廓模板,用xld轮廓去匹配
可应用于开关检测(开关检测也可用多模板匹配)
模板匹配:
案例:
*读取图片
read_image (Image, '1.png')
*画一个ROI区域
gen_rectangle1 (ROI_0, 57.625, 55.5, 186.063, 190.5)
*用上面画出的ROI抠图
reduce_domain (Image, ROI_0, ImageReduced)
*用抠出的图像做成模板
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*获取模板轮廓,此步非必须
*get_shape_model_contours (ModelContours, ModelID, 1)
*在原图中查找模板
find_shape_model (Image, ModelID, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*显示模板匹配的结果,即将模板的轮廓变换到识别到的位置
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
项目案例分享:
链接:https://pan.baidu.com/s/13orowAalkoXaRxdbDgZjIw
提取码:s2pd