• 模型匹配一 行远


    一、 模型匹配

    1. 定义

    模板匹配是一种最基础最原始的模式识别的方法,研究的是一种某种特定的图像在另一个图像中的位置进而识别对象,这是一种匹配问题,不是基于直方图而是通过在输入图像上下左右滑动

    同时对比相似度来对模板和输入图像进行匹配的一种方法。

    2. 分类

    • 基于灰度

               定位图像内部的灰度值没有大的变化,没有缺失部分,没有干扰图像和噪声的场合(不建议使用)

    • 基于形状

               对象内部的灰度值可以有变化,但对象轮廓一定清晰光滑(使用较多)

    • 基于相关性

               搜索的对象有轻微变形,大量纹理,模糊等场合速度较快,但精度低(后期研究下)

    • 基于组件

               组件匹配是形状匹配的扩张,但不支持大小缩放的匹配,一般用于多个对象工件定位的场合。

    3.流程图

     4. 补充两种仿射变换方法

    • 方法一

            vector_angle_to_rigid(0, 0, 0, Row1, Column1, 0, HomMat2D)
            affine_trans_contour_xld(ModelContours, ContoursAffinTrans, HomMat2D)

    • 方法二

           hom_mat2d_identity (HomMat2DIdentity)
           hom_mat2d_translate (HomMat2DIdentity, Row[I], Column[I], HomMat2DTranslate)
           hom_mat2d_rotate (HomMat2DTranslate, Angle[I], Row[I], Column[I], HomMat2DRotate)
           hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
           affine_trans_contour_xld (Model, ModelTrans, HomMat2DScale)

    二、实例

     1 dev_update_window ('off')
     2 read_image (GreenDot, 'E:/学习/Halcon/模板匹配/green-dot.png')
     3 get_image_size(GreenDot, Width, Height)
     4 dev_close_window()
     5 dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
     6 dev_set_color ('red')
     7 dev_display (GreenDot)
     8 
     9 * 获取一张灰度图
    10 rgb1_to_gray(GreenDot, GrayImage)
    11 
    12 *获取感兴趣区域(ROI)
    13 *方法一 直接使用画图工具
    14 * draw_circle(WindowHandle, Row, Column, Radius)
    15 * gen_circle(Circle, Row, Column, Radius)
    16 * reduce_domain(GrayImage, Circle, ImageReduced)
    17 * area_center(Circle, Area, Row1, Column1)
    18 
    19 *方法二 Blob分析(ROI)
    20 threshold (GrayImage, Regions, 22, 72)
    21 connection(Regions, ConnectedRegions)
    22 select_shape (ConnectedRegions, SelectedRegions, ['area','row','column'], 'and', [11632.2,221.2,263.66], [16654.4,295.79,288.77])
    23 fill_up(SelectedRegions, RegionFillUp)
    24 dilation_circle(RegionFillUp, RegionDilation, 5.5)
    25 reduce_domain(GrayImage, RegionDilation, ImageReduced)
    26 area_center(RegionDilation, Area, Row1, Column1)
    27 
    28 *创建模板
    29 create_scaled_shape_model(ImageReduced, 'auto', rad(-45), rad(90), 'auto', 0.8, 1, 'auto', 'auto', 'ignore_local_polarity', 40, 5, ModelID)
    30 *获取模板轮廓
    31 get_shape_model_contours(ModelContours, ModelID, 1)
    32 
    33 *仿射变换
    34 vector_angle_to_rigid(0, 0, 0, Row1, Column1, 0, HomMat2D)
    35 affine_trans_contour_xld(ModelContours, ContoursAffinTrans, HomMat2D)
    36 
    37 *显示
    38 dev_clear_window()
    39 dev_display(GrayImage)
    40 dev_display(ContoursAffinTrans)
    41 
    42 
    43 read_image (GreenDot, 'E:/Halcon/模板匹配/green-dots.png')
    44 get_image_size(GreenDot, Width, Height)
    45 
    46 rgb1_to_gray(GreenDot, GrayImage1)
    47 find_scaled_shape_models(GrayImage1, ModelID, rad(-45), rad(90), 0.8, 1, 0.5, 0, 0.5, 'least_squares', 5, 0.9, Row2, Column2, Angle, Scale, Score, Model)
    48 
    49 for I := 0 to |Score|-1 by 1
    50     *单位矩阵
    51     hom_mat2d_identity(HomMat2DIdentity)
    52     *平移矩阵
    53     hom_mat2d_translate(HomMat2DIdentity, Row2[I], Column2[I], HomMat2DTranslate)
    54     *旋转矩阵
    55     hom_mat2d_rotate(HomMat2DTranslate, Angle[I], Row2[I], Column2[I], HomMat2DRotate)
    56     *缩放矩阵
    57     hom_mat2d_scale(HomMat2DRotate, Scale[I], Scale[I], Row2[I], Column2[I], HomMat2DScale)
    58     
    59     affine_trans_contour_xld(ModelContours, ContoursAffinTrans1, HomMat2DScale)
    60     
    61     dev_display(ContoursAffinTrans1)
    62     
    63 endfor
    View Code

     相关算子解释:

  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/16013928.html
Copyright © 2020-2023  润新知