0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

halcon案例:金属工件几何测量

机器人及PLC自动化应用 来源:csdn 2023-04-24 09:53 次阅读

一、提要

对于官方帮助文件的案例,需要逐一跟踪代码,掌握这些技能不很容易,因为这需要多种算子互相搭配,可以说每一个案例都针对一个测量场景,因此,学习halcon不要从一个一个算子做起,而要从案例做起。因为具体问题不同,方法也不同,比如,地图的边缘提取,和加工零件的边缘提取做法有不同,注意这种细节。

二、必要的算子介绍

2.1 dev_set_draw

dev_set_draw 定义区域的填充模式。如果 DrawMode 设置为“filled”,则区域显示为填充,如果设置为“margin”,则仅显示轮廓。在 'margin' 模式下,轮廓的外观会受到 dev_set_line_width、set_line_approx 和 set_line_style 的影响。

1)算子形式

dev_set_draw( : : DrawMode : )

2)参数描述

DrawMode参数两个选项(“filled”,和 “margin”),设定完后,显示区域方式就变了,如图:

.2 area_center

获得区域的面积和中心位置。

运算符 area_center 计算输入区域的面积和中心。面积定义为一个区域的像素数。中心分别计算为所有像素的行坐标或列坐标的平均值。如果传递了多个区域,则结果存储在元组中,元组中值的索引对应于输入区域的索引。在空白区域的情况下,如果没有设置其他行为,则所有参数的值都为 0.0(参见 set_system)。

1)算子形式

area_center(Regions : : : Area, Row, Column)

2)参数描述

Regions :输入区域

Area, 区域面积

Row, 行坐标

Column,列坐标

2.3 orientation_region

运算符orientation_region 计算区域的方向。运算符基于 elliptic_axis。此外,计算轮廓上与重心距离最大的点。如果在旋转坐标系中,该点的列坐标小于重心的列坐标,则将 的值加到角度上。如果传递了多个区域,则结果存储在元组中,元组中值的索引对应于输入中区域的索引。

1)算子形式

orientation_region(Regions : : : Phi)

2)参数描述

Regions :输入区域

Phi, 输出角度,就是区域不对称的旋转角度。也就是外接矩形的角

968c399c-d60f-11ed-bfe3-dac502259ad0.png

disp_cross (WindowID, RowCenterRegion, ColumnCenterRegion, 15, 0)

disp_arrow (WindowID, RowCenterRegion, ColumnCenterRegion, RowCenterRegion - 60 * sin(OrientationRegion), ColumnCenterRegion + 60 * cos(OrientationRegion), 2)

显示十字叉、箭头。

三、边缘提取算子

3.1 edges_sub_pix

edges_sub_pix 使用递归实现的滤波器(根据 Deriche、Lanser 和 Shen)或 Canny 提出的传统实现的“高斯导数”滤波器(使用滤波器掩码)检测阶梯边缘。

1)算子形式

edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

2)参数解释

Image : 输入图像

Edges : 输出边缘像素

Filter,:算法选择,可选择算法是【'deriche1', 'lanser1', 'deriche2', 'lanser2', 'shen', 'mshen', 'canny', 'sobel', and 'sobel_fast'】

Alpha,

Low,

High :

3)参数详细

edges_sub_pix 使用递归实现的滤波器(根据 Deriche、Lanser 和 Shen)或 Canny 提出的传统实现的“高斯导数”滤波器(使用滤波器掩码)检测阶梯边缘。因此,可以使用以下边缘运算符:“deriche1”、“lanser1”、“deriche2”、“lanser2”、“shen”、“mshen”、“canny”、“sobel”和“sobel_fast”

(参数过滤器)。

提取的边缘在 Edges 中作为亚像素精确的 XLD 轮廓返回。对于除 'sobel_fast' 之外的所有边缘运算符,为每个边缘点定义了以下属性(参见 get_contour_attrib_xld):

'edge_direction' 边缘方向

'angle' 法线向量到轮廓的方向(当轮廓从起点到终点遍历时,法线向量指向轮廓的右侧;角度是相对于图像的行轴给出的) .)

“响应”边缘幅度(梯度幅度)

