医学影像中用python 将NRRD批量转换成NIFTI

用python 将NRRD批量转换成NIFTI

1 转换代码1:

3D slicer, MITK默认会将医学图像保存为格式为NRRD的图像,但是我们还是习惯于操作NIFTI格式的数据,于是就有了NRRD转换成NIFTI的需求。

之前自己有一个比较笨的方法,就是将NRRD图像导入到MITK软件中,然后再另存成NIFTI的数据。如果数据少,还可以接受。但是当数据比较多时,这种方法过于耗时耗力。
为了解决这个问题,网上搜索了一些解决方案,并将两个代码进行了合并[1],供使用,具体代码如下。代码中baseDir可以修改成指定的目录,files里面*后面的部分,改为自己匹配的文件名。

import os
from glob import glob
import numpy as np
import vtk

def readnrrd(filename):
    """Read image in nrrd format."""
    reader = vtk.vtkNrrdReader()
    reader.SetFileName(filename)
    reader.Update()
    info = reader.GetInformation()
    return reader.GetOutput(), info

def writenifti(image,filename, info):
    """Write nifti file."""
    writer = vtk.vtkNIFTIImageWriter()
    writer.SetInputData(image)
    writer.SetFileName(filename)
    writer.SetInformation(info)
    writer.Write()


baseDir = os.path.normpath(r'G:/aurora-nrrd/')
files = glob(baseDir+'/*label.nrrd')

for file in files:
    m, info = readnrrd(file)
    writenifti(m,  file.replace('label.nrrd', 'label.nii'), info)

问题记录1:
用那个代码处理之后,有一些会出问题,有的成功,有的失败。
比如说:原始的nrrd是24张
但是转成nii.gz之后,就是1张了,不清楚什么情况,直接跑的代码,也没有修改代码的任何地方。
在这里插入图片描述
有的转换成nii.gz没有啥问题,尺寸大小正确。
在这里插入图片描述

问题记录2:
但是直接用上述代码,还有一个问题,就是将原始nrrd转换成nii.hz数据后,图像的方向会发生变换。
这不利于我后续做配准操作。所以我打算使用方式2.
原始Nrrd方向:
在这里插入图片描述
转换后:nii.hz方向:
在这里插入图片描述

2 转换代码2:

如何使用simpleitk进行转化,直接将nrrd数据,转化成nii.gz数据,看起来还可以,数据的尺寸大小方向都符合。

import os
import SimpleITK as sitk
import glob

# 输入NRRD文件路径
input_nrrd_path = "./Image_test/*.nrrd"

files = glob.glob(input_nrrd_path)
for filename in files:
    print(filename)

    # 使用SimpleITK读取NRRD数据
    nrrd_image = sitk.ReadImage(filename)

    output_nifti_path = filename.split('.nrrd')[0] + '.nii.gz'
    print(output_nifti_path)

    # 将SimpleITK图像保存为NIfTI格式
    sitk.WriteImage(nrrd_image, output_nifti_path)

print("Conversion completed.")

查看转换后的效果:图片的尺寸大小方向都跟nrrd相同,而且所有的都能转换,不会像方式1中出现的只转成张数变成1.。
在这里插入图片描述

参考连接:
【nrrd文件格式转NIFTI】
https://blog.csdn.net/juluwangriyue/article/details/120719738

【NRRD批量转换成NIFTI】
链接:https://www.jianshu.com/p/6d2c83569bf8

【Nrrd to Nifti file conversion】
https://stackoverflow.com/questions/47761353/nrrd-to-nifti-file-conversion

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值