• 模型匹配一 行远


    一、 模型匹配

    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

     相关算子解释:

  • 相关阅读:
    iOS软件版本更新思路
    Xcode里-ObjC, -all_load, -force_load
    NSFileManager
    [Android问答] px、dp和sp,这些单位有什么区别?
    annot refer to a non-final variable * inside an inner class defined in a different method"错误解析
    android Handler post sendMessage
    谈layout_gravity和gravity的用法
    Android LayoutInflater详解
    Android中pendingIntent的深入理解
    Intent和PendingIntent的区别
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/16013928.html
Copyright © 2020-2023  润新知