Halcon中的一些3D算子

news2024/11/25 20:52:50

一、记录一些Halcon里的关于3D的算子

1.read_object_model_3d  从文件读取一个3d模型

如下图,读的一个ply文件出来是个3d点云模型

 2.visualize_object_model_3d  交互式展示3d模型

即上个算子读出来后,通过这个算子可以把3d模型显示出来旋转、平移,缩放来观察操作

算子签名

visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut)

WindowHandle:显示窗口句柄

ObjectModel3D:需要展示的3d模型

CamParam:假想的观察这个模型的一个面阵相机的内参

PoseIn:这个模型的3d姿态

GenParamName:参数名

GenParamValue:参数值

Title:展示在窗口左上角的文字

Label:在每个3d模型位置显示的文本

Information:窗口左下角显示的信息

PoseOut:用户调整模型姿态后输出这个3d姿态

其中参数名和参数值有很多,

举例 参数名color 参数值green    将模型颜色变为绿色

参数名 color_attrib 参数值coord_z 类似于z轴方向的渐变色ba

参数名 disp_pose 参数值 true  显示出坐标轴

3.connection_object_model_3d  分离3d模型中的各个连通域

算子签名

connection_object_model_3d( : : ObjectModel3D, Feature, Value : ObjectModel3DConnected)

可以通过调节distance_3d参数,把一些噪点分离出来

4.select_object_model_3d  根据全局特征从3d模型组中选取符合特征的3d模型们

算子签名

select_object_model_3d( : : ObjectModel3D, Feature, Operation, MinValue, MaxValue : ObjectModel3DSelected)

如可以设置参数'num_points'  模型点的数量,去除一部分点数少的模型,如噪点

5.union_object_model_3d 合并多个3d模型们成一个新的3d模型

算子签名

union_object_model_3d( : : ObjectModels3D, Method : UnionObjectModel3D)

3、4、5的操作可以用来去除噪点,如下图,去除噪点之后的3d模型

 6.surface_normals_object_model_3d 计算3d模型的表面法线

算子签名

surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)

这个算子计算模型表面法线。在3d点云匹配创建3d匹配模型的时候,需要模型带表面法线信息才可以用来创建。

7.max_diameter_object_model_3d 计算3d模型最大直径

8. create_pose 创建3D位姿

算子签名:

create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)

这个算子有一些参数,主要是通过各方向平移和旋转得到一个新的3d位姿。后面一些参数控制平移旋转先后顺序还有绕哪个坐标系下的轴,详细可查对应算子说明。

9.rigid_trans_object_model_3d 将刚性三维变换应用于这个3d模型

可以用这个算子对某个模型进行刚性变换、即平移和旋转。可以用上个算子的pose作为变换参数

如下图,做了变换

 变换后,原点位置,姿态都变了

10.sample_object_model_3d  对3d模型进行采样

算子签名

sample_object_model_3d( : : ObjectModel3D, Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D)

SampleDistance:这个采样距离,隔多少距离采集一个点,可以先求出3d模型的最大直径乘以一个比例系数来得到这个采样距离,如Diameter*0.003 最大直径的0.003倍,及最大直径上取333个采样点,乘的系数越小,点越多。

11.create_surface_model 创建一个用于基于曲面3d匹配的数据结构

算子签名

create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)

RelSamplingDistance:这里的相对采样距离跟上面那个采样距离不一样,填0.05即取总点数乘以0.05个点,越小点越少

 12.find_surface_model 在3d场景中找到模型的最佳匹配

算子签名:

find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)

挺多参数,不一一写了

13.refine_surface_model_pose 优化三维场景中曲面模型的姿势

上一步算出来的姿态可以再给进这个算子优化一下

14.pose_invert 反转姿态

这样上面find的姿态,是预先做的模型通过变换匹配到场景中的位置,反转这个姿态,可以将场景变换回模型的位置,用于后期分析处理

用rigid_trans_object_model_3d变换后,和之前创建的3d模型匹配上了,如下图显示

二、halcon测试代码:

dev_close_window ()
dev_open_window (0, 0, 1200, 800, 'black', WindowHandle)
*读取单帧点云ply文件
read_object_model_3d('D:/项目/tray盘/230425-汇川-tray盘/3d导出.ply', 'mm', [], [], ObjectModel3D, Status)




Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'

Message := 'Hik3D PointCloud'
*虚拟化模型并且显示
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)
dev_clear_window ()

connection_object_model_3d (ObjectModel3D, 'distance_3d', 0.001, ObjectModel3DConnected)

select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 2000, 1e30, ObjectModel3DSelected)

