如何正确地将 RGB 图像转换为漂亮的格式?
How to correctly convert RGB images into nifty format?
我有 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 数据(see this);但是,我不明白我应该如何保存 img
才能使这成为可能。我正在使用 ITK-SNAP 3.6.0.
不幸的是,NIfTI 从未真正为 RGB 图像过度开发。您可以在最新的 NIfTI2 spec 中看到,定义了 RGB 和 RGBA 体素类型(RGB 每个像素 3 个字节,RGBA 4 个字节)但是我不知道有任何工具可以处理这些图像。
与您的情况不同的是,图像的尺寸是像素数,颜色通道在像素内。看起来 ITK-snap 正确显示彩色 NIfTI 图像 from version 2 -- 我猜他们遵循这种格式。
您似乎可以通过将它们转换为自定义数据类型来创建 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 可以通过在左侧面板上右键单击图像名称并选择选项:多分量显示 -> RGB 来处理此类图像。
我有 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 数据(see this);但是,我不明白我应该如何保存 img
才能使这成为可能。我正在使用 ITK-SNAP 3.6.0.
不幸的是,NIfTI 从未真正为 RGB 图像过度开发。您可以在最新的 NIfTI2 spec 中看到,定义了 RGB 和 RGBA 体素类型(RGB 每个像素 3 个字节,RGBA 4 个字节)但是我不知道有任何工具可以处理这些图像。
与您的情况不同的是,图像的尺寸是像素数,颜色通道在像素内。看起来 ITK-snap 正确显示彩色 NIfTI 图像 from version 2 -- 我猜他们遵循这种格式。
您似乎可以通过将它们转换为自定义数据类型来创建 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 可以通过在左侧面板上右键单击图像名称并选择选项:多分量显示 -> RGB 来处理此类图像。