[Halcon3D] 3D重要算子及简单处理点云模型求高度示例讲解

news2024/11/23 22:17:22
  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:

      • 一. 重要算子解析
      • 二. 相关示例展示


一. 重要算子解析

  • read_object_model_3d ( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status) — 读取3D点云模型
    参数
    FileName(in)要读取的文件的文件名。
    Scale(in)文件中数据的比例,包括 ‘m’, ‘cm’, ‘mm’, ‘um’, ‘nm’等。
    GenParamName(in)参数名称。
    GenParamValue (in)参数名称对应的值。
    ObjectModel3D(out)3D对象模型的句柄。
    Status(out)状态信息。

  • select_points_object_model_3d ( : : ObjectModel3D, Attrib, MinValue, MaxValue : ObjectModel3DThresholded) — 筛选孤立散点的特征
    参数
    ObjectModel3D(in)3D对象模型的句柄。
    Attrib(in)被筛选点的属性特征(包括点的X/Y/Z坐标,法向量的X/Y/Z坐标等特征)。
    MinValue(in)被筛选点的属性特征最小值。
    MaxValue (in)被筛选点的属性特征最大值。
    ObjectModel3DThresholded(out)处理之后的3D对象模型的句柄。

注:类似二维平面处理中用于筛选面积、长度、宽度等灰度特征的算子select_obj(Operator)


  • triangulate_object_model_3d ( : : ObjectModel3D, Method, GenParamName, GenParamValue : TriangulatedObjectModel3D, Information) — 三角网格曲面重建(点集→曲面)
    参数
    ObjectModel3D(in) 3D对象模型的句柄。
    Method(in)曲面重建所使用的方法。
    GenParamName(in)参数名称。
    GenParamValue (in)参数名称对应的值。
    TriangulatedObjectModel3D(out)网格曲面重建之后的句柄。
    Information(out)状态信息。

  • visualize_object_model_3d ( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut) — 显示3D点云数据
    参数
    WindowHandle(in)窗口句柄指针。
    ObjectModel3D(in)3D模型的句柄。
    CamParam(in)相机内参(与相机自身特性相关的参数,比如相机的焦距、像素大小等)。
    PoseIn (in)相机外参(在世界坐标系中的参数,比如相机的位置、旋转方向等,一般是3个平移+3个旋转),即选择以什么样的姿态去显示该模型。一般默认空[],会以一种默认姿态去显示3D模型
    *GenParamName(in)参数名称,例如:'color'(设置模型显示颜色)'disp_pose'(是否显示世界坐标系)'disp_normals'(是否显示法向量)'normal_color'(法向量显示颜色)'lut'(颜色表)'color_attrib'(颜色属性:对哪个方向颜色递进)等。
    *GenParamValue(in)参数名称对应的值,常用:['lut','color_attrib','disp_pose'], ['color1','coord_z','true']
    Title(in)现实的文字,将显示在输出图形窗口左上角的文本。
    Label(in)将显示在每个显示对象模型位置的文本。
    Information (in)将显示在输出图形窗口左下角的文本。
    PoseOut(out)用户可能以交互式更改的所有对象模型的姿势。

  • write_object_model_3d ( : : ObjectModel3D, FileType, FileName, GenParamName, GenParamValue : ) — 保存3D点云数据
    参数
    ObjectModel3D(in)3D模型的句柄。
    FileType(in)写入的文件的类型。
    FileName(in)写入的文件的名称。
    GenParamName(in)参数名称。
    GenParamValue (in)参数名称对应的值。

注:
1、visualize_object_model_3d算子是阻塞式的,需要点击窗口右下角的Continue按钮才可执行下一步操作,可通过更改内部封装的算子去掉Continue按钮。
2、参数CamParam、PoseIn、GenParamName、GenParamValue,可通过disp_object_model_3d算子完成设置。


二. 相关示例展示

1、点云求电池高度

