如何利用open3D来生成OCC

config.yaml请添加图片描述

'depth': 10:#深度,设定为10,常用于决定处理或计算的层次或深入程度。
'min_density': 0.1:#最小密度,设置为0.1,用于过滤或选择的密度阈值。
'n_threads': -1:#线程数,设为-1,通常表示使用所有可用的处理器核心。
'downsample': False:#降采样,设为False,表示不进行降采样处理。
'voxel_size': 0.5:#体素大小,设置为0.5,用于定义空间网格的体素的尺寸。
'max_nn': 20:#最大邻居数,设为20,用于某些需要基于最近邻算法的计算。
'pc_range': [-50, -50, -5, 50, 50, 3]#点云范围,设置为从-50到50在X和Y方向上,从-5到3在Z方向上,用于界定处理或分析的空间区域。
'occ_size': [200, 200, 16]#占据格大小,设置为200x200x16,表示在三维空间中的格子数量。
'self_range': [3.0, 3.0, 3.0]#自身范围,设置为3.0x3.0x3.0,可能用于定义某种局部空间的大小。
def run_poisson(pcd, depth, n_threads, min_density=None):# 使用Poisson表面重建算法从点云创建三角形网格mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=depth, n_threads=n_threads)# 如果提供了最小密度阈值,则移除低于该阈值的顶点if min_density:vertices_to_remove = densities < np.quantile(densities, min_density)mesh.remove_vertices_by_mask(vertices_to_remove)# 计算网格顶点的法线mesh.compute_vertex_normals()return mesh, densities
print('run Poisson surface reconstruction')
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=9)
print(mesh)
o3d.visualization.draw_geometries([mesh],zoom=0.664,front=[-0.4761, -0.4698, -0.7434],lookat=[1.8900, 3.2596, 0.9284],up=[0.2304, -0.8825, 0.4101])

在这里插入图片描述

泊松曲面重建还将在低点密度区域创建三角形,甚至外推到某些区域(请参见上面 eagle 输出的底部)。 create_from_point_cloud_poisson 函数有第二个 densities 返回值,该值指示每个顶点的密度。低密度值意味着顶点仅由输入点云中的少量点支持。

In the code below we visualize the density in 3D using pseudo color. Violet indicates low density and yellow indicates a high density.
在下面的代码中,我们使用伪彩色可视化 3D 密度。紫色表示低密度,黄色表示高密度。

源代码

 # 如果提供了最小密度阈值,则移除低于该阈值的顶点if min_density:vertices_to_remove = densities < np.quantile(densities, min_density)mesh.remove_vertices_by_mask(vertices_to_remove)

open3d 效果图

print('visualize densities')
densities = np.asarray(densities)
density_colors = plt.get_cmap('plasma')((densities - densities.min()) / (densities.max() - densities.min()))
density_colors = density_colors[:, :3]
density_mesh = o3d.geometry.TriangleMesh()
density_mesh.vertices = mesh.vertices
density_mesh.triangles = mesh.triangles
density_mesh.triangle_normals = mesh.triangle_normals
density_mesh.vertex_colors = o3d.utility.Vector3dVector(density_colors)
o3d.visualization.draw_geometries([density_mesh],zoom=0.664,front=[-0.4761, -0.4698, -0.7434],lookat=[1.8900, 3.2596, 0.9284],up=[0.2304, -0.8825, 0.4101])

在这里插入图片描述

Surface normal estimation
表面法线估计

源码

mesh.compute_vertex_normals()

open3D 可视化

print("Computing normal and rendering it.")
mesh.compute_vertex_normals()
print(np.asarray(mesh.triangle_normals))
o3d.visualization.draw_geometries([mesh])

在这里插入图片描述
源码

def preprocess_cloud(pcd, max_nn=20, normals=None):# 复制点云数据cloud = deepcopy(pcd)# 如果需要估算法线if normals:params = o3d.geometry.KDTreeSearchParamKNN(max_nn)cloud.estimate_normals(params)# 将法线朝向相机位置cloud.orient_normals_towards_camera_location()return cloud

open3D

