一个基于可变比例的匹配的实例及详解

昨天说到的 有两个有用的例子和大家分享,一个是基于1:1比例的匹配的实例,一个是基于可变比例的匹配,正在测试的是基于变形可变比例的匹配。
一个基于1:1比例的匹配的实例及详解
今天的例子是 基于可变比例的匹配

* 读取一个轮廓模型(shape model),使这个模型可放大或缩小地进行寻找匹配。
dev_close_window ()
dev_open_window (0, 0, 600, 600, 'black', WindowHandle)
read_image(Image,'L:/Halcon test/mk3.jpg')
* 选取一张有各种大小,角度,甚至变形的商标的图片做测试
*read_image(Image,'L:/Halcon test/mk5.jpg')
gen_rectangle1 (ROI, 57.8333, 49.5, 181.167, 342.833)
* 画一个矩形选择ROI,矩形在左上角,覆盖一个完整的,无变形规定尺寸的商标,作为模板
reduce_domain(Image,ROI,ImageReduced)
* 大图和这个矩形的ROI相减就会得到一个左上角的商标的图案作为模板,命名ImageReduced
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 40)
* 创建一个对比的模型,后面两个参数:第一个是层数(NumLevels,如5层),第二个是对比度阈值(具体用法效果还不是很明白)

* 这里看到前面有位群友:halcon8.0 的一个帖子《模型匹配 》提到不理解金字塔层数的意义,这里解释一下,如图:

一个基于可变比例的匹配的实例及详解

金字塔层数在inspect_shape_model设置为5层,那么相应的在create_scaled_shape_model 创建为5层,在find_scaled_shape_model查找为5层,上图中的5个紫色的箭头指的是就是金字塔层数,层数越多越容易被查找,反应的速度也就越快,一般是1-10层,但要注意保证最底层依然能被识别,主要是作为模板的图片的精度影响。一般5层左右识别的速度都可以接受了。

create_scaled_shape_model (ImageReduced, 5, rad(-180), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)
* 创建一个比例不变的匹配的轮廓模型
* create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
* 01、Template,//reduce_domain后的模板图像
* 02、NumLevels,//金字塔的层数,可设为“auto”或0—10的整数
* 03、AngleStart,//模板旋转的起始角度
* 04、AngleExtent,//模板旋转角度范围, >=0
* 05、AngleStep,//旋转角度的步长, >=0 and <=pi/16
* 06、ScaleMin,//模板最小比例
* 07、ScaleMax,//模板最大比例
* 08、ScaleStep,//模板比例的步长
* 09、Optimization,//设置模板优化和模板创建方法
* 10、Metric, //匹配方法设置
* 11、Contrast,//设置对比度
* 12、MinContrast,//设置最小对比度
* 13、ModelID,//输出模板句柄

* write_shape_model (ModelID, 'mk.shm')
* 把这个模型保存成一个shm模板
*clear_shape_model (ModelID)
stop()

*read_shape_model ('mk.shm', ModelID)
find_scaled_shape_model (Image, ModelID, rad(-180), rad(360), 0.1, 5.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row, Column, Angle, Scale, Score)
* 匹配一个比例不变的轮廓模型,参数和创建的参数差不多
get_shape_model_contours (ModelContours, ModelID, 1)
for I := 0 to |Score|-1 by 1
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2DRotate)
hom_mat2d_scale (HomMat2DRotate, Scale, Scale, Row, Column, HomMat2DScale)
affine_trans_contour_xld (ModelContours, ModelTrans, HomMat2DScale)
dev_display (ModelTrans)
endfor
disp_message (WindowHandle, '总共匹配了' + |Score| + '个商标', 'window', 12, 12, 'red', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
* 但是变形则不能被识别
stop ()
clear_shape_model (ModelID)


一个基于可变比例的匹配的实例及详解

总共匹配了8个形状相同,大小比例不同的商标,但紫色圈中的变形的商标并不能被识别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值