基于形状的模板匹配,手工绘制ROI

halcon中基于形状的模板匹配,受灰度影响不大,识别较为稳定,在此介绍一种简单的基于形状匹配的方法,模板匹配基本的流程如下:

1.提取图像模板,可以通过ROI绘制,绘制图像分割的方法提取,作为模板的图像尽可能的清晰

2.创建匹配模型

3.进行匹配

4.利用仿射变换用于显示,同时获取匹配位置的坐标,角度

本文采用的是手工绘制ROI来创建模板,代码中进行了详细的注释,把相机参数改为自己的相机即可运行,具体代码如下:

set_system ('border_shape_models', 'false')
dev_close_window ()
*打开相机
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] USB2.0 UVC PC Camera', 0, -1, AcqHandle)
grab_image (Image, AcqHandle)
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
*绘制ROI区域
draw_circle (3600, Row, Column, Radius)
gen_circle (Circle, Row, Column, Radius)
*抠图
reduce_domain (Image, Circle, TemplateImage)
*创建模型
create_shape_model (TemplateImage, 5, rad(0), rad(360), rad(2.0192), ['none','no_pregeneration'], 'use_polarity', [30,57,4], 'auto', ModelId)
*保存模板
write_shape_model (ModelId, 'shapeTemplate.shm')
*读取模板
read_shape_model ('shapeTemplate.shm', ModelID)
*获取模型轮廓位于原点
get_shape_model_contours (ModelContours, ModelID, 1)
while (true)
    grab_image (Image, AcqHandle)
    *匹配
    find_shape_model (Image, ModelID, rad(0), rad(360), 0.6, 0, 0.5, 'least_squares', [5,1], 0.75, ModelRow, ModelColumn, ModelAngle, ModelScore)
    *仿射变换用于显示识别位置
    for MatchingObjIdx := 0 to |ModelScore| - 1 by 1
        *创建矩阵
        hom_mat2d_identity (HomMat)
        *计算旋转矩阵
        hom_mat2d_rotate (HomMat, ModelAngle[MatchingObjIdx], 0, 0, HomMat)
        *计算平移矩阵
        hom_mat2d_translate (HomMat, ModelRow[MatchingObjIdx], ModelColumn[MatchingObjIdx], HomMat)
        affine_trans_contour_xld (ModelContours, TransContours, HomMat)
        *显示中心点
        gen_cross_contour_xld (Cross,ModelRow[MatchingObjIdx], ModelColumn[MatchingObjIdx], 10, ModelAngle)
        dev_set_color ('green')
        dev_set_line_width (3)
        dev_display (TransContours)
        dev_display (Cross)
    endfor
endwhile
clear_shape_model (ModelId)
close_framegrabber (AcqHandle)
匹配圆形药片:



  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值