halcon measure_pos和measure_pairs详解

news2024/11/19 3:27:07

这两个算子作为halcon一维测量的关键,看了这两个算子的多个博客,也没搞清楚里面几个参数的意义和测量的原理,决定自己详细试一下,将测试的过程详细记录下来,供以后需要参考的朋友使用,本文将从以下几个点说明二者的功能和区别:

  1. 两个测量算子的原理说明及直观认识
  2. 参数说明
  3. 一些注意事项
    1.两个测量算子的原理说明及直观认识
    借用halcon的一张图片:

测量原理说明

两个算子是根据测量矩形的长轴中心线(图上从Start到End带箭头的那根线)上的像素变化,对有明暗变化的关键点进行寻找,也就是说只有测量的中心线是有效测量区域,矩形的其它区域并没有测量功用(后来测试发现有奇怪的现象发生,即使中心线没有与被测图形相交,但是中心线上仍然有被找到的行列点,现象很特别,但是实际使用中并不建议大家这样做)。
measure_pos函数会寻找所有满足条件的单个关键点,属于独立作战,而带pairs的函数是需要找到满足条件的一对点,如果只能找到一个点,没有另外一个点与之配对,则该点会被弃掉。
因为halcon自带例子中的图片包含的情况种类不多,且画线的指示容易误导大家对测量原理的认识,所以自己画了张图片,图片中包含各种可能存在的情况,并对其一一测试。
自绘测试图
测试了几种情况,供大家参考,图中绿色的圆圈为measure_pos函数找到的关键点,蓝色的线条为measure_pairs函数找到的边缘对之间的连线。
测试1
测试2
测试3
测试4
测试5
测试6
测试7
测试8(异常测试)

测试代码如下:

dev_close_window ()

read_image(img_mea, 'meas_test.jpg')
get_image_pointer1(img_mea, Pointer1, Type1, width_img, height_img)
* dev_get_window(hWnd)
dev_open_window_fit_image (img_mea, 0, 0, 1000, 1000, hWnd)
set_display_font (hWnd, 14, 'mono', 'true', 'false')
dev_display(img_mea)
dev_set_draw ('margin')
dev_set_line_width (3)

draw_rectangle2(hWnd, Row3, Column3, Phi3, Length13, Length23)
Interpolation := 'nearest_neighbor'
gen_rectangle2 (Rectangle, Row3, Column3, Phi3, Length13, Length23)
dev_display (Rectangle)
gen_measure_rectangle2 (Row3, Column3, Phi3, Length13, Length23, \
                        width_img, height_img, Interpolation, hMeas)
* dev_display (Rectangle)
Sigma := 1.0
Threshold := 30
Transition := 'all'
Select := 'all'
measure_pos (img_mea, hMeas, Sigma, Threshold, Transition, \
             Select, RowEdge, ColumnEdge, Amplitude, Distance)

dev_set_color ('green')
* disp_line (hWnd, RowEdge, ColumnEdge - Length23, RowEdge, ColumnEdge + Length23)
tuple_length (RowEdge, pos_num)
tuple_gen_const (pos_num, 2, cir_radius)
gen_circle(pos_cir, RowEdge, ColumnEdge, cir_radius)
dev_display (pos_cir)


gen_measure_rectangle2 (Row3, Column3, Phi3, Length13, Length23, \
                        width_img, height_img, Interpolation, hMeas2)

measure_pairs (img_mea, hMeas2, Sigma, Threshold, Transition, \
               Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, \
               RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, \
               IntraDistance, InterDistance)

dev_set_color ('blue')


gen_region_line (RegionLines, RowEdgeFirst, ColumnEdgeFirst, \
                 RowEdgeSecond, ColumnEdgeSecond)
dev_display (RegionLines)

2.参数说明
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)