union_object_model_3d (ObjectModel3DSelected, 'points_surface', UnionObjectModel3D)


visualize_object_model_3d (WindowHandle, UnionObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)

dev_clear_window ()
surface_normals_object_model_3d (UnionObjectModel3D, 'mls', [], [], ObjectModel3DNormals)


max_diameter_object_model_3d (ObjectModel3DNormals, Diameter)

create_pose (0.13, 0.13, 0.028, 0, 0,180, 'Rp+T', 'gba', 'point', Pose4)
rigid_trans_object_model_3d (ObjectModel3DNormals, Pose4, ObjectModel3DRigidTrans1)

sample_object_model_3d (ObjectModel3DRigidTrans1, 'fast',Diameter*0.003, [], [], SampledObjectModel3D)



visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)
dev_clear_window ()
create_surface_model (ObjectModel3DRigidTrans1, 0.01, [], [], SurfaceModelID)


read_object_model_3d ('D:/项目/tray盘/230425-汇川-tray盘/带围挡/1-3d导出', 'mm', 'convert_to_triangles', 'true', ObjectModel3D1, Status1)


sample_object_model_3d (ObjectModel3D1, 'fast', Diameter*0.01, [], [], SampledObjectModel3D1)

find_surface_model (SurfaceModelID, SampledObjectModel3D1, 0.02, 0.2, 0, 'false', [], [], Pose, Score, SurfaceMatchingResultID)

refine_surface_model_pose (SurfaceModelID, SampledObjectModel3D1, Pose, 0, 'false', [], [], Pose1, Score1, SurfaceMatchingResultID1)


pose_invert (Pose1, PoseInvert)

rigid_trans_object_model_3d (SampledObjectModel3D1, PoseInvert, ObjectModel3DRigidTrans)
dev_clear_window ()

create_pose (-0.05, -0.06, 10, 134, 340, 235, 'Rp+T', 'gba', 'point', Pose2)

create_pose (-0.05+Pose1[0], -0.06+Pose1[1], 10+Pose1[2], 134+Pose1[3], 340+Pose1[4], 235+Pose1[5], 'Rp+T', 'gba', 'point', Pose3)



visualize_object_model_3d (WindowHandle, [ObjectModel3DRigidTrans,ObjectModel3DRigidTrans1], [], Pose2, ['color_0','color_1','disp_pose'], ['gray','green','true'], [], [], [], PoseOut1)

dev_clear_window ()
visualize_object_model_3d (WindowHandle, [ObjectModel3D1,ObjectModel3DRigidTrans1], [], [Pose3,Pose2], ['alpha','color_0','color_1','disp_pose'], [0.5,'yellow','green','true'], [], [], [], PoseOut1)

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

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

相关文章

SpringFramework 中CollectionUtils 工具类的使用

