【发布时间】:2019-03-18 19:45:35
【问题描述】:
我制作了一个由数字(0~4)组成的 3D 数组。我想要的是将 3D 数组保存为一堆 2D 图像(如果可能,保存 *.tiff 文件)。我该怎么办?
import numpy as np
a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')
【问题讨论】:
我制作了一个由数字(0~4)组成的 3D 数组。我想要的是将 3D 数组保存为一堆 2D 图像(如果可能,保存 *.tiff 文件)。我该怎么办?
import numpy as np
a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')
【问题讨论】:
其实我做到了。这是我的代码。 使用此代码,我不需要堆叠一系列 2D 图像(数组)。 制作一个 3D 数组,然后保存。这正是我为此所做的。
import numpy as np
from skimage.external import tifffile as tif
a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')
tif.imsave('a.tif', a, bigtiff=True)
【讨论】:
这应该可行。我还没有测试过它,但是我已经使用这种方法将彩色图像分成了 RGB 切片,并且它应该在这里以几乎相同的方式工作,假设您不想先对这些像素值做任何事情。 (它们将非常接近图像中的相同颜色)。
import imageio
import numpy as np
a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')
for i in range(100):
newimage = a[:, :, i]
imageio.imwrite("path/to/image%d.tiff" %i, newimage)
【讨论】:
“堆栈”到底是什么意思?当您将 tiff 称为输出格式时,我假设您希望您的数据在一个文件中作为多帧 tiff。
这可以通过imageio 的mimwrite() 函数轻松完成:
# import numpy as np
# a = np.random.randint(0,5, size=(100,100,100))
# a = a.astype('int8')
import imageio
imageio.mimwrite("image.tiff", a)
请注意,此函数依赖于将多个帧的计数器作为第一个参数,然后是 x 和 y。另见其documentation。
但是,如果我错了,并且您想要有 n 个(例如 100 个)单独的 tif 文件,您也可以在循环中使用普通的 imwrite() 函数:
n = len(a)
for i in range(n):
imageio.imwrite(f'image_{i:03}.tiff', a[i])
【讨论】: