0

我有 RGB 图像,我将其作为 numpy 数组加载。我想将这些图像转换成漂亮的格式,我可以使用 ITK-SNAP ( http://www.itksnap.org/pmwiki/pmwiki.php ) 打开它。

这是我尝试做的事情:

import nibabel as nib 
import numpy as np

x = load_jpg_image(filename='input.jpg')  # --> x is a numpy array containing the RGB image with shape (128, 128, 3) 
img = nib.Nifti1Image(x, eye(4)) 
nib.save(img, filename='output.nii')

但是,ITK-SNAP 解释output.nii为 3D 灰度体积而不是 RGB 图像。对我来说,ITK-SNAP 似乎应该能够处理 RGB 数据(见此);但是,我不明白我应该如何保存img才能使这成为可能。我正在使用 ITK-SNAP 3.6.0。

4

2 回答 2

1

不幸的是 NIfTI 从来没有真正过度开发用于 RGB 图像。您可以在最新的NIfTI2 规范中看到,定义了 RGB 和 RGBA 体素类型(RGB 每像素 3 个字节,RGBA 4 个字节),但我不知道有任何工具可以处理这些图像。

与您的情况不同的是,图像的尺寸是像素数,颜色通道在像素内。看起来 ITK-snap从版本 2正确显示彩色 NIfTI 图像——我猜他们遵循这种格式。

于 2021-09-16T13:16:11.697 回答
1

看来您可以通过将它们转换为自定义 dtype 来创建 RGB 图像:

import nibabel as nib 
import numpy as np

RGB_DTYPE = np.dtype([('R', 'u1'), ('G', 'u1'), ('B', 'u1')])

x = load_jpg_image(filename='input.jpg')  # --> x is a numpy array containing the RGB image with shape (128, 128, 3) 

# cast to custom type:
x = x.copy().view(dtype=RGB_DTYPE)  # copy used to force fresh internal structure

img = nib.Nifti1Image(x, eye(4)) 
nib.save(img, filename='output.nii')

ITK-SNAP 可以通过右键单击左侧面板上的图像名称并选择选项:Multi-Component Display -> RGB 来处理这种类型的图像。

于 2021-09-28T10:40:27.430 回答