除了'sobel'和'sobel_fast'之外的所有边缘算子的“滤波器宽度”(即平滑量)可以任意选择,可以通过调用info_edges来估计参数Alpha的具体值。对于所有过滤器(Deriche、Lanser 和 Shen 过滤器),“过滤器宽度”随着 Alpha 的增加而减小。唯一的例外是 Canny 过滤器,其中增加的 Alpha 也会导致“过滤器宽度”的增加。“宽”滤波器对噪声表现出更大的不变性,但检测小细节的能力也有所下降。非递归过滤器,例如 Canny 过滤器,是使用过滤器掩码实现的,因此增加过滤器宽度会增加执行时间。相反,递归过滤器的执行时间不取决于过滤器的宽度。因此,使用 Derche、Lanser 和 Shen 过滤器可以实现任意过滤器宽度,而不会增加操作员的运行时间。与 Canny 算子相比,由此产生的速度优势自然会随着更大的过滤器宽度而增加。作为边界处理,递归算子假设图像在图像之外为零,而 Canny 算子在图像边界处重复灰度值。可通过以下 Alpha 选择获得可比较的过滤器宽度:

3.2 get_contour_attrib_xld

获取线段的属性特征参数值。

1)算子格式

get_contour_attrib_xld(Contour : : Name : Attrib)

2)参数解释

Contour:输入曲线对象XLD

Name:属性名称,值域为【 'regr_norm_row', 'regr_norm_col', 'regr_mean_dist', 'regr_dev_dist', 'cont_approx', 'bright_dark', 'is_hole'】

Attrib:输出属性值,1表示肯定,0表示否定

3)参数详细

用query_contour_global_attribs_xld(SingleSegment,Attribs)函数可以获取属性,只有【cont_approx】一项,因此,其它选项都不能用。

Name参数的值的意义:

cont_approx:有曲率的曲线,此时,Attrib=-1,直线;Attrib=0,椭圆;Attrib=1,圆

四、距离测量项目

4.1 项目描述

在下列工件中,测量出四个圆周的圆心之间距离。项目需要以下知识点:

如何区域生成?

如何边缘提取?

如何xld生成

如何xld分段?

xld分段如何访问?

如何获取曲线特征参数?

如何中心点距离测量?

4.2 参考代码

read_image (Image, 'metal-parts/metal-parts-01')

get_image_size (Image, Width, Height)

dev_close_window ()

dev_open_window (0, 0, Width, Height, 'light gray', WindowID)

dev_set_draw ('fill')

threshold (Image, Region, 100, 255)

clear_window(WindowID)

disp_region(Region, WindowID)

edges_sub_pix (Image, Edges, 'canny', 0.6, 30, 70)

segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 6, 4, 4)

dev_clear_window ()

dev_set_colored (12)

dev_display (ContoursSplit)

count_obj (ContoursSplit, NumSegments)

dev_display (Image)

NumCircles := 0

RowsCenterCircle := []

ColumnsCenterCircle := []

for i := 1 to NumSegments by 1

select_obj (ContoursSplit, SingleSegment, i)

get_contour_global_attrib_xld (SingleSegment, 'cont_approx', Attrib)

if (Attrib == 1)

NumCircles := NumCircles + 1

fit_circle_contour_xld (SingleSegment, 'atukey', -1, 2, 0, 5, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1)

RowsCenterCircle := [RowsCenterCircle,Row]

ColumnsCenterCircle := [ColumnsCenterCircle,Column]

dev_display (ContCircle)

endif

endfor

distance_pp (RowsCenterCircle[1], ColumnsCenterCircle[1], RowsCenterCircle[2], ColumnsCenterCircle[2], Distance_2_3)

distance_pp (RowsCenterCircle[0], ColumnsCenterCircle[0], RowsCenterCircle[2], ColumnsCenterCircle[2], Distance_1_3)

distance_pp (RowsCenterCircle[3], ColumnsCenterCircle[3], RowsCenterCircle[4], ColumnsCenterCircle[4], Distance_4_5)

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    161

    文章

    7817

    浏览量

    178128
  • 算法
    +关注

    关注

    23

    文章

    4612

    浏览量

    92894
  • HALCON
    +关注

    关注

    16

    文章

    64

    浏览量

    27224

