Добавить измерение в файл NIFTI - PullRequest
0 голосов
/ 29 мая 2020

У меня есть файл nifti (.nii) с формой (112, 176, 112). Я хочу добавить к нему еще одно измерение, чтобы оно стало (112, 176, 112, 3). При попытке img2 = np.arange(img).reshape(112,176,112,3) выдает ошибку. Можно ли сделать это с помощью np.reshape или np.arange или любым другим способом?

Код:

import numpy as np
import nibabel as nib

filepath = 'test.nii'  
img = nib.load(filepath)
img = img.get_fdata()

img = np.arange(img).reshape(112,176,112,3)

img = nib.Nifti1Image(img, np.eye(4))
img.get_data_dtype() == np.dtype(np.int16)
img.header.get_xyzt_units()
nib.save(img, 'test_add_channel.nii')

Ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-f6f2a2d91a5d> in <module>
      8 print(img.shape)
      9 
---> 10 img2 = np.arange(img).reshape(112,176,112,3)
     11 
     12 img = nib.Nifti1Image(img, np.eye(4))

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

1 Ответ

1 голос
/ 29 мая 2020

Вы можете сделать это так:

import numpy as np

img = np.random.rand(112, 176, 112)  # Your image
new_img = img.reshape((112, 176, 112, -1))  # Shape: (112, 176, 112, 1)
new_img = np.concatenate([new_img, new_img, new_img], axis=3)  # Shape: (112, 176, 112, 3)

Возможно, это другой лучший способ сделать это, но приведенный выше код дает вам желаемый результат.

...