CollectionUtils是Spring框架中的一个工具类,提供了一系列对集合的操作方法。 import org.springframework.util.CollectionUtils;import java.util.*;public class CollectionUtilDemo {public static void main(String[] args) {//判断一个集合或Map是否为空&…

OWASP ZAP alerts

前提 使用OWASP ZAP对网站进行安全扫描,扫描后发现一些警告。 使用警告名称在百度进行搜索就能看到在OWASP ZAP网站上对应警告的解释。 可以在如下地址输入alert查询 https://www.zaproxy.org/docs/alerts/ Missing Anti-clickjacking Header 见https://www.zap…

SQL Server 2008R2安装图文教程(附SQL Server下载安装包)

SQL Server 2008R2 安装教程 演示系统:Windows server 2008R2 安装包:下载传送门 下载并解压安装包,找到解压的安装包,双击【setup.exe】 如果是你的服务器没有安装.NET Framework 3.5,那会弹出个提示框,…

CODEC 基础知识

 ASDOUT : ADC data output  DSDIN : DAC data input  LRCK : Left/Right data alignment clock  SCLK : Bit clock  MCLK 256 LRCK 或者 MCLK384 LRCK different audio data formats:  I2S …

公司新来了个拿18K出来的测试,让我见识到了什么叫真正的测试扛把子...

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

如何编写快速高效的SQL查询(四)——优化特定类型的查询与样例

这一节,我们将介绍如何优化特定类型的查询。 本节介绍的多数优化技巧都和特定的版本有关,所以对于未来MySQL的版本未必适用。毫无疑问,某一天优化器自己也会实现这里列出的部分或者全部优化技巧。 优化COUNT()查询 COUNT()聚合函数&#xf…

Hive安装部署

1、Hive安装地址 ①Hive官网地址 Apache Hive ②文档查看地址 GettingStarted - Apache Hive - Apache Software Foundation ③下载地址 Index of /dist/hive ④github地址 GitHub - apache/hive: Apache Hive 2、 安装Hive 1)把apache-hive-3.1.3-bin.ta…

“AI换脸”诈骗背后,如何应对黑灰产使用手段?

目录 诈骗是如何发生的? AI换脸诈骗的操作防范 AI换脸的风险分析与技术防范 近日,警方通报了一起使用智能AI技术进行电信诈骗的案件。被骗者是福州市某科技公司法人代表郭先生,他通过微信视频接到自己好友的电话,对方佯装需要借…

帕累托改进和帕累托最优、卡尔多-希克斯改进

根据目标个数,分为单目标规划,以及多目标规划。多目标的规划是去找折中的解集合,既pareto最优解集合。对优化目标超过3个以上的,称之为超多目标优化问题。 帕累托改进描述的就是在没有人变得不好的前提下让有些人更好的过程。帕累…

GPT虚拟直播Demo系列(二)|无人直播间实现虚拟人回复粉丝

摘要 虚拟人和数字人是人工智能技术在现实生活中的具体应用,它们可以为人们的生活和工作带来便利和创新。在直播间场景里,虚拟人和数字人可用于直播主播、智能客服、营销推广等。接入GPT的虚拟人像是加了超强buff,具备更强大的自然语言处理能…

Postman 接口测试神器

Postman 接口测试神器 Postman 是一个接口测试和 http 请求的神器,非常好用。 官方 github 地址: Postman Inc. GitHub Postman 的优点: 支持各种的请求类型: get、post、put、patch、delete 等支持在线存储数据,通过账号就可以进行迁移…

HY-M5 三维机器视觉系统在工业自动化生产的应用

行业背景: 如今科学技术有了日新月异的变化,工业自动化也在不断地发展。然而,在高强度、高精准的工作环境下,人工操作已经不能适应企业的发展需求,于是机器人的出现便提供了高效快捷的解决方案。为了实现自动化生产并确…

AUTOSAR通信篇 - CAN网络通信(二:CanIf)

在上一篇,我们介绍了CAN模块,接下来我们介绍在CAN模块之上的模块Can Interface(CanIf)模块。在AUTOSAR软件架构中,CanIf也在BSW层,它处于CAN模块之上紧挨着CAN模块。CanIf是一个硬件独立层,具有…

【MySQL】如何实现单表查询?

在我们对数据进行操作时,查询无疑是至关重要的,查询操作灵活多变,我们可以根据开发的需求,设计高效的查询操作,把数据库中存储的数据展示给用户。 文章目录 前言1. 基础查询1.1 基础查询语法1.2 基础查询练习 2. 条件查…

算法与数据结构-复杂度分析(上)

文章目录 什么是大 O 复杂度表示法为什么要用大 O 复杂度表示法如何分析一段代码的时间复杂度1、只关注循环执行次数最多的一段代码2、加法法则:总复杂度等于量级最大的那段代码的复杂度3、乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 几种常…

Unity老动画系统Animation

1、创建老动画系统 给要制作动画的GameObeject添加Animation组件 2、Animation参数 Animation:默认播放的动画 Animations:该动画组件可以控制的所有动画 Play AutoMatically:是否一开始就自动播放默认动画 Animate Physics:动画…

【JavaSE】Java基础语法(三十二):Stream流

文章目录 1. 体验Stream流2. Stream流的常见生成方式3. Stream流中间操作方法【应用】4. Stream流终结操作方法【应用】5. Stream流的收集操作 1. 体验Stream流 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素把集合中所有以"…

Python文件打包成exe文件

文章目录 背景安装pyinstaller开始打包总结 背景 今天因为在线将pdf转为word被收费了,有点不爽,所以自己动手撸一个pdf转word的小工具,想着打包成exe给朋友使用,万一哪天会用到呢? 安装pyinstaller 打开cmd命令窗口…

【AGC】云监控日志服务查询不到Logger日志相关问题

【关键字】 AGC、云监控、日志服务 【问题描述】 开发者反馈在使用AGC云监控,填写了Logger日志,但是在云监控的日志服务查不到的问题。具体如下所述: 云函数按要求写了Logger日志,但是在云监控的日志服务页面查询不到&#xff…

R语言混合效应(多水平/层次/嵌套)模型及 贝叶斯实现技术

回归分析是科学研究中十分重要的数据分析工具。随着现代统计技术发展,回归分析方法得到了极大改进。混合效应模型(Mixed effect model),即多水平模型(Multilevel model)/分层模型(Hierarchical Model)/嵌套…