Halcon学习之测量、拟合、卡尺

您所在的位置:网站首页 halcon拟合圆心到边的距离 Halcon学习之测量、拟合、卡尺

Halcon学习之测量、拟合、卡尺

2023-06-25 08:10| 来源: 网络整理| 查看: 265

一、一维测量 基本流程: 1.采集图像 2.产生测量矩形或弧形 gen_measure_rectangle(); gen_measure_arc(); 3.测量: measure_pos();边缘测量 measure_pairs();测量对 4.关闭测量:close_measure();

常用算子参数说明: gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle) 参数1:矩形中心的行坐标 参数2:矩形中心的列坐标 参数3:角度 参数4:矩形的半宽 参数5:矩形的半高 参数6:图像的宽 参数7:图像的高 参数8:插值算法 参数9:测量句柄

gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation : MeasureHandle) 参数1:圆弧中心的行坐标 参数2:圆弧中心的列坐标 参数3:半径 参数4:起始角度 参数5:角度范围 参数6:环形带的半径(宽度的一半) 参数7:图像的宽度 参数8:图像的高 参数9:插值方式 参数10:测量对象句柄

measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance) 参数1:图像 参数2:测量句柄 参数3:平滑系数 参数4:阈值(用于提取边缘) 参数5:角度范围极性(边缘对第一个边缘的极性,两个边缘的极性相反)。取值范围: ‘all’, ‘all_strongest’, ‘negative’, ‘negative_strongest’, ‘positive’, ‘positive_stronge st’,缺省值:‘all’。 参数6:选择边缘点。取值范围:‘all’(选择所有边缘对),‘first’(第一个边缘 对),‘last’(最后一个边缘对)。 参数7:边缘点对的第一个边缘的中心 行 坐标。 参数8:边缘点对的第一个边缘的中心 列 坐标。 参数9:边缘点对的第一个边缘的幅度(带符号)。 参数10:边缘点对的最后一个边缘的中心 行 坐标。 参数11:边缘点对的最后一个边缘的中心 列 坐标。 参数12:边缘点对的第二个边缘的幅度(带符号) 参数13:边缘对中两个边缘间的距离。 参数14:相邻边缘对之间的距离

measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance) 参数1:图像 参数2:测量句柄 参数3:高斯平滑参数。值越大越平滑,缺省值:1。 参数4:最小边缘幅度(灰度值)。值越小,获取的边缘线越多。 参数5:极性(白到黑,或黑到白)。取值范围:‘all’(所有极性), ‘positive’ (正极性,黑到白),‘negative’(负极性)。 参数6:选择边缘点。取值范围:‘all’(选择所有边缘对),‘first’(第一个边缘 对),‘last’(最后一个边缘对)。 参数7:边缘中心的 行 坐标。 参数8:边缘中心的 列 坐标。 参数9:边缘幅度(灰度值,边缘微分波形振幅,带符号)。 参数10:相邻边缘之间的距离。

二、二维测量和拟合 实现基本流程 1.采集图像 2.预处理(ROI、拉开对比度、去噪、仿射变换) 3.边缘提取(边缘幅度、一阶倒数) 4.边缘轮廓的筛选、分割、联合 5.拟合(最小二乘法) 6.标定计算 7.显示

