Halcon2D量测-点到线的距离

dev_close_window ()
read_image (Image, '测量/0.bmp')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)

dev_display (Image)

* 绘制直线
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
gen_region_line (Line1, Row1, Column1, Row2, Column2)

draw_circle (WindowHandle, CircleRow,CircleCol, CircleRadius)

* 根据绘制的直线坐标构建参数对象
Line1Param := [Row1, Column1, Row2, Column2]
CircleParam := [CircleRow,CircleCol, CircleRadius]
* 1.创建计算测量句柄
create_metrology_model (MetrologyHandle)
* 2.设置测量模型图像的大小,主要是为了提高效率
set_metrology_model_image_size (MetrologyHandle, Width, Height)
* 3.添加测量模型对象
* 参数1:测量句柄
* 参数2:要查找的模型类型 可以是 线 圆 椭圆 旋转矩形
* 参数3:对应的模型参数
*       ‘圆形’:类型圆的计量对象的几何形状由其中心(行,列)和半径指定
*       ‘旋转矩形’:ShapeParam = [行,列,Phi,长度1,长度2]
*       ‘椭圆’:ShapeParam = [行,列,Phi,Radius1,Radius2]
*       ‘线’:ShapeParam = [RowBegin,ColumnBegin,RowEnd,ColumnEnd]
* 参数4:MeasureLength1 垂直于边界的测量区域的一半长度  半长
* 参数5:MeasureLength2 与边界相切的测量区域的一半长度  半宽  vp中的搜索长度类似
* 参数6:MeasureSigma Sigma的高斯函数用于平滑 默认值:1.0   类似于过滤一半像素
* 参数7:MeasureThreshold 最小边缘幅度 对比度阈值
* 参数8:GenParamName 通用参数的名称 默认值: []
* 参数9:GenParamValue 通用参数的值 默认值: []
* 参数10:索引 创建的计量对象的索引
*add_metrology_object_generic (MetrologyHandle, 'line', Line1Param, 20, 5, 1, 30, [], [], IndexLine)
add_metrology_object_generic (MetrologyHandle, ['line','circle'],[Line1Param, CircleParam],20, 5, 1, 30, [], [], Index)


* 参数1:测量句柄
* 参数2:Index:指定测量对象,为all时所有计量对象的参数都被设置(‘all’)
* 参数3:GenParamName:输入参数名称;默认:‘num_instances’,参考:
*            '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':拟合,距离阈值
* set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')
* 4.设置测量句柄的参数
* 设置找线的极性 由黑到白 由白到黑 all
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')
* 设置测量区域的个数 卡尺数量
set_metrology_object_param (MetrologyHandle, 'all', 'num_measures', 50)
* 设置最少多少个点可以拟合成功
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 30)
* 设置平滑系数
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 2)
* 半长  卡尺搜索长度
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 5)
* 半宽  卡尺投影长度
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 0.5)
* 对比度阈值
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
* 设置找线插值方法
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bilinear')
* 设置查找到的第一条边还是第二条边
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'last')
* 设置最小分数
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)
* 5.测量并拟合测量模型中所有计量对象的几何形状
apply_metrology_model (Image, MetrologyHandle)
* 6.获取测量区域和计量模型的计量对象的边缘位置结果
* 参数1:Contours 测量区域的矩形XLD轮廓
* 参数2:处理计量模型
* 参数3:计量对象的索引 默认值:‘all’
* 参数4:Transition 选择浅色/深色或深色/浅色边缘 默认值:‘all’
* 参数5、6:输出查找到点的行列坐标
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
* 7.把找到的点通过十字叉显示
* 为每个输入点(行、列)生成交叉形状的XLD轮廓
* Cross(out):生成XLD轮廓
* Row(in):输入点集的行坐标
* Col(in):输入点集的列坐标,Col元组的个数与Row元组的个数相同
* Size(in):十字形长度,长度大于等于0
* Angle(in):十字形方向
gen_cross_contour_xld (Cross, Row, Column, 3, rad(45))
* 8.获取计量模型的测量结果
* 参数1:测量句柄
* 参数2:Index 输出计量对象的索引 查找多个结果时用于分辨
* 参数3:Instance 输入测量对象的实例
* 参数4:通用参数的名称 默认值:‘result_type’ 值列表:‘angle_direction’,‘result_type’,‘used_edges’
*        如果GenParamName设置为’result_type’,则GenParamValue允许控制计量对象的返回方式和结果。
*        可以立即查询查询的计量对象的所有测量参数,可以单独查询特定参数或者可以查询计量对象的分数

*        ‘angle_direction’:该参数确定由拟合产生的角度的旋转方向。
*        将参数’angle_direction’设置为’正’,在物体的主轴和坐标系的水平轴之间以数学正方向(逆时针方向)指定角度。
*        将参数’angle_direction’设置为’负’,在对象的主轴和坐标系的水平轴之间沿数学负方向(顺时针)指定角度。角度的结果以弧度返回。
*        ‘used_edges’:
*        要查询实际用于拟合度量对象的边缘点,可以选择以下GenParamValue值:
*        ‘行’:返回用于拟合度量对象的边的行坐标。
*        ‘列’:返回用于拟合度量对象的边的列坐标。
*        ‘振幅’:返回用于拟合度量对象的边缘的边缘幅度。
* 参数5:泛型参数的值 默认值:‘all_param’
* 参数6:线结果
get_metrology_object_result (MetrologyHandle, 0, 0, 'result_type', 'all_param', LineParameter)
*获取测量结果里的开始行坐标
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'row_begin', RowBegin)
*获取测量结果里的开始列坐标
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'column_begin', ColBegin)
*获取测量结果里的结束行坐标
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'row_end', RowEnd)
*获取测量结果里的结束列坐标
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'column_end', ColEnd)
* 圆结果
get_metrology_object_result (MetrologyHandle, 1, 0, 'result_type', 'all_param', CircleParameter)
* 点到线的距离
distance_pl (CircleParam[0],CircleParam[1],RowBegin, ColBegin, RowEnd, ColEnd, Distance)
* 点到线段的距离
distance_ps (CircleParam[0],CircleParam[1],RowBegin, ColBegin, RowEnd, ColEnd,DistanceMin, DistanceMax)

clear_metrology_model (MetrologyHandle)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值