我试图创建一个Voronoi图,使用一个表示体素的3d数组,其中的坐标由数组的索引表示。
例如:points = np.random.random([10,3])
vox_len = 0.1
lx = ly = lz = 11
hull_space=np.zeros([lx,ly,lz],dtype=np.int16)
hull_space.fill(-1)
for i in range(lx):
for j in range(ly):
for k in range(lz):
coord = np.array([i,j,k]).astype(float)*vox_len
diff = points - coord
dist = np.sqrt(diff[:,0]**2 + diff[:,1]**2 + diff[:,2]**2)
closest = np.argmin(dist)
hull_space[i][j][k]=closest
问题是,对于较大的数组,代码非常慢。我也试过:
^{pr2}$
但结果更糟。我知道scipy的voronoi图方法,但我需要构建一个体素图像,以便对voronoi区域的边缘进行距离变换。我的目标是创建一个缠绕纤维结构的图像,用于孔隙网络模型,而体素方法对于获得孔隙体积非常有用。在
任何能使算法运行更快的帮助都将不胜感激。对于一个300x300x300的500点图表,在我的机器上大约需要50分钟