• halconfind_shape_model形状模板匹配


    形状匹配原理:模板创建后,会根据模板中的边缘等关系去图像中进行搜索,可以理解成提取模板中的灰度发生变化的那些点,然后再去图像中匹配,这样的效果是对干扰比较稳定,匹配速度快,并且即使边缘发生部分遮挡,匹配效果依旧较好

    定位对象内部的灰度值可以有变化,但对象边缘轮廓必须清晰平滑的场合

    在HDevelop中

    dev_close_window ()
    read_image (Image, 'D:/bb/tu/3.jpg')
    rgb1_to_gray (Image, GrayImage)
    
    ****截取模板图像:B字母****
    gen_rectangle1 (Rectangle, 16, 120, 69, 172)
    reduce_domain (GrayImage, Rectangle, ImageReduced)
    get_image_size (ImageReduced, Width, Height)
    dev_open_window(10,100,Width, Height,'black',WindowHandle1)
    *显示模板图像
    dev_display(ImageReduced)
    
    inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
    *预览金字塔
    *金字塔多少层比较合适,可以通过ModelRegions观看--为后面创建模板做准备
    *参数1:输入模板图像
    *参数2:输出的金字塔图像
    *参数3:金字塔区域
    *参数4:金字塔层数
    *参数5:图像中物体对比度的阈值或滞后阈值,以及可选的物体部分的最小尺寸
    
    
    create_shape_model (ImageReduced, 'auto', -0.2, 0.2, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
    *创建形状模板
    *参数1:模板图像(reduce_domain后)
    *参数2:金字塔的最大层级--层级越高搜索越快
    *      值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'
    *参数3:模板旋转的起始角度--弧度
    *参数4:模板旋转的终止角度--弧度
    *参数5:角度步长
    *       限制:角度步长>=0和角度步长<=pi/16
    *参数6:设置模板优化和模板创建方法
    *       'auto'
    *       'no_pregeneration'
    *       'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration'
    *参数7:匹配方法设置
    *       'ignore_color_polarity'    即使颜色对比度在局部发生变化,也会找到模型--可用于具有任意数量通道的图像
    *       'ignore_global_polarity'   如果对比度(比如亮背景暗前景)全局反转,也会在图像中找到对象--只能应用于单通道图像
    *       'ignore_local_polarity'    即使对比度在局部发生变化,也会找到模型--只能应用于单通道图像
    *       'use_polarity'   则图像中的对象和模型必须具有相同的对比度。例如,如果模型是暗背景上的明亮对象,则仅当该对象也比背景亮时,才能找到该对象--只能应用于单通道图像  
    *                        如果多通道图像用作模型图像或搜索图像,则只会使用第一个通道(并且不会返回错误消息)
    *参数8:设置对比度
    *参数9:设置最小对比度
    *参数10:模板句柄
    
    
    find_shape_model (GrayImage, ModelID, -0.2, 0.2, 0.5, 6, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
    *形状模板匹配
    *参数1:输入图像
    *参数2:模板句柄
    *参数3:搜索时的起始角度
    *参数4:搜索时的终止角度,必须与创建模板时的有交集
    *参数5:被找到的模板最小分数--大于等于这个值才能被匹配
    *      默认值:0.5      建议值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
    *      典型值范围:0≤MinScore ≤ 1
    *      最小增量:0.01       建议增量:0.05
    *参数6:要找到的模板最大实例数
    *       0   不限制
    *参数7:要找到的模型实例的最大重叠比例
    *      默认值:0.5       建议值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
    *      典型值范围:0≤ MaxOverlap≤ 1      最小增量:0.01     建议增量:0.05
    *      0 表示不允许重叠
    *参数8:计算精度的设置
    *        'none'   不适用亚像素,最大误差为半个像素
    *        'interpolation'   差值得到亚像素精度
    *        'least_squares', 'least_squares_high', 'least_squares_very_high'
    *        'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4'
    *        'max_deformation 5', 'max_deformation 6'
    *参数9:搜索时金字塔的层级
    *参数10:贪婪度,搜索启发式,一般都设为0.8,越高速度快,容易出现找不到的情况
    *       0≤ Greediness ≤ 1   
    *最后4个:输出匹配位置的行和列坐标、角度、得分 【中心坐标】


    在QtCreator中

      HObject  ho_Image, ho_GrayImage, ho_Rectangle;
      HObject  ho_ImageReduced, ho_ModelImages, ho_ModelRegions;
      HTuple  hv_Width, hv_Height, hv_WindowHandle1;
      HTuple  hv_ModelID, hv_Row, hv_Column, hv_Angle, hv_Score;
      ReadImage(&ho_Image, "D:/bb/tu/3.jpg");
      Rgb1ToGray(ho_Image, &ho_GrayImage);
    
      //***截取模板图像:B字母****
      GenRectangle1(&ho_Rectangle, 16, 120, 69, 172);
      ReduceDomain(ho_GrayImage, ho_Rectangle, &ho_ImageReduced);
      GetImageSize(ho_ImageReduced, &hv_Width, &hv_Height);
      SetWindowAttr("background_color","black");
      OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1);
      HDevWindowStack::Push(hv_WindowHandle1);
      //显示模板图像
      if (HDevWindowStack::IsOpen())
        DispObj(ho_ImageReduced, HDevWindowStack::GetActive());
    
      InspectShapeModel(ho_ImageReduced, &ho_ModelImages, &ho_ModelRegions, 4, 30);
      //预览金字塔
      //金字塔多少层比较合适,可以通过ModelRegions观看--为后面创建模板做准备
      //参数1:输入模板图像
      //参数2:输出的金字塔图像
      //参数3:金字塔区域
      //参数4:金字塔层数
      //参数5:图像中物体对比度的阈值或滞后阈值,以及可选的物体部分的最小尺寸
    
    
      CreateShapeModel(ho_ImageReduced, "auto", -0.2, 0.2, "auto", "auto", "use_polarity", 
          "auto", "auto", &hv_ModelID);
      //创建形状模板
      //参数1:模板图像(reduce_domain后)
      //参数2:金字塔的最大层级--层级越高搜索越快
      //     值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'
      //参数3:模板旋转的起始角度--弧度
      //参数4:模板旋转的终止角度--弧度
      //参数5:角度步长
      //      限制:角度步长>=0和角度步长<=pi/16
      //参数6:设置模板优化和模板创建方法
      //      'auto'
      //      'no_pregeneration'
      //      'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration'
      //参数7:匹配方法设置
      //      'ignore_color_polarity'    即使颜色对比度在局部发生变化,也会找到模型--可用于具有任意数量通道的图像
      //      'ignore_global_polarity'   如果对比度(比如亮背景暗前景)全局反转,也会在图像中找到对象--只能应用于单通道图像
      //      'ignore_local_polarity'    即使对比度在局部发生变化,也会找到模型--只能应用于单通道图像
      //      'use_polarity'   则图像中的对象和模型必须具有相同的对比度。例如,如果模型是暗背景上的明亮对象,则仅当该对象也比背景亮时,才能找到该对象--只能应用于单通道图像
      //                       如果多通道图像用作模型图像或搜索图像,则只会使用第一个通道(并且不会返回错误消息)
      //参数8:设置对比度
      //参数9:设置最小对比度
      //参数10:模板句柄
    
    
      FindShapeModel(ho_GrayImage, hv_ModelID, -0.2, 0.2, 0.5, 6, 0.5, "least_squares", 
          0, 0.9, &hv_Row, &hv_Column, &hv_Angle, &hv_Score);
      //形状模板匹配
      //参数1:输入图像
      //参数2:模板句柄
      //参数3:搜索时的起始角度
      //参数4:搜索时的终止角度,必须与创建模板时的有交集
      //参数5:被找到的模板最小分数--大于等于这个值才能被匹配
      //     默认值:0.5      建议值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
      //     典型值范围:0≤MinScore ≤ 1
      //     最小增量:0.01       建议增量:0.05
      //参数6:要找到的模板最大实例数
      //      0   不限制
      //参数7:要找到的模型实例的最大重叠比例
      //     默认值:0.5       建议值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
      //     典型值范围:0≤ MaxOverlap≤ 1      最小增量:0.01     建议增量:0.05
      //     0 表示不允许重叠
      //参数8:计算精度的设置
      //       'none'   不适用亚像素,最大误差为半个像素
      //       'interpolation'   差值得到亚像素精度
      //       'least_squares', 'least_squares_high', 'least_squares_very_high'
      //       'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4'
      //       'max_deformation 5', 'max_deformation 6'
      //参数9:搜索时金字塔的层级
      //参数10:贪婪度,搜索启发式,一般都设为0.8,越高速度快,容易出现找不到的情况
      //      0≤ Greediness ≤ 1
      //最后4个:输出匹配位置的行和列坐标、角度、得分 【中心坐标】

  • 相关阅读:
    浏览器兼容之background-size
    bootstrap学习之全局样式
    bootstrap dropdown的点击变为:hover 后自动下拉
    看完了《缔造企鹅》
    2015年阅读记录
    博士论文致谢 作一下
    如何将Visio转化为EPS? For Latex
    《乌合之众》 古斯塔夫·勒庞
    笑傲江湖
    社会化推荐(一) 理论和实践 对科学的思考
  • 原文地址:https://www.cnblogs.com/liming19680104/p/16057570.html
Copyright © 2020-2023  润新知