基于形状的模板匹配(Shape-Based)

  • 称为基于边缘方向梯度的匹配,是一种最常用也是最前沿的模板匹配算法

(一)根本思想

  • 以物体边缘的梯度相关性作为匹配标准

(二)原理

  • 提取ROI中的边缘特征,结合灰度信息创建模板,并根据模板的大小和清晰度的要求生成多层级的图像金字塔模型

  • 接着在图像金字塔层中自上而下逐层搜索模板图像,直到搜索到最底层或得到确定的匹配结果为止

(三)使用条件

  • 该方法使用边缘特征定位物体,对于很多干扰因素不敏感,如光照和图像的灰度变化,甚至可以支持局部边缘缺失、杂乱场景、噪声、失焦和轻微形变的模型

  • 更进一步说,它甚至可以支持多个模板同步进行搜索

  • 但是它不适用于旋转和缩放比较大的情况

(四)形状匹配算子

 /*
 1.创建形状模型:create_shape_model()
 2.寻找形状模型:find_shpae_model()
 3.释放形状模型:clear_shape_model()
 */

(五)实例

1、创建ROI区域,准备模板图像用来创建模板(创建模板以后可以保存下来)

  • 标准形状:draw_rectangle1/2、draw_circle、draw_ellipse、draw_line

  • 任意形状:draw_region、draw_polygon

  • 生成标准ROI:gen_rectangle1/2、gen_circle、gen_ellipse、gen_region_line

  • 通过XLD创建AOI:gen_region_contour_xld、gen_region_polygon_xld

  • 利用area_center()找到这个ROI区域的中心

  • 通过reduce_domain()从图像中获取这个ROI区域

2、ROI修正,通过预处理改善图像质量,以便找到更合适的模板图像

  • 修正函数:erosion(减小ROI)、dilation(扩大ROI)、shape_trans(形状转换)、boundary(像素级边界)、move_region(移动区域到新位置)

  • 组合:intersection(交集)、difference(差集)、union2(两个区域的并集)

3、直接创建模板

 create_shape_model(Template , // 模板图像
                    NumLevels, // 金字塔层数
                    AngleStart, // 起始角度
                    AngleExtent, // 角度范围
                    AngleStep, // 角度步长
                    Optimization, // 设置模板优化和模板创建方法
                    Metric, // 匹配方法设置
                    Contrast, // 模板中前景与背景的对比度
                    MinContrast, // 被查找图片的最小对比度
                    ModelID) // 模板ID
 // 可缩放比例
 create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
                    
 create_scaled_shape_model (ImageReduced, 5, rad(-45), rad(90), 0, 0.8, 1.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)
  • 通过determine_shape_model_params算子得到金字塔层数,再通过inspect_shape_model算子测试对比度的数值是否合理

  • 创建好模板以后,需要监视模板,用inspect_shape_model算子来完成,用来检测参数的适用性与找到合适的参数

  • 该算子执行后将会把预设参数的金字塔分级图像显示出来,可以根据需要判断参数选取的是否合理 

  inspect_shape_model(Image : // 输入参数,输入图像
                     ModelImages, // 输出参数,输出图像基于金字塔的影像
                     ModelRegions : // 输出参数,输出模型区域
                     NumLevels, // 输入参数,使用的金字塔层数。默认4,范围1~10
                     Contrast : ) // 输入参数,设置对比度。默认30,参考10,20,30,40,60,80,100,120,140,160

(1)NumLevels

  • 最开始是第一层,逐层+1

  • 金字塔越小,细节信息越多,定位的更准确,但消耗的时间也更多;金字塔越大,找到匹配使用的时间就越小

  • 另外必须保证最高层的图像具有足够的信息(至少四个点)。如果金字塔过大,模板不容易识别出来,这是需要将find_shape_model函数中MinScore和Greediness参数设置的低一些(注意这里的解决办法!!!)

  • 如果最高层金字塔的消息太少,算法内部会自动减少金字塔层数

  • 如果最底层金字塔的信息太少,函数就会报错

  • 如果设为auto,算法会自动计算金字塔的层数,我们可以通过get_shape_model_params函数查看金字塔的层数

 // 根据创建的模型ID来查看形状模型的参数
 get_shape_model_params( : : ModelID : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Metric, MinContrast)
 // ScaleMin, ScaleMax, ScaleStep是模型的最小比例、最大比例、缩放步长

(2)Contrast

    <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盾山狂热粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值