* 1.读入点云数据(文件中)
read_object_model_3d ('./2020-01-10-235331.om3', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*   可视化显示三维点云模型
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
* 2.得到电池表面点云的数据集合(mm)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
*   去掉不在电池表面的干扰噪点(针对点的特征进行筛选)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 15, 16, ObjectModel3DThresholded)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
*   点云连通集合断开(点点间距不超过1mm的点当做一个连通域点集)
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 1, ObjectModel3DConnected)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue1)
*   去掉其他散点组成的连通域,获取电池表面点集连通域(针对点云连通集合之间的特征进行筛选)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 1000, 50000, ObjectModel3DBattery)
visualize_object_model_3d (WindowHandle, ObjectModel3DBattery, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
* 3.得到背景的点云数据集合(mm)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 12, 14, ObjectModel3DBackGround)
visualize_object_model_3d (WindowHandle, ObjectModel3DBackGround, [], PoseOut1,  ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut2)
* 4.求电池上表面点云的z坐标值
get_object_model_3d_params (ObjectModel3DBattery, 'point_coord_z', GenParamValue1)
* 5.求背景表面的点云的z坐标值
get_object_model_3d_params (ObjectModel3DBackGround, 'point_coord_z', GenParamValue2)
* 6.求电池上表面点云A和背景表面点云B的z坐标的平均值
A:=mean(GenParamValue1)
B:=mean(GenParamValue2)
* 7.求电池表面的高度
H:=A-B
Param[0]:='Shift+left button Zoom'
Param[1]:='ctrl+ left button Move'
Param[2]:='left button Rotat'
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], '电池点云的高度为'+H+'mm', 'Battery Object', Param, PoseOut)

在这里插入图片描述

通过计算电池表面的点云Z坐标集合平均值和和背景表面的点云Z坐标集合平均值作差,最终计算结果为2.94mm,标准高度在3mm左右,误差在0.1mm左右.

halcon仿真代码以及点云模型分享链接: https://pan.baidu.com/s/1YjXlMva_duZb2tBUj1ga5A    提取码:et5w


下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。

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

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

相关文章

(转载)基于粒子群算法的PID控制器优化设计(matlab实现)

1 理论基础 PID控制器应用广泛,其一般形式为 可见,PID控制器的性能取决于Kp、Ki、Kd这3个参数是否合理,因此,优化PID控制器参数具有重要意义。目前,PID控制器参数主要是人工调整,这种方法不仅费时&#x…

PaaS平台iuap——数智底座支撑企业的全球化业务拓展

数智化转型是全球化企业非常关注的话题,数智化转型过程中suo 面临的问题与挑战也绝非一套简单的产品能够解决的,必须配合组织、人员、目标制度采用达成目标。iuap平台是整个企业数智化转型的底座,形象来说是我们的土壤,在这个土壤…

借助Aspose.BarCode,轻松实现QR和众多二维码在线扫描

Aspose.BarCode for .NET 是一个功能强大的API,可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能,以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API支持流行文件格式处理&am…

postgresql多行转一列,再转多列

问题:某个单据明细表需要加上两列审批人 已有数据:单据表,审批记录表 实现: select billno ,split_part(string_agg(checkman,,),,,1) checkman1 ,split_part(string_agg(checkman,,),,,2) checkman2 from ods_workflownote GR…

指数对数计算公式基础知识

指数对数实际中也是比较重要的公式

浅谈智能配电系统在水务行业的应用

关注acrelzxz 摘要:在构建智慧水务和“双碳”时代背景下,智能配电系统在水务行业中发挥日益突出的重要作用。本文首先回顾了智能配电系统在水务行业的发展历程,并对其应用现状进行了分析,进而展望了智能配电系统在水务行业的发展…

不要再犯这些错误了!电脑使用误区大揭秘

本文是向大家介绍关于电脑的误区,电脑是较为贵重的一个电子产品,熟练掌握基本的电脑操作技巧应该是每一个人必备技能。在使用技巧之外,有一些误区是需要我们知道并避免的。 误区一:重装系统对电脑损耗极大 重装系统的损耗和玩游戏…

基于java语言编写的爬虫程序

