欢迎光临散文网 会员登陆 & 注册

【Halcon学习笔记】08.图像测量(2D)

2022-07-06 14:07 作者:Ryou2  | 我要投稿

1.概述

        Halcon中的2D Metrology模块提供了亚像素级别的卡尺测量功能,可以测量的几何形状包括直线、圆、椭圆、矩形。

        2D测量模型使用起来相对方便,如要测圆的半径,只要设置圆心坐标和模板半径,之后就能在模板半径内设置个测量范围,在测量范围内的边缘会被提取出来,从而自动测出圆的实际半径。


2. 相关概念

2.1 计量模型(metrology model)

          包含所有计量对象、测量所需的所有信息以及测量结果的数据结构。

2.2 计量对象(metrology object)

        用2D计量测量对象的数据结构。计量对象由特定的几何形状表示,形状参数大致为已知。此外,它包含控制测量的参数,例如指定测量区域的尺寸和分布的参数。

2.3 测量区域(measure regions)

        排列垂直于近似对象边界的矩形区域。在这些区域中,提取用于获取计量对象精确形状参数的边缘。


3. 相关算子

3.1 创建

        create_metrology_model(MetrologyHandle)

        MetrologyHandle:测量模型句柄

3.2 添加

3.2.1添加直线测量对象到模型              

        add_metrology_object_line_measure()

        MetrologyHandle:测量模型句柄

        RowBegin:测量区域行坐标起点

        ColumnBegin:测量区域列坐标起点

        RowEnd:测量区域行坐标终点

        ColumnEnd:测量区域列坐标终点

        MeasureLength1:垂直于边界的测量区域的一半长度

        MeasureLength2:相切于边界的测量区域的一半长度

        MeasureSigma:用于平滑的高斯函数的 Sigma

        MeasureThreshold:最小边缘幅度阈值

        GenParamName:通用参数的名称

        GenParamValue:通用参数值

        Index:所创建的计量对象的索引

3.2.2 添加圆型测量对象到模型

        add_metrology_object_circle_measure()

         MetrologyHandle:测量模型句柄

        Row:测量区域的圆心行坐标

        Column:测量区域的圆行列坐标

        Radius:测量区域的半径

        MeasureLength1:垂直于边界的测量区域的一半长度

        MeasureLength2:相切于边界的测量区域的一半长度

        MeasureSigma:用于平滑的高斯函数的 Sigma

        MeasureThreshold:最小边缘幅度阈值

        GenParamName:通用参数的名称

        GenParamValue:通用参数值

        Index:所创建的计量对象的索引

3.2.3 添加椭圆测量对象到模型

        add_metrology_object_ellipse_measure()

3.2.3 添加矩形测量对象到模型

        add_metrology_object_rectangle2_measure()

3.3 设置

3.3.1 设置测量对象参数

        set_metrology_object_param()

        MetrologyHandle:测量模型句柄

        Index指定计量对象,为all时所有计量对象的参数都被设置('all')

        GenParamName:通用参数的名称

                'measure_length1':区域,垂直于边界的测量区域的一半长度

                'measure_length2':区域,相切于边界的测量区域的一半长度

                'measure_distance':区域,两个测量区域中心之间的距离

                'num_measures':区域,测量区域数

                'measure_sigma':测量,用于平滑的高斯函数的 Sigma

                'measure_threshold':测量,最小边缘幅度阈值

                'measure_select':测量,边缘端点的选择('last'、'first')

                'measure_transition':测量,方向('all'、'negative'、 'positive')

                'measure_interpolation':测量,插值类型

                'min_score':拟合,最小分数

                'num_instances':拟合,成功拟合实例的最大数量

                'distance_threshold':拟合,距离阈值

        GenParamValue:通用参数值

3.3.2 设置对整个计量模型有效的参数

        set_metrology_model_param()

        MetrologyHandle:测量模型句柄

        GenParamName:通用参数的名称

                'camera_param':是否使用相机内部参数

                'plane_pose':是否相机三维姿态

                'reference_system':根据图像坐标系的平移(行、列)和旋转角度(角度),定义一种新的参考系统

                'scale':期望单位与原始单位的比率

        GenParamValue:通用参数值

3.3.3 对齐测量模型位置(校准)

        align_metrology_model()

        MetrologyHandle:测量模型句柄
        Row:对齐测量模型的行坐标
        Column:对齐测量模型的列坐标
        Angle:对齐测量模型的旋转角度

3.4 执行

        apply_metrology_model()

        Image:输入的测量图像
        MetrologyHandle:测量模型句柄

3.5 获取

