Python中3D表单的数据分析

问题描述

我的问题肯定已经在某个地方回答了,但我找不到它。

我有一个二进制的numpy 3D数组(形状=(512,512,304)),其中有一个随机形式(标记为1)。其他任何点都标记为0。

让我们以一个简单的例子为例。

我想将此表格绘制在3D绘图上,我们可以看到球体。

  • 我已经尝试过3D绘图matplotlib,但无法掌握
  • 我使用了来自(ipywidgets)的交互功能来逐片打印它,但这不是有效的

我还想计算表格的体积(可能是完全随机的多面体)

我在寻找建议而不是在寻求答案 预先感谢

解决方法

您可以使用voxels,尽管如果尝试使用这么大的数组运行它会很慢。例如,您可以仅绘制10%的元素:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Make a sphere
x,y,z = np.ogrid[-1:1:512j,-1:1:512j,-1:1:304j]
sphere = np.sqrt(x * x + y * y + z * z) < 0.5
# Make 3D axis
ax = plt.figure().add_subplot(projection='3d')
# Make voxels figures at 10% resolution
ax.voxels(filled=sphere[::10,::10,::10])
ax.figure.show()

输出:

Output figure

,

一种放置方法是使用小部件对其进行绘制:

def show_axial(image_array,slice):
   plt.imshow(img_array[:,:,mr_slice].T,cmap="gray")

interact(show_axial,img_array = fixed(im_arr),slice=widgets.IntSlider(max=im_arr.shape[2] - 1,min = 0))

这给出了一个二维图,其中带有一个滑动条,滑动条的范围在0到图像宽度之间,并且可以逐个幻灯片显示。