Halcon2D测量-边缘直线测量+圆环测量

  • 二维测量有一种形态学的方法,参照我之前的博客。
    形态学方法测量
  • 本文主要介绍一种建立测量模型的方法,对直线和圆进行测量.
一.圆心度测量
1.设定测量模型
  • 首先将我们将待测量圆的半径圆心,以及容错度声明出来。
  • 创建测量句柄
 *1.创建测量句柄
        create_metrology_model (MetrologyHandle)
        set_metrology_model_image_size (MetrologyHandle, Width, Height)
  • 初始化测量模型,这里用到我们第一步声明的圆的信息
    1.CircleRadiusTolerance:也就是容错度,我们绘制测量矩形的高。
    2.CircleRadiusTolerance2:测量矩形的宽。
    2.sigma:高斯滤波掩膜大小
    3.MeasureThreshold:检测边缘的阈值
        add_metrology_object_circle_measure (MetrologyHandle, CircleInitRow, CircleInitColumn, CircleInitRadius, CircleRadiusTolerance, CircleRadiusTolerance2, sigma, MeasureThreshold, [], [], MetrologyCircleIndices)
  • 为测量模型设置参数
*‘uniform’参数是放置区域出现正负边缘,只测量正边缘或负边缘
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'measure_transition', 'uniform')
*最小分数值,与匹配道理一样,背景环境越复杂,分数设定应该越高
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'min_score', .1)
  • 得到测量模型,绑定一个点,从此测量模型随该点移动
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)
  set_metrology_model_param (MetrologyHandle, 'reference_system', [Row,Column,0])
        dev_set_color('green')
 get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)

Halcon2D测量-边缘直线测量+圆环测量_第1张图片

二.使用测量模型进行测量
  • 应该有注意到,测量模型被仿射到row=0,column=0的位置。
  • 将模型添加到当前图像的位置
 align_metrology_model (MetrologyHandle, Row, Column, 0)
apply_metrology_model (OrginImage, MetrologyHandle)
  • 两种方法得到边缘
    1.获得测量模型内检测到区域所有的点
    Halcon2D测量-边缘直线测量+圆环测量_第2张图片
  • 如果区域有噪声,这种方法并不理想
    2.获得边缘点
    Halcon2D测量-边缘直线测量+圆环测量_第3张图片
  get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'row', UsedRow)
 get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'column', UsedColumn)
  • 并将这些边缘点拟合成线
  gen_cross_contour_xld (UsedEdges, UsedRow, UsedColumn, 2, rad(45))      
  gen_contour_polygon_xld(Contour,UsedRow, UsedColumn)  
 * 拟合圆
  fit_circle_contour_xld(Contour, 'algebraic', -1, 0, 0, 3, 2, FinalRow, FinalColumn, FinalRadius, StartPhi, EndPhi, PointOrder)

Halcon2D测量-边缘直线测量+圆环测量_第4张图片

  • 本图圆环有一定阴影,采用图像增强去噪
    Halcon2D测量-边缘直线测量+圆环测量_第5张图片
  scale_image (Image, ImageScaled, 3.5, -100)
二.测量模型边缘检测
  • 思路与圆检测一样
  • 在初始化模型的位置,有所改变
  • LineRow1, LineColumn1, LineRow2, LineColumn2,边缘线的起始点和终点
add_metrology_object_line_measure (MetrologyHandle, LineRow1, LineColumn1, LineRow2, LineColumn2, Tolerance, 5, 1, 20, [], [], Index1)

Halcon2D测量-边缘直线测量+圆环测量_第6张图片

  • 通过上述方法二,得到边缘点
 get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'row', UsedRow)
    get_metrology_object_result (MetrologyHandle, 'all', 'all', 'used_edges', 'column', UsedColumn)

Halcon2D测量-边缘直线测量+圆环测量_第7张图片

你可能感兴趣的:(Halcon,机器视觉,三维重建)