3.5.1 获取计量模型的计量对象的测量区域和边缘位置结果

        get_metrology_object_measures()

        Contours:测量区域的矩形 XLD 轮廓
        MetrologyHandle:测量模型句柄
        Index:指定计量对象,为all时所有计量对象的参数都被设置('all')
        Transition:选择亮/暗或暗/亮边缘('all'、'negative'、 'positive')
        Row:测量边缘的行坐标集
        Column:测量边缘的列坐标集

3.5.2 获取计量模型的计量对象的结果轮廓

        get_metrology_object_result_contour()

        Contour:给定计量对象的结果轮廓。

        MetrologyHandle:测量模型句柄

        Index:指定计量对象,为all时所有计量对象的参数都被设置('all')

        Instance:计量对象的实例('all')

        Resolution:相邻轮廓点之间的距离

3.5.3 获取计量模型的计量对象的结果

        get_metrology_object_result()

        Contour:给定计量对象的结果轮廓。

        MetrologyHandle:测量模型句柄

        Index:指定计量对象,为all时所有计量对象的参数都被设置('all')

        GenParamName:通常设置为’result_type’,表示用GenParamValue返回方式和结果

        GenParamValue:通常设置为’all_param’,表示将所有测量参数到Parameter

        Parameter:返回的参数值

                对于直线:返回 [‘row_begin’,‘column_begin’,‘row_end’,‘column_end’]

                对于圆型返回[‘row’,‘column’,‘radius’]或 [‘x’,‘y’,‘radius’]

                对于椭圆:返回[‘row’,‘column’,‘phi’,‘radius1’,‘radius2’]

                对于矩形:返回[‘row’,‘column’,‘phi’,‘length1’,‘length2’]

3.6 释放

        clear_metrology_model()

        MetrologyHandle:测量模型句柄


4.模型测量在Halcon中的应用步骤

4.1 应用步骤

4.2 例程要求    

        测量矩形标签的像素长度。

4.3 实现步骤

1)找到模板图片的区域中心(跟随对齐用)

        var_threshold (Image, Region, 100, 100, 0.5, 5, 'dark')

        fill_up (Region, RegionFillUp)

        connection (RegionFillUp, ConnectedRegions)

        select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 

        smallest_rectangle2 (SelectedRegions, RowM, ColumnM, PhiM, Length1, Length2)

        disp_cross (WindowHandle, RowM, ColumnM, 100, PhiM)

2)画出模板图片的测量区域

        recR:=1830

        recC:=2220

        recA:=0

        recL1:=960

        recL2:=70

        gen_rectangle2 (rec, recR, recC, rad(recA), recL1, recL2)

3)创建测量模型句柄

        create_metrology_model (MetrologyHandle)

4)添加直线测量模型

        add_metrology_object_line_measure (MetrologyHandle, recR, recC-recL1,recR, recC+recL1, recL1/4, recL2/2, 1, 20, [], [], Index)

5)设置测量对象参数

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 50) 

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 10)

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_distance', 20)

        set_metrology_object_param (MetrologyHandle, 'all', 'min_score',0.6)

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 1)

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')

        set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')

        set_metrology_model_param (MetrologyHandle, 'reference_system', [RowM, ColumnM,PhiM]) 

6)找到运行图片的区域中心(跟随对齐用)

        var_threshold (Image, Region, 100, 100, 0.5, 5, 'dark')

        fill_up (Region, RegionFillUp)

        connection (RegionFillUp, ConnectedRegions)

        select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 

        smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2)

7)跟随对齐测量模型

(理解:上面的测量卡尺已经创建好了,目前的问题在于将卡尺放在哪个位置。设置一个模板的跟随点,就是说模板图片卡尺在RowM, ColumnM的位置,现在同样找到测试图片的Row, Column的位置,就有对应关系可以对齐卡尺,原理同仿射变换)

        align_metrology_model (MetrologyHandle, Row, Column,Phi)

8)执行测量

        apply_metrology_model (Image, MetrologyHandle)

9)获取测量数据

        get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)

        get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row2, Column2)

        get_metrology_object_result_contour (Contour1, MetrologyHandle, 'all', 'all', 1.5)

10)计算测量数据

            distance_pp (Parameter[0], Parameter[1], Parameter[2], Parameter[3], Distance)

            disp_message (WindowHandle, 'Lenght:'+Distance, 'window', 0, 10, 'green', 'false')

11)释放模型

            clear_metrology_model (MetrologyHandle)


by Ryou2-

【Halcon学习笔记】08.图像测量(2D)的评论 (共 条)

分享到微博请遵守国家法律