原文标题:halcon案例01 】金属工件几何测量

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于图像处理技术的螺纹几何参数测量系统设计

    检测、几何参数计算等步骤,实现了对螺纹几何参数的自动测量。通过大量实验证明,该系统具有快捷高效、数据可靠、易于操作、替代传统人工操作的优点,有效提高了批量工件检测的自动化水平,具有重要
    的头像 发表于 01-15 11:13 900次阅读
    基于图像处理技术的螺纹<b class='flag-5'>几何</b>参数<b class='flag-5'>测量</b>系统设计

    labview调用halcon软件包

    众所周知NI在视觉这块虽然有涉猎,但是它的一些算法性能比一些专业的视觉软件如halcon要差,不可否认,NI_vision在一些尺寸测量方面、找直线还是比较便利的。如今的视觉系统需求越来越复杂
    发表于 05-27 12:04

    labview 视觉机器人抓取工件 如何测量工件偏转角度

    请教大神:labview机器视觉中已经建立CCD相机的坐标系,那如何测量矩形工件相对于X轴摆放的角度?
    发表于 10-10 11:08

    labview与halcon连用

    本帖最后由 x451129684 于 2017-11-16 16:46 编辑 labview通过.net调用halcon算子,测量一个圆的角度
    发表于 11-16 09:39

    测径仪测量芯棒多种几何尺寸

    及允许公差等;实时直径、测量位置距离固定尾座侧端面的长度(距离)等。测量时显示直径和长度对应的尺寸波动曲线,工件锥度的计算值。当测量数据处于设定的合格范围内时,
    发表于 11-28 09:57

    微小工件轮廓测量用影像测量

    不同倍率下的镜头通过量不同,在相同的照明条件下,低倍率镜头下可正常观察,但高倍率镜头下就会变暗。一键式自动影像测量仪的校准片,能自动实现所有参数的校准和校验,各个倍率一致性在1um以内,微小工件轮廓
    发表于 07-20 09:01

    光学3D表面轮廓仪可以测金属吗?

    重建物体的三维模型。这种测量方式具有非接触性、高精度、高速度等优点,非常适合用于金属等材料的表面测量。 光学3D表面轮廓仪可以测量金属的形状
    发表于 08-21 13:41

    车刀几何角度的测量

    车刀几何角度的测量 一 、实验目的1、通过实验巩固和加深对车刀几何角度的标准坐标系平面与车刀几何角度坐标系的基本定义
    发表于 05-15 00:37 1w次阅读

    【光谱共焦传感器案例分享】金属内壁轮廓扫描测量

    工件加工后需通过量具或仪器对其进行精度检测,确定是否合格,但是有些工件受其形状的影响,轮廓是由许多不同的几何要素所组成的,如直线、圆弧、二次曲线等,可能无法对其进行测量或是
    的头像 发表于 01-03 16:01 775次阅读
    【光谱共焦传感器案例分享】<b class='flag-5'>金属</b>内壁轮廓扫描<b class='flag-5'>测量</b>

    Halcon中的测量工具之Metrology介绍

    对于使用Halcon的小伙伴们来说,在菜单栏上的“助手”一栏中可以找到一些可以快捷使用的工具。
    的头像 发表于 03-24 16:35 8019次阅读

    光栅测长机测量工件外径步骤及注意事项

    中图SJ5100光栅测长机是一种可以测量工件外径的仪器,其原理是利用比较法进行测量。当工件放置在测长机的测量范围内时,通过移动滑块,使
    的头像 发表于 07-20 13:35 948次阅读
    光栅测长机<b class='flag-5'>测量</b><b class='flag-5'>工件</b>外径步骤及注意事项

    闪测仪如何测量工件尺寸的?

    闪测仪是一种常用的测量工具,可用于测量工件的尺寸。它是一种利用图像处理、数据分析等技术进行尺寸测量的仪器。具有的高精度测量能力,能够准确地
    的头像 发表于 08-15 10:31 1162次阅读
    闪测仪如何<b class='flag-5'>测量</b><b class='flag-5'>工件</b>尺寸的?

    激光跟踪仪在超大型工件空间测量中的应用,你了解多少?

    在超大型工件的空间测量中,激光跟踪仪可对大尺度空间内的点、线、面、曲面等几何特征进行精确测量;能够根据合作目标的精确空间姿态对被测工件的内部
    的头像 发表于 11-20 11:37 715次阅读
    激光跟踪仪在超大型<b class='flag-5'>工件</b>空间<b class='flag-5'>测量</b>中的应用,你了解多少?

    几何尺寸测量工具介绍

    传统的几何尺寸测量仪器设备包括千分尺、角度尺、游标卡尺等,这些仪器能够满足一般的几何测量需求。但是随着科技的发展,越来越多高精度测量仪器被
    的头像 发表于 12-26 17:16 1137次阅读
    <b class='flag-5'>几何</b>尺寸<b class='flag-5'>测量</b>工具介绍

    复杂工件的高效测量方案:自动化三坐标测量与影像测量技术集成

    在现代制造业的快速发展中,复杂工件的精密测量成为了质量控制的关键。随着工业4.0的推进,自动化技术与精密测量设备的结合,为生产效率和产品质量的提升提供了新的解决方案。全自动化三坐标测量
    的头像 发表于 08-30 16:49 524次阅读
    复杂<b class='flag-5'>工件</b>的高效<b class='flag-5'>测量</b>方案:自动化三坐标<b class='flag-5'>测量</b>与影像<b class='flag-5'>测量</b>技术集成