我正在使用 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 中正确绘制,如上图所示。
你建议我做什么?
要使用 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()