matplotlib 三维图像可视化

qnzebej0  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(274)

我有nrrd格式的3D图像数据,其中数组的形状为(300,256,256)(这意味着我有一个256 x256的图像和300个切片,加起来就是一个3D图像)。从nrrd阅读后的阵列保存每个3D点的不透明度信息(例如,imgarray[x][y][z]将等于0-255之间的数字,它仅用于不透明度,例如没有RGB颜色(这是故意的))。
我试着用matplotlib把它可视化:

import matplotlib.pyplot as plt
from mpl_toolkits import mplot3dfig = plt.figure()
ax = plt.axes(projection='3d')
ax.scatter3D(`what do I put here?`)

然而,matplotlib要求我给予xyz轴(加上cmap),但我的数据不是这种格式(如果我做imgarray[0],仍然包含256 x256不透明度信息的数组)。
我可以通过以下方式轻松查看3D图像的切片

plt.imshow(imgarray[100])
plt.show()

但是我想看3D的。我该怎么做?

ou6hu8tu

ou6hu8tu1#

Napari可以使用最大强度投影渲染大型多维阵列,或作为等值面。它带有一个GUI,可以轻松地尝试不同的显示设置。(在撰写本文时,它仍处于Alpha阶段。
使用示例:

import numpy as np
import napari
from skimage import data, filters  # Just to generate some test data (3D blobs).

with napari.gui_qt():

    # Generate some test data (smooth 3D blob shapes)
    imgarray = filters.gaussian(np.squeeze(np.stack([data.binary_blobs(length=300, n_dim=3, blob_size_fraction=0.1, volume_fraction=0.05)[:, 0:256, 0:256]])).astype(float), sigma=(2.5, 2.5, 2.5))
    print(imgarray.shape)

    '''
    # If imgarray values are bytes (0..255), convert to floats for display.
    imgarray = imgarray.astype(float) / 255
    '''

    # Open viewer (Qt window) with axes = slice, row, column
    viewer = napari.Viewer(title='volume test', ndisplay=3, order=(0, 1, 2))
    viewer.add_image(data=imgarray, name='blobs', scale=[256/300, 1, 1], colormap='gray_trans', rendering='attenuated_mip', attenuation=2.0, contrast_limits=(0.25, 1))

相关问题