在 python 中创建等值网格。行进立方体
Creating a mesh out isovalues in python. Marching cubes
我创建了一个程序,它能够预测给定形状为 nx3 的一组位置,它是形状为 nx1 的等值(n 是样本数)。现在我希望能够将其可视化并将其保存为网格,我已经阅读过一种查找等值面的顶点和面的方法是使用一种称为行进立方体的算法,我发现它在 python skimage.measure。但是我似乎无法理解如何利用我的数据,将其提供给 measure.marching_cubes_lewiner,因为它只说接受体积数据 (M,N,P)。
我试图将它重塑为 3d 阵列,但我不知道它应该是什么样子。我试着把它作为网格来做,但失败了。我觉得这不应该很难,但我是网格和网格的新手。
isovalue # nx1 array
isovalue = # how do I process this array(nx1) into marching cubes acceptable
print(isovalue.shape)
verts, faces, normals, values = measure.marching_cubes_lewiner(isovalue)
行进的立方体应该是一个 3D 数组而不是我试图给它的总是错误。
如果有人对此也感到好奇,我自己找到了答案。如果你有 nx1 形状的一维数组,你需要将其整形为体积数组以输入 measure.marching_cubes_lewiner,将其重塑为 (cbrt(n),cbrt(n),cbrt(n) ) 就这么简单。
我创建了一个程序,它能够预测给定形状为 nx3 的一组位置,它是形状为 nx1 的等值(n 是样本数)。现在我希望能够将其可视化并将其保存为网格,我已经阅读过一种查找等值面的顶点和面的方法是使用一种称为行进立方体的算法,我发现它在 python skimage.measure。但是我似乎无法理解如何利用我的数据,将其提供给 measure.marching_cubes_lewiner,因为它只说接受体积数据 (M,N,P)。
我试图将它重塑为 3d 阵列,但我不知道它应该是什么样子。我试着把它作为网格来做,但失败了。我觉得这不应该很难,但我是网格和网格的新手。
isovalue # nx1 array
isovalue = # how do I process this array(nx1) into marching cubes acceptable
print(isovalue.shape)
verts, faces, normals, values = measure.marching_cubes_lewiner(isovalue)
行进的立方体应该是一个 3D 数组而不是我试图给它的总是错误。
如果有人对此也感到好奇,我自己找到了答案。如果你有 nx1 形状的一维数组,你需要将其整形为体积数组以输入 measure.marching_cubes_lewiner,将其重塑为 (cbrt(n),cbrt(n),cbrt(n) ) 就这么简单。