一维测量(也叫一维计量或卡尺)的概念非常直观。沿着一个预定的区域(主要是垂直于RIO感兴趣区域的方向) 边缘的位置。这里的边缘为从暗到亮或从亮到暗的过渡。

基于提取的边缘,可以测量零件的尺寸。例如,可以测量 ROI内零件的宽度,并将边缘定位在其左右两侧。

除了这些简单的矩形ROI外,圆弧也可以用来测量,例如,齿轮上的齿轮宽度。

这种测量方法的优点是使用方便,执行时间短,而且有很高的的精度。只需几个操作符,就可以实现高性能的应用。

另外,也可以使用HDevelop的测量助手,只需点击几下鼠标就可以进行测量。

基本概念

测量包括以下几个主要步骤:

获取图像

创建测量对象

在获取图像后,可以指定测量的位置,即描述要测量的线或弧的位置、方向等。

可以通过使用句柄handle来访问测量对象。类似于文件句柄,在使用该工具时需要这个句柄。每次执行测量时,这个句柄都会作为参数传递。

在像C++这样的面向对象的语言中,可以使用measure类来代替使用句柄的低级方法。在这里,用标准的面向对象方法实现创建和销毁。

测量

然后,可以通过指定测量对象和一些视觉参数,如最小对比度来应用测量。

扩展概念

在许多情况下,测量应用会比上面描述的更复杂,例如杂乱或不均匀的照明。此外,还可能要将特征转化为现实世界的单位,或将结果可视化。

衍射校准图像

为了进行高精度的测量,摄像机应该具有线性响应函数,即图像中的灰度值应该线性地取决于输入的量。

由于某些相机没有线性响应函数,因此 HALCON 提供了所谓的衍射校准(灰度值校准)。通过算子radiometric_self_calibration,可以确定相机的反响应函数(离线),然后在执行测量前使用lut_trans将此函数应用于图像。

对准ROI或图像

在某些应用中,要测量的直线或弧线必须相对于另一个对象对齐以方便测量。

矫正图像

与对准类似,可能需要对图像进行修正,例如,消除镜头变形。

创建测量对象

你可以用像draw_rectangle2这样的操作符交互式地测量线或弧线,或者从文件中读取它的参数(read_string)。作为另一种选择,它的坐标可以基于其他视觉工具如Blob Analysis的结果生成 。特别是在测量线或弧线可能需要对准某个对象的时候。

如果总是沿着同一条线或弧线进行测量,可以离线创建测量对象,然后多次使用它。 如果要对齐测量,每个图像的线或弧的位置和方向将有所不同,在这种情况下,必须为每个图像创建一个新的测量对象。这个规则的一个例外是只有位置改变而没有方向改变,可以保留测量对象,并通过 translate_measure 调整其位置。

将结果转化为世界坐标

如果已经校准了视觉系统,可以直接用image_points_to_world_plane将测量结果转化为世界坐标。

结果可视化

可视化边缘位置的最好方法是使用gen_contour_polygon_xld等运算符创建(短)XLD线段。

涉及算子

获取图像

衍射校准图像

基础:radiometric_self_calibration(校验径向畸变), lut_trans(用灰度值查找表变换图像)

对准ROI或图像

矫正图像

创建测量对象

基础:gen_measure_rectangle2(提取垂直于矩形的直边), gen_measure_arc(提取垂直于环形弧线的直边), translate_measure(转换测量对象)

测量

基础:measure_pos(测量垂直于矩形或圆弧的直边), measure_pairs(测量垂直于矩形或圆弧的直边对)