Image:被测量的图像;
MeasureHandle:测量句柄,传入gen_measure_rectangle2生成的测量矩形;
Sigma (input_control):高斯平滑系数,默认1.0
Threshold:可被函数认为是黑白变化的最小阈值,我的理解是相邻两个像素的灰度值变化超过Threshold时,函数认为是一个边缘;
Transition:边缘变化的种类,黑变白,白变黑还是二者皆算;
Select:找到的边缘选择全部还是第一个,最后一个;
RowEdge:边缘的Y值,可能多个;
ColumnEdge:边缘的X值,可能多个;
Amplitude:边缘两侧的两个像素的灰度差值;
Distance:连续两个边缘的距离。
以下图为例:1和2点之间的Distance为二者间蓝线距离,2,3点之间的距离为图中红色连线的距离。
pos函数距离说明

measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
IntraDistance是同一个边缘对之间的距离,如下图中蓝色线的距离;
InterDistance是两个边缘对之间的距离,图中是两根蓝色线段之间空白处的距离。
相同的参数不再赘述,相同参数时,找到的关键点与pos函数相同,只是该函数测量的为边缘对,不配对的关键点会被忽略掉。
paris函数

3.一些注意事项:
一、正常情况下,测量矩形的长轴应尽量与被测量边缘保持垂直,不垂直时会有噪点出现,同样情况下会使测量变的复杂;
二、两个函数找到的关键点是完全相同的,pairs函数会因配对问题将部分关键点忽略;
三、同一个测量矩形,长轴具有2个方向,不同的方向会导致测量的边缘变化方式和第一个边缘产生变化,测量时候需要注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用bat脚本运行python脚本,bat出现闪退,怎么解决?

前言 本文是该专栏的第4篇,后面会持续分享python的各种干货知识,值得关注。 工作上为了方便,很多时候我们会设置一个bat脚本来双击运行python脚本,这样既方便又能在工作上节约大量时间。 但是,你或许会碰到这样的情况,当双击bat脚本的时候,bat窗口界面会直接出现闪退关…

DM8设置自动备份,达梦数据库,自动备份。详细步骤。常用命令,启动关闭数据库,查看DMAP状态

常用命令 DmServiceDAMENG.service改成自己bin目录下文件名 运维常见问题,官方文档 注意事项 登录客户端工具,一定要使用SYSDBA用户进行下面的客户端操作 登录数据库主机,一定要使用安装数据库时创建的dmdba用户 定时备份前请先配置本地…

引入新模块都在用这个注解,它是如何生效的?|原创

本文讲解了Enable 类注解是如何生效的以及其核心注解 Import 的原理,并且用 EnableAsync 注解来举例。点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达在项目开发的过程中,我们会遇到很多名字为 Enablexxx 的注解&a…

OA系统解决方案

一、OA系统解决方案介绍 OA系统,即办公自动化系统(Office Assistant简称OA),它是一个集成了企业信息发布、公文与信息管理、公文处理、知识管理、内部通讯、协同办公等办公与管理应用功能一体的协同 办公系统。OA系统解决方案则是…

Linux——详解共享内存shared memory

