Halcon中的一些3D算子
一、记录一些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)
相关文章:
Halcon中的一些3D算子
一、记录一些Halcon里的关于3D的算子 1.read_object_model_3d 从文件读取一个3d模型 如下图,读的一个ply文件出来是个3d点云模型 2.visualize_object_model_3d 交互式展示3d模型 即上个算子读出来后,通过这个算子可以把3d模型显示出来旋转、平移&am…...
Android:Selector + Layer-lists 实现 AppCompatCheckBox
最近做项目涉及到一些UI相关的东东,虽然比较简单,但是也很有趣,写两篇简短的博客记录一下。 一."Selector 两张图片"实现 AppCompatCheckBox AppCompatCheckBox 是 androidx的一个widget:androidx.appcompat.widget.…...
TreeMap类型添加数据
package com.test.Test11;import java.util.*;public class Test02 {public static void main(String[] args) {/** 增加:put(K key,V value)* 删除:clear() remove(Object key)* 修改:* 查看:entrySet() get(Object key) keySet(…...
iOS 16 UI 设计系统免费在线使用方法
1、iOS 16 UI 设计系统中有什么? iOS 16 UI 设计系统通常包含以下组件和元素: 1. 按钮:包括操作按钮、图标按钮、导航按钮、滚动按钮、切换按钮、单选按钮、复选框按钮、呼叫按钮等各种类型的按钮。 2. 窗口和 UI 控件:包括标签…...
【接口测试】JMeter接口关联测试
1 前言 我们来学习接口管理测试,这就要使用到JMeter提供的JSON提取器和正则表达式提取器了,下面我们来看看是如何使用的吧。 2 JSON提取器 1、添加JSON提取器 在线程组右键 > 添加 > 后置处理器 > JSON提取器 2、JSON提取器参数说明 N…...
腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)
腾讯云服务器ping不通什么原因?ping不通公网IP地址还是域名?新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法: 目录 腾讯云服务器ping不通原因分析及解决方法 安全组ICMP协…...
【C++/嵌入式笔试面试八股】一、32.封装
封装 08.C++中struct和class的区别🍊 相同点 两者都拥有成员函数、公有和私有部分任何可以使用class完成的工作,同样可以使用struct完成不同点 两者中如果不对成员不指定公私有,struct默认是公有的,class则默认是私有的class默认是private继承, 而struct默认是public继…...
【算法】Transform to Chessboard 变为棋盘
文章目录 Transform to Chessboard 变为棋盘问题描述:分析代码 Transform to Chessboard 变为棋盘 问题描述: 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置。 返回 将这个矩阵变为 棋盘 所需…...
vue通过封装$on定义全局事件
我们先在vue项目的src跟目录下创建一个文件夹 叫 utils 下面创建一个js文件夹 叫 bus.js 参考代码如下 import Vue from "vue"; export default new Vue();然后 我们就可以来用了 在需要定义事件的组件中编写 <template><div><h1>Hello world!&…...
资产管理规范
生产系统资产管理规范 1. 引言 生产系统的资产管理是确保生产系统正常运行和提高生产效率的关键因素之一。本文档旨在制定一套规范,以确保生产系统中的资产,包括服务器和软件等,得到有效管理和保护。 2. 资产分类 生产系统资产可根据其性质…...
已解决:如何从别人的仓库那里克隆到自己的仓库,并修改代码并提交。
一、场景 拉取项目代码后,如果要共同开发一个项目的自动化代码,此时需要把自己写的代码部分提交到代码仓库。 可以用pycharm把修改的代码push到代码仓库 二、操作方法 1.从别人的仓库那里点击fork,将仓库克隆到自己的仓库。 2.在pychar…...
剑指 Offer 18. 删除链表的节点
🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸剑指 Offer 📕 学习格言:博观而约取,厚积而薄…...
WiFi 6 vs WiFi 5
在现代无线通信领域,WiFi已经成为人们日常生活中不可或缺的一部分。随着技术的不断发展,WiFi标准也在不断更新和演进。WiFi 6(802.11ax)和WiFi 5(802.11ac)是当前两个主要的WiFi标准。 本文将详细介绍WiFi …...
PHP语言基础
一.标记风格 标记风格分为四类(推荐XML) 1.XML风格 <?php echo这是xml风格‘; ?> 注意:结束标识符必须单独另起一行,并且不能有空格。在标识符前后有其他符号或者字符也会发生错误。 2.脚本风格 <script languagephp> …...
怎么用Excel VBA写一个excel批量合并的程序?
您可以按照以下VBA代码来实现把同一路径上的所有工作簿合并到同一个工作簿中: VBA Option Explicit Sub MergeWorkbooks() Dim path As String, fileName As String, sheet As Worksheet Dim targetWorkbook As Workbook, sourceWorkbook As Workbook Dim workshe…...
WuThreat身份安全云-TVD每日漏洞情报-2023-05-22
漏洞名称:Apple WebKit 任意代码执行漏洞 漏洞级别:中危 漏洞编号:CVE-2023-32373 相关涉及:Apple iOS和iPadOS 16.4.1 漏洞状态:在野 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-12579 漏洞名称:海康威视部分iVMS系统存在文件上传漏洞 漏洞级别:未定义…...
Eclipse教程 Ⅵ
今天分享Eclipse Java 构建路径、Eclipse 运行配置(Run Configuration)和Eclipse 运行程序 Eclipse Java 构建路径 设置 Java 构建路径 Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项: 源码包项目相关的 jar 包及类文件项目引用的的类…...
Seaborn.load_dataset()加载数据集失败最佳解决方法
load_dataset() 是 Seaborn 库中提供的一个函数,用于加载一些原始数据集。这些数据集包含了许多经典的数据集,比如鸢尾花数据集、小费数据集等,这些数据集在数据可视化和机器学习中非常常见。 使用 load_dataset() 函数可以方便地获取这些数…...
java 区分缺陷Defects/感染Infections/失败Failure
java 区分缺陷Defects/感染Infections/失败Failure 缺陷Defects 软件故障总是从代码中一个或多个缺陷的执行开始。 缺陷只是一段有缺陷、不正确的代码。 缺陷可能是程序语句的一部分或完整部分,也可能对应于不存在但应该存在的语句。 尽管程序员要对代码中的缺陷负…...
如何学习R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合?
专题一:Meta分析的选题与文献计量分析CiteSpace应用 1、Meta分析的选题与文献检索 1) 什么是Meta分析 2) Meta分析的选题策略 3) 文献检索数据库 4) 精确检索策略,如何检索全、检索准 5) 文献的管理与清洗,如何制定文献纳入排除标准 6…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
