对STL文件进行像素化处理?

3
基本上,我有一个约10,000个STL文件的语料库,我需要将它们全部转换为1和0的32x32x32数组(体素)。
我已经有了将STL文件转换为体素的脚本; https://github.com/rcpedersen/stl-to-voxel ,但有时即使我指定需要32x32x32的数组,它也会给我一些巨大的数组,并且除了存在缺陷外,它处理起来非常慢(在48小时内处理了约600个文件...)
尝试修复此脚本是否更容易,还是编写自己的脚本?看起来像体素化STL不是一项难任务,但我不知道有哪些方法可用;如果有任何策略/提示,任何帮助都将不胜感激。
2个回答

1
抱歉让您失望,体素化实际上是一个相当困难的任务。而且Python并不适合快速完成这项任务。即使对于简单的切片/交叉测试,我认为C++实现也会比Python快100倍。我建议使用libigl。或者在GPU上进行实时处理:) 寻找保守光栅化。但这仅适用于“好”的网格,即非相交和闭合的网格。否则会变得更加困难。寻找“广义绕数” - 也在igl中。

0
基本上,体素化面片表面意味着将其分离为内部和外部。可以用不同的方法来实现:最简单的方法是找到每个体素的符号距离,但这需要输入网格是封闭的,另一种方法是找到绕数。您可以在MeshLib中找到两者的实现。此外,还有一个可以帮助您的Python模块:
pip install --upgrade pip
pip install meshlib

from meshlib import mrmeshpy as mm

# load mesh
mesh = mm.loadMesh(mm.Path("path_to_file.stl"))

mtvParams = mm.MeshToVolumeParams()
# signed will have negative values inside mesh and positive outside, but requires closed mesh
mtvParams.type = mm.MeshToVolumeParamsType.Signed
# voxels with presice distance - 3 inside, 3 - outside
mtvParams.surfaceOffset = 3

# find correct voxel size to have 32x32x32 volume
meshBox = mesh.computeBoundingBox()
boxSize = meshBox.max-meshBox.min
mtvParams.voxelSize = boxSize / 27.0
voxels = mm.meshToVolume(mesh,mtvParams)

# save voxels as tiff slices
vsParams = mm.VoxelsSaveSavingSettings()
vsParams.path = "save_voxels_dir"
vsParams.slicePlane = mm.SlicePlane.XY
mm.saveAllSlicesToImage(voxels,vsParams)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接