如何使用Python将一个普通的数组转换成nifti文件

介绍

在医疗领域工作时,可以使用两种类型的文件。第一个是 dicom 文件,这些文件代表您希望研究的身体部位的2D 切片。然后是身体的3D 表示,它是由多个 dicom 甚至常规图像或数组构建的 2D 切片的集合。

在之前的文章中,我们讨论了dicomnifti 之间的区别,以及如何从 dicoms 创建 nifti 文件。因此,在本文中,我们将讨论如何从标准数组生成这些 nifti 文件。

为什么我们需要进行这种转换?

您可能想知道为什么我们需要执行这样的转换。答案如下:

  • 如果您有普通的 JPG 或 PNG 图像,则可以使用它们,然后将其转换为dicoms,然后再转换为nifti,但是您可以看到这需要两个步骤。因此,当您使用本文中的方法时,将图像从JPG或PNG转换为nifti将会更容易。
    +它们可以是代表卷的CSV文件,正如我们在许多数据集中发现的那样,因此如果您需要将它们放在一个单独的 nifti 文件中并希望在特殊情况下使用,您可以使用本文中描述的方法。
  • 最常用的方法,也是在我的项目中需要的方法,是当你执行一个分割任务时,你必须将输出掩码保存为一个单一的nifti文件;对于这个,这个方法将是你的解决方案。

您需要的工具

您将需要两个库来完成此任务:numpynibabelNibabel 是专门为 nifti 扩展而设计的库,但是转换数组/nifti 需要一个 numpy 数组作为输入。

要安装它们,您可以像往常一样使用 pip(或 conda):

pip install numpy

pip install nibabel

方法

您必须完成此过程的两个步骤:

  • 第一步,将你拥有的任何类型的数组转换为numpy数组;如果您拥有的数组表示图像,则必须指定数据类型,例如图像的float类型和掩码的int类型(如果您正在进行分割,掩码也可以是float类型)。

converted_array = numpy.array(normal_array, dtype=numpy.float32)

我选择float32作为类型,因为我需要它,但你可以使用任何你需要的类型。

  • 第二步,使用一行代码将numpy数组转换成nifti文件。在 nibabel 库中,有一个名为Nifti1Image的函数,它接受 5 个参数,其中三个是可选的,另外两个是必需的。在我的例子中,前两个参数就足够了,但是如果你需要更多,你可以添加它们。第一个参数是我们刚刚转换的numpy数组,第二个参数是仿射,它是一个齐次仿射,提供体素坐标(像素的3D表示)和世界坐标(来自文档)之间的关系。第二个参数可以是 None4×4 数组;出于我们的目的,我们将使用由numpy.eye函数创建的 4×4 数组。

现在不需要其他参数,但稍后可能需要一个:header。如果您有文件头,则此参数将采用文件头。这是元数据(患者和图像信息)。

nifti_file = nibabel.Nifti1Image(converted_array, affine) 其中, affine = numpy.eye(4)
您的 nifti 文件现在可以使用了;您可以立即使用或保存以备后用。

nibabel 库中另一个名为save的命令可用于保存文件。nibabel.save(nifti_file, path_to_save)

这是完整的脚本:

import numpy as np
import nibabel as nib

converted_array = numpy.array(normal_array, dtype=numpy.float32) # You need to replace normal array by yours
affine = numpy.eye(4)
nifti_file = nibabel.Nifti1Image(converted_array, affine)

nibabel.save(nifti_file, path_to_save) # Here you put the path + the extionsion 'nii' or 'nii.gz'

我希望您觉得这篇文章有用,因为在下一篇文章中讨论3D体积的数据增强时,我们将需要这些转换。

参考目录

https://pycad.co/how-to-convert-array-into-nifti-python/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值