2.1边缘提取的方式 方式1:edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : ) 提取图像精确边缘 (精确边缘就是亚像素边缘) Image: 输入图像 Edges: 输出边缘轮廓 Filter: 边缘提取算法的名称 (canny,lanser1,'sobel_fast’等算法 ) Alpha: 平滑系数,越小越平滑(除canny外,其越大越平滑) Low: 低阈值 High: 高阈值 注意canny算法求导方式: 1.高斯平滑滤波(加权均值滤波)在正态分布,离中心越近其权重越大 2.Sobel求梯度(向量,函数上升最快方向) 3.非极大值抑制(极大值为局部最大值,相当与导数处) 4.高低阈值,双阈值处理【20,60】,低于低阈值就去掉,高于高阈值就提取,中间阈值看领域,领域有提取点才接受。

方式2:shape_trans_xld(XLD : XLDTrans : Type : )

方式3:threshold_sub_pix(Image : Border : Threshold : )

2.2分割轮廓 segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : ) 参数说明: Contours 需要进行分割的轮廓。 ContoursSplit 分割后的轮廓tuple。 Mode 分割轮廓的方式,可以选择’lines’(使用直线段分割), ‘lines_circles’(使用直线段和圆(弧)分割), ‘lines_ellipses’(使用直线段和椭圆弧分割)。 SmoothCont 轮廓平滑的参数,可以抑制在折线逼近过程中过短的线段,能更加鲁棒的逼近圆和椭圆。 MaxLineDist1 第一次用Ramer算法(即用直线段递进逼近轮廓)时的MaxLineDist,在逼近完成之后,再用圆弧或椭圆弧对相邻分割线段进行拟合,如果拟合圆弧到轮廓的距离小于逼近线段到轮廓的距离,就用圆弧替代逼近线段,这个过程一致迭代直到所有的线段拟合完毕。 MaxLineDist2 第二次逼近轮廓时的MaxLineDist,只有当MaxLineDist2 这种两步逼近算法效率较高,因为在第一次逼近过程中,递进逼近的直线段较少,因此较大直径的圆弧能够被高效的分割出来。在第二次逼近过程中,能够被小直径圆弧逼近的轮廓被找到,同时大直径圆弧的末端被重新定义。

Remark: 分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性’cont_approx’参数的值来确定(参考get_contour_global_attrib_xld)。 如果’cont_approx’=-1,这一部分轮廓最适合被拟合为直线段。 如果’cont_approx’=0,这一部分轮廓最适合被拟合为椭圆弧。 如果’cont_approx’=1,这一部分轮廓最适合被拟合为圆弧。

2.3筛选轮廓 方式1:select_shape_xld(XLD:SelectedXLD:Features,Operation,Min,Max:) XLD:要提取的XLD SelectedXLD:提取到的XLD Features:提取XLD的特征依据 Operation:特征之间的逻辑关系(and or) Min,Max:特征值的要求范围

方式2:select_Contours_xld(Contours:SelectedContours:Features,Min,Max,Min2,Max2:) 作用:选择多种特征要求的XLD轮廓 (如长度 开闭 方向 等特征,不支持多边形) Contours:要提取的XLD轮廓 SelectedContours:提取到的XLD轮廓 Features:提取XLD轮廓的依据(筛选) Min,Max,Min2,Max2:特征值的范围

2.4拟合 常用拟合算子: fit_line_contour_xld:拟合直线 fit_circle_contour_xld:拟合圆 fit_ellipse_contour_xld:拟合椭圆 fit_retangle2_contour_xld:拟合矩形

算子详解: 1.fit_circle_contour_xld(Contours:: Algorithm, MaxNumPoints, MaxClosureDist,ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi,PointOrder)

参数: Contours 【in】:输入 XLD 轮廓。 Algorithm 【 in 】 : 拟 合 圆 的 算 法 。 取 值 范 围 : ‘ahuber’, ‘algebraic’, ‘atukey’, ‘geohuber’, ‘geometric’, ‘geotukey’ , ‘algebraic’:这种方法使轮廓点和拟合得到的圆之间的代数距离最小。 ‘geometric’:这种方法使轮廓点和拟合得到的圆之间的几何距离最 小,耗时多。 MaxNumPoints【in】:拟合圆计算的最大轮廓点数。缺省值:-1,表示使用所有点。 MaxClosureDist【in】:轮廓端点之间的最大距离。当轮廓点之间的距离小于该值时,认为 轮廓时闭合的。 ClippingEndPoints【in】:拟合时忽略的起始轮廓点和终止轮廓点的数量。 Iterations【in】:加权拟合的最大迭代次数。缺省值:3。 ClippingFactor 【in】:消除异常点的裁剪因子。控制抑制异常点的数量:值越小,检测 的异常点越多,(典型值:Huber 设置为 1.0,Tukey 设置为 2.0)。 Row【out】:圆心 Y 坐标。 Column【out】:圆心 X 坐标。 Radius【out】:圆的半径。 StartPhi【out】:起始角度。(单位:弧度) EndPhi【out】:终止角度。(单位:弧度) PointOrder【out】:边界点顺序。取值范围:‘positive’(顺时针),‘negative’(逆 时针)。

.fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, Clippin gEndPoints, Iterations,ClippingFactor : RowBeg in, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 功能:根据 XLD 拟合直线段。 参数: Contours 【in】:输入轮廓。 Algorithm【in】:拟合直线算法选择。取值范围: ‘drop’, ‘gauss’, ‘huber’, ‘regression’, ‘tukey’, 缺省值:‘tukey’。 MaxNumPoints【in】:拟合直线计算的最大轮廓点数。缺省值:-1,表示使用所有点。 ClippingEndPoints【in】:拟合时忽略的起始点轮廓点和终止轮廓点的数量。 Iterations【in】:加权拟合的最大迭代次数。缺省值:5。 ClippingFactor 【in】:消除异常点的裁剪因子。控制抑制异常点的数量:值越小,检测 的异常点越多,(典型值:Huber 设置为 1.0,Tukey 设置为 2.0)。 RowBegin【out】:直线段起点 Y 坐标。 ColBegin【out】:直线段起点 X 坐标。 RowEnd【out】:直线段终点 Y 坐标。 ColEnd【out】:直线段终点 X 坐标。 Nr【out】:直线参数:法向量 Y 坐标。 Nc【out】:直线参数:法向量 X 坐标。 Dist【out】:直线参数:原点到直线的距离。

XLD的合并操作算子: union_collinear_contours_xld:合并在同一直线的XLD union_cocircular_contours_xld:合并在同圆的XLD union_adjacent_contours_xld:合并邻近的XLD

轮廓特征计算: (1).计算长度:length_xld(XLD : : : Length) (2).计算xld的面积和中心位置:area_center_xld(XLD:::Area,Row,Column,PointOrder) (3).计算xld的面积和重心位置area_center_points_xld(XLD : : : Area, Row, Column)

生成XLD算子: (1).gen_contour_region_xld(Regions : Contours : Mode : ) 功能:根据区域创建 XLD 轮廓。 (2).gen_contour_polygon_xld( : Contour : Row, Col : ) 功能:生成一个多边形轮廓。 (3).gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder,Resolution : ) 功能:生成圆弧或圆 XLD 轮廓。 (4).gen_cross_contour_xld( : Cross : Row, Col, Size, Angle : ) 功能:在指定点生成一个十字状轮廓。 (5).union_adjacent_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, Mode : ) 功能:黏合最邻近的轮廓。 (6).union_cocircular_contours_xld(Contours : UnionContours : MaxArcAng leDiff, MaxArcOverlap,MaxTangentAngle, MaxDist, MaxRadiusDiff , MaxCenterDist, MergeSmallContours, Iterations : ) 功能:黏合圆。 (7).union_collinear_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift,MaxAngle, Mode : ) 功能:黏合直线。 (8).sort_contours_xld(Contours : SortedContours : SortMode, Order, RowOrCol : ) 功能:根据轮廓的相对位置,对轮廓进行排序。

三、卡尺 实现基本流程:

*1.创建卡尺模型 create_metrology_model (MetrologyHandle) *2.设置图像宽高 set_metrology_model_image_size (MetrologyHandle, Width, Height) *3.添加卡尺(类型:直线、矩形,圆形、椭圆) add_metrology_object_line_measure (MetrologyHandle, RowBegins, ColumsBegins, RowEnds, ColumsEnds, 20, 10, 1, 40, [], [], Index1) *4设置参考位置 set_metrology_model_param(MetrologyHandle, ‘reference_system’, [Rows[0],Columns[0],0]) *5.定位(算子内做仿射变换) align_metrology_model (MetrologyHandle, Rows1[0], Columns1[0], 0) *6.测量 apply_metrology_model (Image, MetrologyHandle) *7.获取中间结果 get_metrology_object_result (MetrologyHandle, ‘all’, ‘all’, ‘result_type’, ‘all_param’, Parameter) *获取结果轮廓 get_metrology_object_result_contour (Contour, MetrologyHandle, ‘all’, ‘all’, 1.5) //1.5为相邻两点的距离 *获得测量矩形和点 get_metrology_object_measures (Contours, MetrologyHandle, ‘all’, ‘all’, Row, Column) *清除卡尺模型句柄 clear_metrology_model (MetrologyHandle)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3