首页 > 解决方案 > 多个堆叠的numpy数组的动画

问题描述

这是问题所在。

我有两个 3D numpy 数组,一个是使用库从 DICOM 图像中提取的pydicom(我称之为“幻像”),另一个是我构建的二进制文件(我称之为“网格”)。顾名思义,这些数组的第三维允许穿越幻影的不同切片。这些切片垂直于轴向方向。您可以在下面看到两张图片(左侧为幻影,右侧为网格):

这个想法是创建一个动画 gif,其中两个数组相互堆叠。例如,我创建了一个幻影的 gif,您可以在此地址看到(该文件太重,无法在本文中显示)。我想制作相同的 gif,但要在其上堆叠网格。换句话说,我想要与此 gif 相同的结果,但网格堆叠在其上,如下所示:

在此处输入图像描述

到目前为止,我使用 matplotlib 创建了我的 gif FuncAnimation。例如,我之前展示的 gif 是使用以下代码生成的。

import matplotlib.pyplot as plt
import pydicom as pdcm
from matplotlib import animation

path = "../../im_DICOM/CBCT/"

ds = pdcm.dcmread(path + "IMG0000000139.dcm")
sl = ds.RescaleSlope
bi = ds.RescaleIntercept

arr = sl*ds.pixel_array + bi

fig = plt.figure(figsize=(10, 10))
ax = plt.axes()
im = plt.imshow(arr, animated=True, cmap='bone')
plt.colorbar(label="HU", shrink=0.75)
plt.tight_layout()


def init():
    ds = pdcm.dcmread(path + "IMG0000000400.dcm")
    im.set_data(sl*ds.pixel_array + bi)
    return im,

def animate(i):
    if i < 10:
        name = path + "IMG000000000" + str(i) + ".dcm"
    elif i < 100:
        name = path + "IMG00000000" + str(i) + ".dcm"
    else:
        name = path + "IMG0000000" + str(i) + ".dcm"
    a = pdcm.dcmread(name).pixel_array
    im.set_array(sl*a + bi)
    return im,


anim = animation.FuncAnimation(fig, animate, init_func=init, frames=447, interval=.01, blit=True)

anim.save("test.gif")

问题是我不知道如何使用该set_array()方法设置多个数组。有人会有想法吗?

先感谢您 !

PS:我知道我可以使用os.listdir. 旧代码哈哈

标签: pythonnumpymatplotlibanimationpydicom

解决方案


推荐阅读