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

来源:互联网 发布:域名被抢注怎么办 编辑:程序博客网 时间:2024/05/18 00:15

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)    endforendwhileclear_shape_model (ModelId)close_framegrabber (AcqHandle)
匹配圆形药片:



原创粉丝点击