Halcon 模板匹配基于相关性

文章目录

基于相关性

适用场景

模板匹配:当你需要在图像中找到一个已知的模板时,例如在工业生产线上检测产品的特定标识或零件的特征时,相关性匹配是一种简单而有效的方法。

实时应用:相关性匹配通常具有较快的计算速度,因此适合用于实时应用,比如机器人视觉、自动驾驶中的目标检测等场景。

光照变化较小:相关性匹配对光照变化不敏感,因此在光照变化相对较小的场景下,它的匹配效果会更好。

少量变形:当物体存在轻微的旋转、缩放或畸变时,相关性匹配通常能够保持较好的匹配性能。

    创建匹配模板

    + create_ncc_model( Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID )
    Template(in):单通道图像,它的区域可被创建为模板
    NumLevels(in):金字塔的最大层级
    AngleStart(in):模板的最小旋转
    AngleExtent(in):旋转角度范围
    AngleStep(in):角度步长
    Metric(in):匹配标准
    ModelID(out):模板句柄
    
     
     

      查找模板

      + find_ncc_model( Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score )
      Image(in):单通道图像,它的区域可被创建为模板
      ModelID(in):模板句柄
      AngleStart(in):模板的最小旋转
      AngleExtent(in):旋转角度范围
      MinScore(in):被找到的模板最小分数
      NumMatches(in):被找到的模板个数
      MaxOverlap(in):被找到的模板实例最大重叠部分
      SubPixel(in):亚像素级别标志,true,false
      NumLevels(in):金字塔层级数
      Row(out):被找到的模板实例行坐标
      Column(out):被找到的模板实例列坐标
      Angle(out):被找到的模板实例的旋转角度
      Score(out):被找到的模板实例的分数
      
       
       

        清除模板

        + clear_ncc_model( : : ModelID : ) 句柄
        
         
         

          不同的曝光下模板匹配
          在这里插入图片描述

          * This example program shows how to use HALCON's correlation-based
          * matching. In particular it demonstrates the robustness of this method against
          * linear illumination changes.  The training is performed in an image with good
          * illumination.  The matching is applied in images where the exposure time varies
          * extremely from very short to very long.
          read_image (Image, 'cap_exposure/cap_exposure_03')
          dev_close_window ()
          dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
          set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
          dev_update_off ()
          *绘制圆
          gen_circle (Circle, 246, 336, 150)
          *获取区域圆点坐标
          area_center (Circle, Area, RowRef, ColumnRef)
          *裁剪图片
          reduce_domain (Image, Circle, ImageReduced)
          *创建匹配模板
          create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID)
          dev_set_draw ('margin')
          dev_display (Image)
          dev_set_color ('yellow')
          dev_display (Circle)
          disp_message (WindowHandle, 'Trained NCC model', 'window', 12, 12, 'black', 'true')
          disp_continue_message (WindowHandle, 'black', 'true')
          stop ()
          Rows := []
          Cols := []
          for J := 1 to 10 by 1
              read_image (Image, 'cap_exposure/cap_exposure_' + J$'02')
              find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)
              Rows := [Rows,Row]
              Cols := [Cols,Column]
              dev_display (Image)
              *显示匹配结果
              dev_display_ncc_matching_results (ModelID, 'green', Row, Column, Angle, 0)
              disp_message (WindowHandle, 'Found NCC model', 'window', 12, 12, 'black', 'true')
              if (J < 10)
                  disp_continue_message (WindowHandle, 'black', 'true')
              endif
              stop ()
          endfor
          * Compute the standard deviation of the found positions.  If the individual
          * positions in Rows and Cols are examined, it can be seen that the standard
          * deviation is caused mainly by the last four images, which are severely
          * overexposed.
          StdDevRows := deviation(Rows)
          StdDevCols := deviation(Cols)
          
           
           

            在这里插入图片描述

            获取模板参数

            + determine_ncc_model_params(Template : : NumLevels, AngleStart, AngleExtent, Metric, Parameters : ParameterName, ParameterValue)
            NumLevels:金字塔的最大层级,层数越多搜索的越快,可设为“auto”或010的整数。设置“auto”或0时create_ncc_model自动
            AngleStart:模板旋转的起始角度(弧度)
            AngleExtent:模板旋转角度范围 >=0
            Metric:匹配标准 ‘use_polarity’ 使用全局,如果图像对比度不好,可用忽略全局’ignore_global_polarity’。'use_polarity'目标和背景的灰度关系保持模板和要匹配的区域灰度关系相同。 ‘ ignore_global_polarity ’对比度完全逆转也就是物体比背景颜色深也可以找到他Parameters:'all'/'num_levels'/'angle_step'  确定参数
            

            控制输出参数:
            ParameterName:Parameters中选择的参数
            ParameterValue:Parameters中选择参数的具体值

              在这里插入图片描述

              * This example program shows how to use HALCON's
              * operator determine_ncc_model_params to determine
              * the parameters for a correlation-based matching.
              * 
              dev_update_off ()
              dev_close_window ()
              dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
              for Index := 1 to 3 by 1
                  if (Index == 1)
                      read_image (Image, 'smd/smd_on_chip_05')
                      gen_rectangle1 (Rectangle, 180, 180, 430, 450)
                  elseif (Index == 2)
                      read_image (Image, 'fabrik')
                      gen_rectangle1 (Rectangle, 335, 275, 420, 355)
                  elseif (Index == 3)
                      read_image (Image, 'mreut')
                      gen_rectangle1 (Rectangle, 110, 195, 185, 275)
                  endif
                  dev_resize_window_fit_image (Image, 0, 0, -1, -1)
                  set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
                  dev_display (Image)
                  dev_set_draw ('margin')
                  dev_set_line_width (2)
                  dev_set_color ('green')
                  dev_display (Rectangle)
                  reduce_domain (Image, Rectangle, ImageReduced)
                  determine_ncc_model_params (ImageReduced, 'auto', -0.39, 0.79, 'use_polarity', 'all', ParameterName, ParameterValue)
                  Message := 'NCC model parameters:'
                  for I := 0 to |ParameterName| - 1 by 1
                      Message[I + 1] := ParameterName[I] + ': ' + ParameterValue[I]
                  endfor
                  disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
                  if (Index < 3)
                      disp_continue_message (WindowHandle, 'black', 'true')
                  endif
                  stop ()
              endfor
              dev_update_on ()
              
               
               

                使用匹配助手

                选中助手
                在这里插入图片描述打开Halcon 自带文件C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/barcode/gs1databar_limited/gs1databar_limited_01.png
                在这里插入图片描述选中要匹配的区域
                在这里插入图片描述选中基于互相关创建好模板
                在这里插入图片描述参数对应create算子
                在这里插入图片描述应用对应find算子
                在这里插入图片描述加载另一张图片
                在这里插入图片描述> 查找模板
                在这里插入图片描述点击插入代码
                在这里插入图片描述
                在这里插入图片描述

                * 
                * Matching 03: ************************************************
                * Matching 03: BEGIN of generated code for model initialization
                * Matching 03: ************************************************
                * 
                * Matching 03: Obtain the model image
                read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/boxes/cardboard_boxes_01.png')
                * 
                * Matching 03: Build the ROI from basic regions
                gen_rectangle2 (ModelRegion, 382.938, 520.5, rad(128.186), 236.162, 193.603)
                * 
                * Matching 03: Reduce the model template
                reduce_domain (Image, ModelRegion, TemplateImage)
                * 
                * Matching 03: Create the correlation model
                create_ncc_model (TemplateImage, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
                * 
                * Matching 03: Get the reference position
                area_center (ModelRegion, ModelRegionArea, RefRow, RefColumn)
                * 
                * Matching 03: Display the model region
                dev_display (Image)
                dev_set_color ('green')
                dev_set_draw ('margin')
                dev_display (ModelRegion)
                gen_cross_contour_xld (TransContours, RefRow, RefColumn, 20, 0.0)
                dev_display (TransContours)
                stop ()
                * 
                * Matching 03: END of generated code for model initialization
                * Matching 03:  * * * * * * * * * * * * * * * * * * * * * * *
                * Matching 03: BEGIN of generated code for model application
                * 
                * Matching 03: Loop over all specified test images
                TestImages := ['C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/boxes/cardboard_boxes_03.png']
                for T := 0 to 0 by 1
                    * 
                    * Matching 03: Obtain the test image
                    read_image (Image, TestImages[T])
                    * 
                    * Matching 03: Find the model
                    find_ncc_model (Image, ModelID, rad(0), rad(360), 0.8, 0, 0.5, 'true', 0, Row, Column, Angle, Score)
                    * 
                    * Matching 03: Display the centers of the matches in the detected positions
                    dev_display (Image)
                    for I := 0 to |Score| - 1 by 1
                        * Matching 03: Display the center of the match
                        gen_cross_contour_xld (TransContours, Row[I], Column[I], 20, Angle)
                        dev_set_color ('green')
                        dev_display (TransContours)
                        hom_mat2d_identity (AlignmentHomMat2D)
                        hom_mat2d_translate (AlignmentHomMat2D, -RefRow, -RefColumn, AlignmentHomMat2D)
                        hom_mat2d_rotate (AlignmentHomMat2D, Angle[I], 0, 0, AlignmentHomMat2D)
                        hom_mat2d_translate (AlignmentHomMat2D, Row[I], Column[I], AlignmentHomMat2D)
                        * Matching 03: Display the aligned model region
                        affine_trans_region (ModelRegion, RegionAffineTrans, AlignmentHomMat2D, 'nearest_neighbor')
                        dev_display (RegionAffineTrans)
                        * Matching 03: Insert your code using the alignment here, e.g. code generated by
                        * Matching 03: the measure assistant with the code generation option
                        * Matching 03: 'Alignment Method' set to 'Affine Transformation'.
                        stop ()
                    endfor
                endfor
                * 
                * Matching 03: *******************************************
                * Matching 03: END of generated code for model application
                * Matching 03: *******************************************
                * 
                
                 
                 

                  手写案例

                  手写案例

                  相机采集

                  选中助手
                  在这里插入图片描述采集助手
                  在这里插入图片描述
                  在这里插入图片描述
                  自动检测端口
                  在这里插入图片描述

                  选择事实
                  在这里插入图片描述
                  在这里插入图片描述

                  转载自:https://blog.csdn.net/weixin_45672157/article/details/134968436
                  • 0
                    点赞
                  • 0
                    收藏
                    觉得还不错? 一键收藏
                  • 0
                    评论
                  评论
                  添加红包

                  请填写红包祝福语或标题

                  红包个数最小为10个

                  红包金额最低5元

                  当前余额3.43前往充值 >
                  需支付:10.00
                  成就一亿技术人!
                  领取后你会自动成为博主和红包主的粉丝 规则
                  hope_wisdom
                  发出的红包
                  实付
                  使用余额支付
                  点击重新获取
                  扫码支付
                  钱包余额 0

                  抵扣说明:

                  1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                  2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                  余额充值