3D CAD模型的体素化

你有没有搜索过如何将 Cad 模型转换为 python 就绪的 numpy 数组,但没有得到任何明确的答案? 我也是。 经过长时间的研究并尝试了很多软件和 python 库,我终于能够将 3D STEP 文件转换为 3 维 numpy 数组。 如果你想做同样的事情或只是想知道它是如何完成的,请继续阅读 😃

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、简介

与二维图像数据相比,对 3 维模型的机器学习研究并不多。 大多数机器学习和深度学习模型都使用 numpy 数组作为数据类型。

虽然点云数据可以作为 numpy 数组导入,但是当 3D 模型转换为点云时,空间信息会丢失。 点云只是空间中的一组数据点,其中每个点都有其一组 X、Y 和 Z 坐标。 当点云被转换为 3 维 numpy 数组时,空间信息被恢复。 一个 3 维 numpy 数组就像一堆 2D 图像,其中每个图像都是整个 3D 的横截面视图,无论你如何切片阵列。

我最近正在从事一个这样的项目,但没有找到任何资源来帮助我将 cad 模型转换为 numpy 数组。

2、需要的软件和 Python 库

要加载“.stp”文件,我们将使用 FreeCAD 软件。 FreeCAD 是一款免费的开源参数化 3D 建模器。 你可以从此处下载该软件。 我们将使用 FreeCAD 加载“.stp”文件并将其转换为点云。

对于 Python,我将使用 Jupyter Notebook,但代码应该可以在任何其他 IDE 上正常运行。 我们将需要以下 Python 库来可视化点云并将其转换为 numpy 数组。

import pptk #not essential, but its good for visualizing
import numpy as np
import pandas as pd
from pyntcloud import PyntCloud

3、将 .stp 文件转换为点云

FreeCAD 的用户界面非常直观且易于理解。 当你在 FreeCAD 中打开一个“.stp”文件时,它看起来像这样:
在这里插入图片描述

我正在使用的 cad 模型是我几年前为 GrabCad 网站上的竞赛创建的。 您可以通过单击此处查看我的其他 Cad 模型并在 GrabCad 上进行渲染。

我们在 FreeCAD 中要做的第一件事是激活点工作台。 转到 View>Workbench>Points,如下图所示:

在这里插入图片描述

要将 3D 模型转换为点云,请选择左侧面板上的零件(part)。 选择零件实体后,工具栏中的“转换为点”选项将可用。 选择转换为点选项并输入最大距离。 最大距离是两点之间的距离。 创建点云所花费的时间与最大距离成反比。 因此,请根据所需的详细程度和你的计算机配置来选择它。

当单击“确定”时,点云即会生成,并且可以在左侧面板上将其视为一个单独的零件体。 可以在下图中看到:
在这里插入图片描述

要导出点云,请在左侧面板上选择点云零件主体,然后单击“导出点云”选项。 确保在保存点云时文件的扩展名应该是“.asc”。
在这里插入图片描述

4、点云到 3D Numpy 数组

要将“.asc”点云文件加载到 python 中,我们将使用 numpy 库。 使用下面显示的代码行将点云导入 python。 点云将是一个形状为 (N, 3) 的 numpy 数组。 其中 N 是数据点的数量,3 是每个数据点的 X、Y 和 Z 坐标。 有关单个数据点的示例,请参见下面代码中的最后两行。

import numpy as np
point_cloud = np.loadtxt("path/bracketpointcloud.asc")
point_cloud.shape
#output: (1840605, 3)
point_cloud[1]
#output: array([94.5374 , -2.27163, -3.81])

我们可以使用 pptk 库或 PyntCloud 库来查看点云。 我将解释两者,但 pptk 更好且易于可视化。 要使用 pptk 可视化点云,只需使用以下代码。 这将打开一个新窗口,你可以在其中缩放和旋转点云。 pptk 库提供了许多其他参数,可以在文档中看到。

v = pptk.viewer(point_cloud)

在这里插入图片描述

要使用 PyntCloud 可视化点云,我们必须将 numpy 数组转换为 pandas 数据框。 其中每行代表一个数据点,列代表相应数据点的 X、Y 和 Z 坐标。 然后这个数据框被用来创建一个 PyntCloud 对象,如下面的代码所示。 要绘制点云,请使用以下代码的最后一行。 PyntCloud 将在 jupyter 中显示输出。 我们可以在显示点云之前设置点大小和不透明度。

from pyntcloud import PyntCloud
df = pd.DataFrame(data=point_cloud, columns=['x','y','z'])
cloud = PyntCloud(new_df)
cloud
#output: PyntCloud
         1840603 points with 0 scalar fields
         0 faces in mesh
         0 kdtrees
         0 voxelgrids
         Centroid: 57.98352803, 18.506313633, -6.561006902397e-05
         Other attributes:
cloud.plot(point_size=0.1, opacity=0.6)

现在我们将点云数据帧转换为体素网格,也称为点云体素化(Voxelization)。 为此,我们将使用下面的前两行代码。 我们还可以设置表示 3D 模型的体素空间的大小。 这在深度学习和机器学习中特别方便,因为所有输入都应该具有相同的大小。 可以使用下面显示的最后一行代码查看体素网格。

voxelgrid_id = cloud.add_structure(“voxelgrid”, n_x=512, n_y=512, n_z=512)
voxelgrid = cloud.structures[voxelgrid_id]
voxelgrid.plot(d=3, mode="density", cmap="hsv")

