如何在 Python(不使用 MedPy)或 C 中将 *.mha 文件转换为 *.nii 文件?

Posted

技术标签:

【中文标题】如何在 Python(不使用 MedPy)或 C 中将 *.mha 文件转换为 *.nii 文件?【英文标题】:How to convert *.mha file to *.nii file in Python (without using MedPy) or C? 【发布时间】:2015-04-20 03:21:39 【问题描述】:

我想处理Python 中的*.mha 文件。但它需要依赖于ITK 包的MedPy 包。我目前在安装 ITK 包时遇到问题。我在想是否有办法将*.mha 文件转换为*.nii 文件(使用其他方式,可能是C++),因为然后我可以使用Python 来读取*.nii 文件。欢迎任何相关的指针。

【问题讨论】:

我目前在安装 ITK 包时遇到问题。也许你应该提供详细信息。 【参考方案1】:

您可以在 Python 中安装 SimpleITK 并使用它进行转换。例如,

import SimpleITK as sitk

root_path = '/path/to/image'
nii_path = root_path + '/data.nii'
mha_path = root_path + '/data.mha'

img = sitk.ReadImage(nii_path)
sitk.WriteImage(img, mha_path)

【讨论】:

【参考方案2】:

解决此问题的另一种方法是安装 sci-kit 映像和 simpleitk。

这不需要从源代码构建或包装 ITK,并允许读取 MHA 文件并写入 NIFTI 格式。

pip install scikit-image 
pip install SimpleITK or easy_install -U SimpleITK

安装了这些,如果你运行下面的代码,这应该可以工作

import skimage.io as io

path = 'C:/test.mha' #path to your MHA file
outpath = 'C:/test.nii'

img = io.imread(path,plugin='simpleitk')
io.imsave('outpath',img,plugin='simpleitk')

【讨论】:

【参考方案3】:

为了得到这个问题的答案,我浪费了 24 小时,但最后,我可以说从 .mha 转换为 .nii 文件非常简单 1.首先你必须在conda或者你使用的环境中安装SimpleITK包

之后,只需按照以下步骤转换任何文件。

import SimpleITK as sitk
import matplotlib.pyplot as plt
import numpy as np
import os

OUTPUT_DIR = 'Output'

# Image = sitk.ReadImage('lena1.png')
Image = sitk.ReadImage('Flair.mha')
print(Image.GetPixelIDTypeAsString())
sitk.WriteImage(Image, os.path.join(OUTPUT_DIR, 'Flair.nii'))
# sitk.WriteImage(Image, os.path.join(OUTPUT_DIR, 'SimpleITK.bmp'))
# plt.imshow(sitk.GetArrayViewFromImage(Image))
# plt.axis('off')
# plt.show()

按照这些步骤,我想你们会得到所需的输出。

【讨论】:

以上是关于如何在 Python(不使用 MedPy)或 C 中将 *.mha 文件转换为 *.nii 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在C ++或Python中列出DLL的依赖项?

如何在Java或python中获得字节序?

如何使用Linux终端(如python,在gcc或g ++中编译一行C ++代码?

如何使用 Python 或 Java 解码这个奇怪的字符串 [关闭]

如何使用 SIP 制作两个或多个 C++/Qt 类的 python 模块?

使用 C 或 Python 在 Blender 中创建对话框