MRI图像切片(nii格式转2D)

代码参考:将一个MRI(nii格式)数据进行切片

想要批量抽取MRI数据的几个切片,借鉴了上述代码的Python版本,原始代码抽取了全部切片。本次实验主要是抽取sMRI的横断面(axial)方向的其中30张切片,数量根据自己需求可自行设置。

import scipy, numpy, shutil, os, nibabel
import sys, getopt
import imageio

def niito2D(filepath):
    inputfiles = os.listdir(filepath)  #遍历文件夹数据
    outputfile = 'result\\'       #输出文件夹
    print('Input file is ', inputfiles)
    print('Output folder is ', outputfile)

    for inputfile in inputfiles:
        image_array = nibabel.load(filepath+inputfile).get_data() #数据读取
        print(len(image_array.shape))

        # set destination folder
        if not os.path.exists(outputfile):
            os.makedirs(outputfile)   #不存在输出文件夹则新建
            print("Created ouput directory: " + outputfile)
        print('Reading NIfTI file...')

        total_slices = 30  #总切片数
        slice_counter = 70 #从第几个切片开始

        # iterate through slices
        for current_slice in range(70, 70+total_slices):
            # alternate slices
            if (slice_counter % 1) == 0:
                data = image_array[:, :, current_slice]  #保存该切片,可以选择不同方向。

                # alternate slices and save as png
                if (slice_counter % 1) == 0:
                    print('Saving image...')
                    #切片命名
                    image_name = inputfile[:-4] + "{:0>3}".format(str(current_slice + 1)) + ".png"
                    #保存
                    imageio.imwrite(image_name, data)
                    print('Saved.')

                    # move images to folder
                    print('Moving image...')
                    src = image_name
                    shutil.move(src, outputfile)
                    slice_counter += 1
                    print('Moved.')

    print('Finished converting images')

if __name__ == '__main__':
    niito2D('img\\')

呈现效果:

  • 7
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值