最后我们只需要将体素网格转换为二进制 numpy 数组。 使用下面的代码行。

Binary_voxel_array = voxelgrid.get_feature_vector(mode=”binary”)
Binary_voxel_array.shape
#output: (512, 512, 512)

好了,现在我们有了一个 Numpy 数组表示的 3D cad 模型。

5、让我们看看结果

我们创建的 numpy 数组与 3D 模型非常相似。 当我们在 2 维中对数组进行切片时,我们将立即获得剖面图。 通过这种方式,机器可以保留 3D 模型的空间信息,机器可以使用各种深度学习或机器学习技术来学习这些信息。 下面是我们在 (512, 512, 512) 数组的不同索引处对数组进行切片时得到的几个示例。

plt.imshow(Binary_voxel_array[ 200, : , : ], cmap=’gray’)

在这里插入图片描述

plt.imshow(Binary_voxel_array[ :, 300, : ], cmap=’gray’)

在这里插入图片描述

plt.imshow(Binary_voxel_array[ :, :, 250 ], cmap=’gray’)

在这里插入图片描述


原文链接:3D CAD模型体素化 — BimAnt

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机械工程师CAD技术手册是一本专门为机械工程师编写的技术参考书,旨在提供CAD(计算机辅助设计)方面的知识和技能。本手册涵盖了机械设计与制造过程中的CAD应用,包括CAD软件基础知识、2D绘图、3D建模、装配设计、工程图纸制作、材料选择和制造工艺等内容。 对于机械工程师而言,掌握CAD技术对于从事机械设计和制造工作至关重要。CAD技术手册通过详细介绍CAD软件的使用方法和技巧,帮助机械工程师快速高效地完成设计任务。从简单的2D绘图到复杂的3D建模,机械工程师可以通过CAD软件将设计想法转为实际的产品模型,为后续的工程制造和装配提供可靠的参考。 此外,CAD技术手册还包含了规范和标准的知识,帮助机械工程师制作工程图纸。这些图纸是交流和沟通的重要工具,可以确保设计和制造过程中的准确性和一致性。通过手册中的指导,机械工程师可以学会正确使用CAD软件绘制符合国际标准和行业规范的工程图纸。 在现代机械工程领域,CAD技术的应用已经成为行业的标配,对于提高工作效率、降低成本和优产品设计具有重要意义。机械工程师CAD技术手册是一本实用的参考书,可以帮助机械工程师快速掌握CAD技术,提高设计和制造的水平,从而更好地适应现代工程领域的需求。 ### 回答2: 机械工程师CAD技术手册是一本专门为机械工程师设计的技术手册,帮助他们使用计算机辅助设计(CAD)软件进行机械设计工作。这本手册涵盖了各个方面的CAD技术知识和技巧,旨在提高机械工程师的设计效率和质量。 首先,手册中会详细介绍CAD软件的基本操作和界面布局。机械工程师可以学习如何创建新的绘图文件、打开和保存绘图文件,以及如何使用菜单、工具栏和快捷键等进行操作。 其次,手册还会介绍CAD中的基本绘图技术,如线段、圆弧和多边形等。机械工程师可以学习如何使用这些基本元素进行几何造型,并掌握精确绘制和编辑的技巧。 此外,手册也会涵盖一些高级绘图技术,如参数建模和装配设计。机械工程师可以学习如何使用参数进行几何图形的调整和变形,以及如何使用装配功能将多个零件组装成完整的机械系统。 另外,手册还会介绍CAD中的标注和尺寸技术,帮助机械工程师在绘图时进行尺寸标注和注释,确保设计的准确度和可读性。 总的来说,机械工程师CAD技术手册是一本全面指导机械工程师使用CAD软件进行机械设计的参考书。通过学习和掌握手册中的知识和技巧,机械工程师可以更加高效和准确地进行机械设计工作,提高设计水平和工作效率。 ### 回答3: 机械工程师CAD技术手册是一本针对机械工程师设计和制造过程中使用计算机辅助设计(CAD)软件所编写的专业指导手册。 该手册主要包括以下内容: 1. CAD软件的介绍:手册会介绍常用的CAD软件,如AutoCAD、SolidWorks等,并且详细说明这些软件的功能和特点,以便工程师能够选择最适合自己的CAD软件。 2. CAD基础知识:手册会详细介绍CAD软件的基本操作方法,包括绘图、编辑、建模、装配和渲染等技术,帮助工程师快速上手掌握CAD软件的基本使用。 3. 2D绘图和图纸:手册中会详细介绍2D绘图的方法和技巧,包括绘制直线、弧线、多边形等基本图形,以及建立和管理图层、注释、标注和尺寸等内容。此外,手册还会教授如何生成和打印高质量的图纸。 4. 3D建模和装配:手册会重点介绍如何进行三维建模和装配设计,包括创建实体模型、表面模型体素模型等。工程师可以学习如何进行零件建模、装配和文件管理,以便进行设计验证和虚拟装配。 5. 材料和工程图:手册会详细介绍材料选择和材料管理的方法,包括材料的物理属性、机械性质和应用范围等。此外,手册还会介绍工程图的编制规范和要求,以确保图纸的准确性和可读性。 总而言之,机械工程师CAD技术手册是一本全面而实用的指导手册,为机械工程师提供了掌握CAD软件技术的基础知识和实际操作技巧。通过学习和应用手册中的内容,工程师能够更加高效地进行机械设计和制造工作,提高工作效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值