我在试着用体素。我有一个封闭的网格对象,但是这里我将使用提供的示例mesh。我想要做的是将网格转换成填充的体素网格。
下面的代码获取一个网格,并使用pyvista将其转化为体素网格,但是在内部,体素网格是空的。
import numpy as np
import pyvista as pv
from pyvista import examples
# Load a surface to voxelize
surface = examples.download_foot_bones()
surface
voxels = pv.voxelize(surface, density=surface.length / 500)
voxels.plot(opacity=1.00)有办法用细胞来填补内部空隙吗?如果不是,我假设会有一种填充数组的方法,然后将其转换为填充的体素网格?
发布于 2022-04-14 23:41:33
我相信你被体素的表述误导了。由于体素被紧密地填充在图中,即使部分不透明,你也不能看到内部表面。换句话说,体素化已经很密集了。
我们可以提取体素化网格中每个单元的中心,并注意到它在网格中很密集:
voxels.cell_centers().plot(render_points_as_spheres=True)(您可能需要手动激活网格上的标量才能得到彩色地图)。
当放大时,这会产生类似的情况:

如果体素网格是空心的,我们只会看到沿着网格表面的球。相反,我们有密集的填充点填补整个空间。
要获得更具体的证据,请考虑一个四面体体化:
import pyvista as pv
tetra = pv.voxelize(pv.Tetrahedron(), density=0.1)
tetra.plot(scalars='vtkOriginalCellIds')

现在,如果我们在它上运行this (slow and undocumented) internal helper called atomize,它将缩小每个体素,允许我们查看它们:
from pyvista.demos.logo import atomize # undocumented, don't rely on it
atomized = atomize(tetra, scale=0.5)
atomized.plot()

特别是在3d中移动网格使得所有的内部体素都存在,它们只是被最外层的体素所遮蔽。
https://stackoverflow.com/questions/71877992
复制相似问题