更新2
我现在这样做:我使用的事实是,每个z切片中的路径都是封闭且简单的,并使用matplotlib.path来确定轮廓内外的点。利用这种思想,我将每个切片中的轮廓转换为布尔值图像,并将其组合为布尔值体积。
接下来,我使用^{}'s ^{}方法获得曲面的三角剖分以进行可视化。
这里有一个方法的例子。我认为数据略有不同,但你可以肯定地看到,结果要干净得多,可以处理断开连接或有孔的表面。
更新1(仍然错误)
我应该为将来遇到它的人更新这个。虽然上面的方法大部分时间都在工作,但它确实假设(通过球面坐标变换)没有两点位于同一条射线上。如果您注意到上面图像左中角的工件,这就是原因。
一个更好的方法是在表面上做“手术”。把表面想象成一个橘皮,你把它切成一边,然后张开,伸展开来。然后你有一个二维平面,你可以三角化和插值。你只需要跟踪如何回到3D中相应的位置,实现这个想法需要相当多的工作,而且实现还需要特别注意如何表示我的数据。
不管怎样,这只是为了说明一个人如何更有力地处理这个问题。
原始答案
好吧,这是我想出的解决办法。这在很大程度上取决于我的数据是大致呈球形的,而且我认为在z方向上采样是一致的。其他一些评论提供了关于更健壮解决方案的更多信息。由于我的数据是大致球形的,所以我通过数据点的球面坐标变换来三角化方位角和天顶角。import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d im