zoukankan      html  css  js  c++  java
  • 图像处理笔记(十八):模板匹配

    试一下多种方式的模板匹配:

    dev_close_window ()
    read_image(Image, '2008531173479_2')
    dev_open_window_fit_image(Image, 0, 0, 512, 512, WindowHandle)
    dev_display(Image)
    
    * 从原图中裁切一块作为模板
    crop_part(Image, ImagePart, 445, 250, 240, 220)
    dev_set_draw('margin')
    mean_image(ImagePart, ImageMean, 3, 3)
    rgb1_to_gray(ImageMean, GrayImage)
    * 将原图缩小到一半
    zoom_image_size(GrayImage, GrayImage, 120, 110, 'constant')
    * 使用切出来创建一个ncc模板(模板生成方式1)
    create_ncc_model(GrayImage, 'auto', -0.39, 0.79, 'auto', 'use_polarity', ModelID)
    rotate_image(Image, ImageRotate, 45, 'constant')
    rgb1_to_gray(Image, GrayImage1)
    * 匹配
    find_ncc_model(GrayImage1, ModelID, -0.39, 0.79, 0.8, 1, 0.1, 'true', 0, Row, Column, Angle, Score)
    if (|Row| > 0)
        gen_rectangle1(Rectangle, Row - 100, Column - 100, Row + 100, Column + 100)
    endif
    
    * 模板生成方式2,这个模板是可以旋转匹配的,也就是说,如果图像旋转了,上面那个模板就匹配不到
    create_ncc_model(GrayImage, 'auto', 0, rad(360), 'auto', 'use_polarity', ModelID1)
    rgb1_to_gray(ImageRotate, GrayImage2)
    find_ncc_model(GrayImage2, ModelID1, 0, rad(360), 0.8, 1, 0.1, 'true', 0, Row1, Column1, Angle1, Score1)
    if (|Row1| > 0)
        gen_rectangle2(Rectangle1, Row1, Column1, Angle1, 100, 100)
    endif
    
    * 模板生成方式3,这个模板是适合有缩放或有旋转的匹配的,如果模板进行了缩放或者图像进行了缩放,上面那两个模板都会匹配不了
    * 旋转角度范围和图片缩放比例可配,如果支持的范围太大的话,会影响匹配速度。
    create_scaled_shape_model(GrayImage, 'auto', 0, rad(140), 'auto', 0.5, 10, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID2)
    find_scaled_shape_model(GrayImage2, ModelID2, 0, rad(140), 0.5, 10, 0.5, 1, 0.5, 'least_squares', 0, 0.1, Row2, Column2, Angle2, Scale, Score2)
    if (|Row2| > 0)
        gen_rectangle2(Rectangle2, Row2, Column2, Angle2, 100, 100)
    endif
    

    看一下最后一种方式,
    create_scaled_shape_model(Template, 输出值,模板
    NumLevels, 图像金字塔层数,用来降低匹配时长,每增加一层图像的宽高就会减半,图像分辨率会降低
    AngleStart, 旋转开始的弧度
    AngleExtend, 旋转的角度范围
    AngleStep, 旋转步长,如果不知道怎么设置,可以设置为auto,步长设置的越小,越占用内存,越慢
    ScaleMin, 最小缩放倍数
    ScaleMax, 最大缩放倍数
    ScaleStep, 缩放步长,可以设置为auto
    Optimization, 优化方式
    Metric, 是否使用极性,如果使用极性,那么如果模板背景灰度弱,前景灰度强,那么匹配的图片也必须满足这样的条件;如果不要求极性,当匹配的图片背景灰度强,前景灰度弱的时候也会匹配到,忽略极性会导致匹配耗时增加
    Contrast, 和模板图片对比度相关的一个阈值,可以直接使用auto
    MinContrast, 用来匹配的图片的最小对比度
    ModelID) 输出值,模板ID

    find_scaled_shape_model(Image, 用来查找的图片
    ModelID, 模板ID
    AngleStart,
    AngleExtent,
    ScaleMin,
    ScaleMax,
    MinScore, 匹配的最低分数,大于这个分数的才是被接受的匹配
    NumMatches, 需要找的匹配数量
    MaxOverlap, 最大重叠
    SubPixel, 是否亚像素精度
    NumLevels, 图像金字塔层数
    Greediness, 搜索贪婪度,0-1,越大搜索越快,可以理解为搜得越不仔细
    Row, 搜索到的行坐标
    Column, 搜索到的列坐标
    Angle, 相对于x轴正半轴的旋转角度
    Scale, 图片相对于模板的缩放倍数bc
    Score) 得分

    搜索到的行列坐标都是匹配上的模板中心坐标。模板的中心坐标默认是模板的原点坐标,可以通过set_shape_model_origin来进行调整。
    当模板是对称的时候,需要控制旋转角度来防止搜索到多个角度不同的相同匹配

  • 相关阅读:
    JavaScript中的原型和继承
    Classical Inheritance in JavaScript
    jquery.cookie 使用方法
    Backbone.js 使用 Collection
    Backbone.js 中使用 Model
    Backbone.js 使用模板
    Java并发编程:volatile关键字解析zz
    eclipse 搭建Swt 环境
    Adams输出宏代码
    根据圆上三点求圆心及半径
  • 原文地址:https://www.cnblogs.com/yutou2016/p/11177711.html
Copyright © 2011-2022 走看看