【问题标题】:How to correctly convert RGB images into nifty format?如何正确地将 RGB 图像转换为漂亮的格式?
【发布时间】:2021-11-09 18:12:41
【问题描述】:

我有 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。

【问题讨论】:

    标签: python python-3.x rgb nifti nibabel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您似乎可以通过将它们转换为自定义 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 来处理此类图像。

      【讨论】:

        猜你喜欢
        • 2020-02-29
        • 2014-04-15
        • 2010-12-23
        • 2021-10-09
        • 1970-01-01
        • 2021-12-15
        • 2012-05-15
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多