进阶:set_fuzzy_measure(指定模糊函数), fuzzy_measure_pos((通过指定模糊函数测量垂直于矩形或圆弧的直边), fuzzy_measure_pairs, fuzzy_measure_pairing(可以使用参数Pairing来测量交错对和包含对)

把结果转化为世界坐标

基础:image_points_to_world_plane

进阶:gen_contour_region_xld, contour_to_world_plane_xld

结果可视化

进阶:gen_contour_polygon_xld

一维测量的替代方法

边缘提取(亚像素精度)

测量边缘参数的一个非常好的方法是用edges_sub_pix提取边缘轮廓。这种方法的优点是它可以处理任意形状。此外,它可以确定每个边缘点的属性,如边缘方向。

小技巧

抑制杂物或噪音

在许多应用中,一些杂物或噪音必须被抑制。测量运算符提供了多种方法来实现。最好的是提高边缘提取的阈值,以消除模糊的边缘。此外,平滑参数的值可以增加,以平滑不相关的边缘。

当将边缘分组为对时,如果噪声边缘在 "真实 "边缘的附近并且具有相同的极性,则可能导致不正确的分组。在这种情况下,可以通过只选择连续上升和下降边缘序列中最强的边缘来抑制噪声边缘。

重用测量对象

因为创建一个测量对象需要一些时间,所以建议在有可能的情况下重复使用它们。例如,如果不需要对齐,可以离线创建测量对象,并重复使用该对象。如果对齐只涉及到转换,那么 translate_measure 可以用来修正位置。

使用绝对灰度值阈值

作为边缘提取的替代方法,可以使用操作符 measure_thresh 根据绝对灰度值阈值进行测量,可以使所有灰度值超过给定阈值的位置都会被选中。

高阶

模糊测量

如果存在不属于测量范围的额外边缘,HALCON提供了一个扩展版本的测量:模糊测量。 这个工具允许定义所谓的模糊规则,它描述了更好的边缘特征。可能的特征有位置、距离、灰度值或边缘的振幅。这些函数通过create_funct_1d_pairs创建,并通过set_fuzzy_measure传递给工具。基于这些规则,工具将选择最合适的边缘。

这种方法的优点是即使使用很低的最小阈值或平滑,也能灵活处理额外的边缘。

灰度值的评估

要完全控制沿测量线或弧线的灰度值的评估,可以使用 measure_projection。该操作符以数字数组的形式返回投影的灰度值,然后可以使用 HALCON 操作符进一步处理元组或函数。

具体项目案例下次再为大家讲解

Halcon一维测量1D Measuring解析的更多相关文章

  1. Halcon一维测量官方案例解析

    下面的例子简要介绍了如何使用HALCON的一维测量工具.最长的部分是预处理和后处理:测量本身只包括两个操作符调用. 测量保险丝-fuse 预处理主要是测量线的生成.在示例程序中,这个步骤是通过将测量对 ...

  2. Halcon一维运算相关算子整理

    Halcon一维离散函数算子 1.      abs_funct_1d  计算一维数组的绝对值 2.      compose_funct_1将两个离散的一维函数合并为一个函数 3.      cre ...

  3. HALCON里面的一维测量。

    第一步:将图片导入, 拿到图片的名字 和窗口的句柄 第二步:创建一个测量区域.这个测量区域是一个矩形,假设他的名字叫A gen_measure_rectangle2 (TmpCtrl_Row,//输入 ...

  4. Halcon一维码和二维码的解码步骤和技巧——第11讲

    针对Halcon中一维码和二维码的解码,我分别写了两篇文章,参见: <Halcon的一维条码解码步骤和解码技巧>:https://www.cnblogs.com/xh6300/p/1048 ...

  5. Halcon采集图像Image Acquisition解析

    很明显,图像的采集是所有机器视觉应用中必须解决的问题,HALCON提供了为各种图像采集设备执行这种交互的接口,图像采集的任务被简化为几行代码,只需几个操作符的调用,更重要的是,这种简单并不是以限制可用 ...

  6. halcon 特征测量

    Features 1. line_orientation   功能:计算线的方位. 2. line_position   功能:计算一条线的重心.长度和方位. 3. partition_lines   ...

  7. Halcon 2D测量

    * This program shows how to detect the edges of a diamond * with subpixel accuracy and calculate the ...

  8. halcon——缺陷检测常用方法总结(测量拟合)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分:halcon--缺陷检测常用方法总结(模板匹配(定位)+差分) - 唯有自己强大 - 博客园 (cnblogs.co ...

  9. 分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享

    分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享 全文转载zhao jun 博士的新浪博客,版权为zhaojun博士所有 原文地址:http://blog.sin ...

随机推荐

  1. 小师妹学JavaIO之:NIO中Channel的妙用

    目录 简介 Channel的分类 FileChannel Selector和Channel DatagramChannel SocketChannel ServerSocketChannel Asyn ...

  2. 青蛙的约会 (ax+by=c求最小整数解)【拓展欧几里得】

                                                  青蛙的约会(点击跳转) 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住 ...

  3. UI 自动化环境搭建

    1,pip install selenium 2,驱动放在放在 Python 的根目录下

  4. 必知必会的8个Python列表技巧

    原作者:Nik Piepenbreier 翻译&内容补充:费弗里 原文地址:https://towardsdatascience.com/advanced-python-list-techni ...

  5. android自定义控件onMeasure方法

    1.自定义控件首先定义一个类继承View 有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/ ...

  6. C++核心内容和机制

    备注:不局限与C++版本   一. 基础知识 数据类型和POD/Trivial 数据类型: 类型转换: NULL和nullptr: 操作符重载: 全局静态变量和成员静态变量的申明和初始化: 左值和右值 ...

  7. 入门大数据---Kafka深入理解分区副本机制

    一.Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息.每个 broker 都有一个唯一标识 broker.id,用于标识自己在集群中的身份,可以在配置文 ...

  8. python文件处理-将图像根据坐标画矩形标记

    内容涉及:文件遍历,选取csv后缀文件,用cv操作图片 import csv import os import sys import numpy as np import copy import sh ...

  9. 主线程用afxBeginThread()创建多个线程安全退出的办法

    HANDLE hand[]; CCriticalSection m_crisecoin; CEvent m_event; struct Student { int nNO; int nYear; CW ...

  10. CSS背景颜色透明

    { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; } 兼容大部分主流浏览器 filter ...