Java语言可以使用Jsoup、HttpClient等库进行网络爬虫开发,其中Jsoup提供了HTML解析和DOM操作的功能,HttpClient则提供了HTTP协议的支持。你可以通过使用这些库,构建网络爬虫程序来爬取指定网站的数据。需要注意的是,应该遵守网站的…

chatgpt赋能python:Python函数未定义:如何解决?

Python函数未定义:如何解决? 在Python编程过程中,我们可能会遇到函数未定义的问题。这种错误会导致代码无法正常运行,对于开发者而言是非常头疼的问题。本文将介绍函数未定义的原因及解决方案,帮助您更好地解决这个问…

电脑文件怎么加密?文件设置密码保护的方法

在使用电脑的过程中,我们可能需要在计算机上保存各种文件,这其中就有十分重要的文件数据,而为了避免数据泄露事件的发生,我们需要使用合理的方法保护它们。文件加密就是最简单且有效的方法。那么电脑文件该怎么加密呢?…

Linux:LNMP的架构与环境配置

Linux:LNMP的架构与环境配置 一、安装 Nginx 服务1.1 安装依赖包1.2 创建运行用户1.3 编译安装1.4 优化路径1.5 添加 Nginx 系统服务 二、安装 MySQL 服务2.1安装Mysql环境依赖包2.2 创建运行用户2.3 编译安装2.4 修改mysql 配置文件2.5 更改mysql安装目录和配置文件…

VMware vCenter Server 8.0U1a 发布 - 集中式管理 vSphere 环境

VMware vCenter Server 8.0U1a 发布 - 集中式管理 vSphere 环境 请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-06-01, VMware vSphere 8.0U1a …

ZSTD 解压缩前端处理方案(干货简单)

如果可以实现记得点赞分享,谢谢老铁~ 1.需求描述 由于后台返回数据量大,请求资源比较耗时,需要一个方案来优化性能,下图是一个后台返回一个二进制的文件,需要解析成我们想要的对象 2.使用场景 采用ZSTD方案&#…

otter、canal跨服务器数据同步解决方案详解,包括下载、安装、配置、应用过程解读。

1.背景和原理: 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可…

【数据结构】 队列 queque

一、什么是队列 单端队列:一端入队,一端出队 双端队列:两个口都可以进出 先进先出 二、常用操作 1.原理 访问 access:遍历查找某个元素 时间复杂度:O(N) 搜索 search:遍历查找某个元素 时间复杂度&a…

视频美颜sdk是什么?技术解析与实现原理详解

视频美颜技术的发展则为人们提供了一种美化自己的方式,因此,视频美颜技术成为了一个备受关注的领域。在这个领域中,视频美颜sdk技术则是实现高效美颜的关键因素之一。本文将从技术角度分析视频美颜sdk的实现原理和优势。 一、视频美颜技术的…

【十六】设计模式~~~行为型模式~~~策略模式(Java)

5.1. 模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以…

学编程能参加哪些比赛?

孩子学习编程可以参加这10个竞赛: 下面将会根据孩子所学的编程语言来列举孩子可以参加的竞赛: 一、Scratch编程可参加的比赛 1、全国中小学生电脑制作大赛 电脑制作大赛不能完全说是编程比赛,更多讲究艺术与科技结合。 评选项目要求学生使用计算机设计电子报、网页设计、F…

计网作业练习一

第一章练习 简答题 1. 简述计算机网络业务的分类及各类业务的特点。 按网络的作用范围划分: (1)广域网 WAN,作用范围通常为几十到几千公里,也称为远程网,是 Internet 的核心部分。 (2&#x…

冒泡排序(超详细图解加代码解析,5分钟看懂)

目录 1.冒泡排序的定义 2.冒泡排序的原理 3.代码及其解析 4.冒泡排序的改进 5.实现冒泡排序函数 生命中永远会有令人懊恼的事,但我知道,我们是为了不留遗憾活着的,对吗? 1.冒泡排序的定义 冒泡排序(Bubble Sort&…