zoukankan      html  css  js  c++  java
  • Halcon_机器视觉_模板匹配+跟随+测量

    *采图
    list_files ('E:/Halcon/Halcon练习/Week 03/day 04/作业/board', ['files','follow_links'], ImageFiles)
    tuple_regexp_select (ImageFiles, ['\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
    read_image (Image, ImageFiles[0])
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    *获取模板
    gen_rectangle1 (ROI_0, 196.724, 187.256, 290.883, 404.241)
    area_center (ROI_0, Area, Row, Column) //获取中心的行列坐标
    reduce_domain (Image, ROI_0, ImageReduced)//单区域抠图
    *add_channels (ROI_0, ImageReduced, GrayRegions)//多区域抠图
    *生成模板
    *inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, [25,40])//查看模板
    create_shape_model (ImageReduced, 4, 0, 6.29, 'auto', 'none', 'use_polarity', [25,40], 10, ModelID)
    get_shape_model_contours (ModelContours, ModelID, 1) //获取模板
    hom_mat2d_identity (HomMat2DIdentity)//单位矩阵
    gen_rectangle2 (ROI_000, 160, 302, 0, 163, 7) //区域跟随
    gen_rectangle2_contour_xld (Rectangle, 140, 302, 0, 163, 7) //XLD跟随
    dev_get_window (WindowHandle)
    dev_set_line_width (2)
    set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
    for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.7, Row1, Column1, Angle, Score)
    *模板仿射变换
    hom_mat2d_translate (HomMat2DIdentity,Row1, Column1, HomMat2DTranslate)//平移矩阵
    hom_mat2d_rotate (HomMat2DTranslate, Angle, Row1, Column1, HomMat2DRotate)//旋转矩阵
    affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DRotate)
    *跟随1,使用vector_angle_to_rigid算子 刚体变换
    vector_angle_to_rigid ( Row, Column, 0, Row1, Column1, Angle, HomMat2D)
    * affine_trans_region (ROI_000, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
    affine_trans_contour_xld (Rectangle, ContoursAffineTrans1, HomMat2D)
    * area_center (RegionAffineTrans, Area1, Row2, Column2)
    area_center_xld (ContoursAffineTrans1, Area1, Row2, Column2, PointOrder)
    dev_display (Image)
    dev_display (ContoursAffineTrans)
    * dev_display (RegionAffineTrans) //区域
    dev_display (ContoursAffineTrans1)
    *测量1
    gen_measure_rectangle2 (Row2, Column2,Angle, 162, 7, Width, Height, 'nearest_neighbor', MeasureHandle)
    measure_pairs (Image, MeasureHandle, 3, 50, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
    *显示
    disp_line (WindowHandle, RowEdgeFirst-8*cos(Angle), ColumnEdgeFirst-8*sin(Angle), RowEdgeFirst+8*cos(Angle), ColumnEdgeFirst+8*sin(Angle))
    disp_line (WindowHandle, RowEdgeSecond-8*cos(Angle), ColumnEdgeSecond-8*sin(Angle), RowEdgeSecond+8*cos(Angle), ColumnEdgeSecond+8*sin(Angle))


    *下引角
    *仿射变换跟随2,使用hom_mat2d_translate,hom_mat2d_rotate,affine_trans_pixel
    *先平移矩阵,再旋转矩阵.基于0,0点
    hom_mat2d_translate (HomMat2DIdentity, Row1+104, Column1+6, HomMat2DTranslate1)
    hom_mat2d_rotate (HomMat2DTranslate1, Angle, Row1, Column1, HomMat2DRotate1)
    affine_trans_pixel (HomMat2DRotate1, 0, 0, RowTrans, ColTrans)
    gen_rectangle2_contour_xld (Rectangle1, RowTrans, ColTrans, Angle,162, 7)
    *测量2
    gen_measure_rectangle2 ( RowTrans, ColTrans, Angle, 162, 7, Width, Height, 'nearest_neighbor', MeasureHandle1)
    measure_pairs (Image, MeasureHandle1, 3, 50, 'all', 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, IntraDistance1, InterDistance1)
    disp_line (WindowHandle, RowEdgeFirst1-8*cos(Angle), ColumnEdgeFirst1-8*sin(Angle), RowEdgeFirst1+8*cos(Angle), ColumnEdgeFirst1+8*sin(Angle))
    disp_line (WindowHandle, RowEdgeSecond1-8*cos(Angle), ColumnEdgeSecond1-8*sin(Angle), RowEdgeSecond1+8*cos(Angle), ColumnEdgeSecond1+8*sin(Angle))
    distancel:=mean([IntraDistance,IntraDistance1])
    distancelMin:=min([IntraDistance,IntraDistance1])
    dev_disp_text ('引角间隔平均值为:'+distancel$'0.4'+'px', 'window', 12, 12, 'black', [], [])
    dev_disp_text ('引角间隔最小为:'+distancelMin$'0.4'+'px', 'window', 42, 12, 'black', [], [])
    dev_disp_text ('引角总数为'+|[IntraDistance,IntraDistance1]|, 'window', 72, 12, 'black', [], [])

    *仿射变换3.区域基原位置变换,相对的平移矩阵,再旋转矩阵.
    hom_mat2d_translate (HomMat2DIdentity, Row1-Row, Column1-Column, HomMat2DTranslate2)
    hom_mat2d_rotate (HomMat2DTranslate2, Angle, Row1, Column1, HomMat2DRotate2)
    affine_trans_region (ROI_000, ROI_001, HomMat2DRotate2, 'nearest_neighbor')
    *及时释放句柄空间
    close_measure (MeasureHandle)
    close_measure (MeasureHandle1)
    dev_display (ROI_001)
    stop ()
    endfor
    clear_shape_model (ModelID)

  • 相关阅读:
    Java学习笔记8(面向对象3:接口)
    面向对象2(继承,抽象类)
    java学习笔记6(面向对象1:概念,private)
    排序方法-循环和数组练习
    ArrayList方法综合练习
    Eclipse的配置
    集合(ArrayList)简述
    java学习笔记5(方法)
    数据结构9——最小生成树
    数据结构8——图的遍历
  • 原文地址:https://www.cnblogs.com/momj/p/14691831.html
Copyright © 2011-2022 走看看