目录 一.共享内存介绍 (一).什么是共享内存 (二).共享内存优点 (三).共享内存缺点 二.共享内存使用 (一).创建—shmget ①key ②size ③shmflg ④返回值 (二&…

CRMEB电商商城系统腾讯云ECS服务器安装配置搭建教程文档

一、推荐使用宝塔Linux面板,简单好用。二、放行服务器端口。详细步骤: 1.登录腾讯云服务器,点击右上角“控制台” 2.我的资源,点击进入云服务器 3.进入实例列表,选择您要安装的服务器,点击更多 4.选择重装…

Hadoop 如何保证自己的江湖地位?Yarn 功不可没

前言 任何计算任务的运行都离不开计算资源,比如 CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的 Hadoop 之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台 Yarn 密不可分&a…

Metal每日分享,四维向量偏移滤镜效果

本案例的目的是理解如何用Metal实现图像4维向量颜色效果滤镜,通过对像素点颜色进行4维向量叠加运算得到新的像素点; Demo HarbethDemo地址实操代码 // 暖色系 let filter = C7ColorVector4(vector: Vector4.Color.warm)// 方案1: ImageView.image = try? BoxxIO(element: o…

浅谈字节码增强技术系列1-字节码增强概览

作者:董子龙 前言 前段时间一直想参照lombok的实现原理写一篇可以生成业务单据修改记录插件的专利,再查阅资料的过程中,偶然了解到了字节码增强工具-byteBuddy。但是由于当时时间紧促,所以没有深入的对该组件进行了解。其实再我…

一文搞定Pandas核心概念之DataFrame

DataFrame概述 DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索…

麒麟系统下基于卫星的NTP网络授时服务器方案

麒麟系统下基于卫星的NTP网络授时服务器方案 1、 麒麟系统NTP授时方案 设计思路: 在通用的麒麟服务器内部固定一块北斗卫星接收模块并引出卫星天线接口,卫星模块接收北斗卫星数据并解码输出时间数据(NMEA0183串口数据)&#xff…

Linux编译静态库.a脚本(很low)

比如目录下有这几个源文件,我们要把其中带箭头的三个源文件编译打包成静态库文件 然后在当前目录创建脚本make_lib.sh,并赋可执行权限chmod 777 make_lib.sh #!/bin/bash # 在下面将需要编译成静态库的源文件名填进去 list"ky_ai_api ky_ai_pars…

基于PHP的旅游网站的开发与设计

目录 第1章 绪论 3 1.1 课题背景 3 1.2 电子商务的发展趋势 3 1.3企业网站的建立及电子商务的意义 4 第2章 电子商务简介 6 2.1 电子商务的来临 6 2.2 电子商务的概念 6 2.3 电子商务的分类 7 2.4 电子商务的特性 8 2.5 电子商务的结构 11 2.6 电子商务在中国的发展 11 2.7 本章…

Vue生命周期概述

Vue生命周期概述1 概述2 初始阶段3 挂载阶段4 更新阶段5 销毁阶段6 总结1 概述 每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中&#xf…

微服务门神-网关了解

引言 书接上篇 微服务守护神-Sentinel-其他 ,讲完微服务守护神-Sentinel之后,接下来就是微服务门神-网关组件:Gateway 问题引入 小伙伴们都知道在微服务架构中,一个系统会被拆分为很多个微服务,每一个微服务都能对外…

风电场数字孪生的应用案例

在我国“十四五”现代能源中明确规划,要大规模发展风电能源。与此同时电力行业也在加紧通过数字孪生等新一代信息技术推动电力能源行业智能化改造和数字化建设,不夸张地说数字孪生技术,数字孪生的应用不仅能够提高风电场项目建设的设计、施工…

PPa-GO/NPs/PEG/DSPE焦脱镁叶绿酸-a修饰氧化石墨烯/纳米粒子/聚乙二醇/磷脂/细胞膜合成

小编分享了PPa-GO/NPs/PEG/DSPE焦脱镁叶绿酸-a修饰氧化石墨烯/纳米粒子/聚乙二醇/磷脂/细胞膜合成方法相关知识,来学习! 焦脱镁叶绿酸-a衍生物合成方法: 通过酸解反应从叶绿素a得到焦脱镁叶绿酸a,羧基保护后插入Zn2形成金属配合物,采用2,3-二氯-5,6-二氰…

window.open跳转页面传参接参

<el-table-column fixed"right" header-align"center" align"center" prop"action" label"操作" width"180px"><template slot-scope"scope"><el-button type"primary" size&…

QT学习笔记(上)

QT学习笔记&#xff08;上&#xff09; 文章目录QT学习笔记&#xff08;上&#xff09;1. 窗口和按钮2. 创建一个自定义的QPushButton2.1 mypushbutton.h2.2 mypushbuttion.cpp2.3 mainwindow.cpp引用mypushbutton3. QT坐标原点4. 信号与槽5. 自定义信号和槽6. 信号和槽的重载P…

基于java(SSH)的数字迎新系统的设计与实现

目 录 摘 要 i Abstract ii 1 绪论 1 1.1 选题背景 1 1.2研究现状 1 1.3课题目的 1 1.4本文结构 2 2 设计技术与开发环境 3 2.1 相关技术介绍 3 2.1.1 Struts简介 3 2.1.2 Hibernate简介 3 2.1.3 spring简介 3 2.2.4 SSH的简介 3 2.2 开发环境介绍 5 2.2.1 Myeclipse简介 5 2.2…