如何使用 Python 绘制 3d 数据矩阵?

问题描述 投票:0回答:1

我正在使用 OCT 扫描,并且有 3D 数据矩阵,背景的值为 0.0,其余部分在中间对齐。

我当前的数据在二维绘图中的外观此图像是我当前拥有的示例,具有以下形状/格式

Tensor [25, 496, 512]

如何使用 python 在 3d 中绘制此图?我想将音量可视化。我的主要问题是背景通常绘制为黑色,我只能看到一个黑色立方体。

这是我当前的实现:

def plot_oct_3d(scan):
    slices, height, width = scan.shape
    x, y, z = np.meshgrid(np.arange(width), np.arange(height), np.arange(slices))

    x_flat = x.flatten()
    y_flat = y.flatten()
    z_flat = z.flatten()
    values_flat = scan.flatten()

    mask = values_flat > 0.0
    x_plot = x_flat[mask]
    y_plot = y_flat[mask]
    z_plot = z_flat[mask]
    values_plot = values_flat[mask]

    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection='3d')

    sc = ax.scatter(x_plot, y_plot, z_plot, c=values_plot, s=1, cmap='gray', alpha=0.6)

    ax.set_xlabel('Width')
    ax.set_ylabel('Height')
    ax.set_zlabel('Slices (Depth)')
    ax.set_title('3D Visualization of OCT Scans')

    plt.colorbar(sc, ax=ax, label='Intensity Value')
    plt.show()

如果我在扫描 OCT 后传递张量(它是 e2e 格式),则扫描结果将显示为黑匣子,因为 0.0 值仍被绘制。从 .e2e 文件加载数据没有任何问题,并且它似乎在 2d matplot 中正确绘制,如上图所示。

这就是我的 3D 绘图的样子

你建议我做什么?

python matplotlib 3d scatter-plot grayscale
1个回答
0
投票

要使用 matplotlib 进行 3D 绘图,您必须导入 Axes3D 并将 ax 的投影设置为 3d

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

points = [(0,0,0),(0,1,0),(1,0,0)]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter([x[0] for x in points], [y[1] for y in points], [z[2] for z in points])

plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.