Сохранить 3D массив в стопку 2D изображений в Python - PullRequest
0 голосов
/ 18 марта 2019

Я сделал трехмерный массив, который состоит из чисел (0 ~ 4). Я хочу сохранить 3D-массив в виде стопки 2D-изображений (если возможно, сохранить файл * .tiff). Что я должен делать?

import numpy as np

a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Что именно вы подразумеваете под "стеком"?Поскольку вы ссылаетесь на 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.См. Также документацию .

Однако, если я ошибаюсь и вы хотите иметь n (например, 100) отдельных tif-файлов, вы также можете использовать обычную функцию imwrite() вцикл:

n = len(a)
for i in range(n):
    imageio.imwrite(f'image_{i:03}.tiff', a[i])
0 голосов
/ 19 марта 2019

На самом деле, я сделал это.Это мой кодС этим кодом мне не нужно составлять серию 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)
0 голосов
/ 18 марта 2019

Это должно работать. Я не тестировал его, но я разделил цветные изображения на кусочки 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)
...