open3d.geometry.KDTreeSearchParamKNN(knn=20)                        # 计算近邻的20个点
import open3d
import numpy as np
import mayavi.mlab as mlab
# 4. 法向量的计算
def open3d_vector_compute():pcd_path = r"E:\xxxx\open3d_xxxx\ICP_data\cloud_bin_0.pcd"pcd = open3d.io.read_point_cloud(pcd_path)pcd.estimate_normals(search_param=open3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=30))normals = np.array(pcd.normals)    # 法向量结果与点云维度一致(N, 3)points = np.array(pcd.points)print(normals.shape, points.shape)# 验证法向量模长为1(模长会有一定的偏差,不完全为1)normals_length = np.sum(normals**2, axis=1)flag = np.equal(np.ones(normals_length.shape, dtype=float), normals_length).all()print('all equal 1:', flag)# 法向量可视化open3d.visualization.draw_geometries([pcd],window_name="Open3d",point_show_normal=True,width=800,   # 窗口宽度height=600)  # 窗口高度
if __name__ == '__main__':open3d_vector_compute()

在这里插入图片描述
参考连接

github :连接
open3D 官网

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运行vue项目,控制台一直报错freeze ,删除node_modules缓存.cache,再npm 重启项目即可(2024-04-15)

控制台一直报错freeze Could not freeze ...: Cannot read property hash of undefined解决方案&#xff1a; 这个报错一般是由于npm运行缓存导致&#xff0c;清除即可&#xff1a; 删除 ./node_modules/.cache 再重新运行npm run start/dev/serve&#xff0c;即可重启项目…

Flink入门学习 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

DrugBAN:基于双线性注意力网络进行药物-靶点结合预测。

DrugBan&#xff1a;一种可解释的双线性注意力网络进行药物-靶点结合预测。 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DrugBan&#xff1a;一种可解释的双线性注意力网络进行药物-靶点结合预测。前言一、模型…

gcn代码处理出现的问题

README 版本不一致 python 2.7 PYTHON 3.7 切换 TensorFlow系统的学习使用 数据集下载

LoRa无线电机温振传感器,FlexLua低代码技术助力快速实现。

在物联网时代&#xff0c;无线传感技术的应用愈发广泛。其中&#xff0c;LoRa&#xff08;长距离低功耗无线技术&#xff09;作为一种适用于远距离、低功耗的通信技术&#xff0c;被广泛应用于各种物联网场景。而结合温度和振动传感技术&#xff0c;能够构建出用于监测机器状态…

多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量…

构建跨设备3D应用:HOOPS的跨平台开发能力

在当今数字化和可视化需求不断提升的时代&#xff0c;三维技术的应用越来越广泛&#xff0c;尤其在制造、建筑、工程及媒体行业。HOOPS&#xff0c;由Tech Soft 3D开发&#xff0c;是一套全面的软件开发工具包&#xff0c;用于构建高性能的三维应用程序。该工具包涵盖了从三维渲…

架构师系列-搜索引擎ElasticSearch(九)- 分布式文档原理

索引的路由计算 当索引一个文档的时候&#xff0c;文档会被存储到一个主分片中&#xff0c; Elasticsearch如何知道一个文档应该存放到哪个分片中呢? 肯定不是随机的而是根据以下算法来决定的 shard hash(routing)% number_of_primary_shards 1) routing值是一个任意字符串…

c++ - 类的默认成员函数

文章目录 前言一、构造函数二、析构函数三、拷贝构造函数四、重载赋值操作符五、取地址及const取地址操作符重载 前言 默认成员函数是编译器自动生成的&#xff0c;也可以自己重写&#xff0c;自己重写之后编译器就不再生成&#xff0c;下面是深入了解这些成员函数。 一、构造…

3dmax制作小熊猫的基本流程

1.透视图插入面片&#xff0c;改高度宽度&#xff0c;把参考图放进面片里。 2.角度捕捉切换&#xff0c;角度改为90 3.shift旋转&#xff0c;旋转面片&#xff0c;复制一个出来 4.在前视图&#xff0c;把参考图片中的正式图小熊猫的一半的位置&#xff08;可以是眼睛&#x…

003 【笔记神器】Obsidian:打造属于自己的万能工作台

前言&#xff1a;Obsidian 是一款很多大神都在用的笔记软件&#xff0c;具有强大的功能&#xff0c;能够满足日常各种笔记的需求。强大之处在于&#xff1a;Obsidian 能够安装各种强大的插件&#xff0c;实现各种功能。 废话不多说&#xff0c;玩转 Obsidian 仅需这篇文章足矣&…

第G7周:Semi-Supervised GAN 理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 参考论文&#xff1a;《Semi-Supervised Learning with Generative Adversarial Netw…