zoukankan      html  css  js  c++  java
  • MRIcron的dcm2nii数据转换

    dcm2nii的相关选项如下:

    此处,一个example是:

    dcm2niix.exe -f "outputfilename" -i y -l y -p y -x y -v y -z y -o "E:datasets" "c:DicomDir"

    其中,"E:datasets"是输入nii文件的目录,"c:DicomDir"是输入dicom的目录,"outputfilename" 是输出nii.gz的文件名。

    Python批处理

    本部分介绍如何使用python进行批处理。
    首先遍历一个含有非常多个dicom序列的文件夹,然后将其的dicom文件的路径保存到一个txt文件中,然后读取txt中的文件路径,在在for循环中调用dcm2niix进行格式的批处理。

    分别执行下面两段代码:

    首先,遍历文件:

    遍历文件并保存为txt

    # 当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名)中
    import os
    
    # 如果文件夹不存在创建文件夹
    def Makedir(path):
        folder = os.path.exists(path)
        if (not folder):
            os.makedirs(path)
    
    # 利用os.listdir()、os.walk()获取文件夹和文件名
    def GetFileName(fileDir, outDir):
        list_name = []
        Makedir(outDir)
        for dir in os.listdir(fileDir):  # 获取当前目录下所有文件夹和文件(不带后缀)的名称
            filePath = os.path.join(fileDir, dir)  # 得到文件夹和文件的完整路径
            if os.path.isdir(filePath) and not (filePath == outDir):
                txt = outDir+"list.txt"
                # 获取根目录路径、子目录路径,根目录和子目录下所有文件名
                for root, subDir, files in os.walk(filePath):
                    for subfilepath in subDir:
                        f = open(txt, 'a')  # 以追加方式打开文件
                        subfilepath = os.path.join(filePath, subfilepath)  # 得到文件上层目录
                        f.write(subfilepath+'
    ') #此处增加了一个换行符,方便txt文件的查看,后面读取的时候需要去掉换行符
                        f.close()
    
    def main():
        print("procesiing……
    ")
        fileDir = r"E:datasetsLiverCT"  # 输入文件夹路径
        outDir = "E:datasetsliver_ct_process_output\"
        files = GetFileName(fileDir, outDir)
        print("done!
    ")
    
    # 判断是否是程序主入口而已,如果是程序主入口,则代码块执行,否则代码块不执行
    # 主要用于别人调用此代码时,不要进入该代码的入口
    if __name__ == "__main__":
        main()

    然后,读取txt文件,进行批处理转换,这里为了保护病人隐私,去掉了原文件的信息,使用以随机产生的名字:

    批处理

    import sys    #导入sys模块
    import os
    #from PIL import Image  #PIL是python的第三方图像处理库
    
    #dcm2niix.exe -f "outputname" -i y -m y -p y -x y -z y -b n -o "E:datasetsliver_ct_process_output" "E:datasetsLiverCT庄健忠20180105000198"
    # system command line
    d2n = 'dcm2niix.exe -f '
    para = ' -i y -l y -p y -x y -v y -z y -o '
    output_path = "E:datasetsliver_ct_process_output" 
    
    ###产生随机命名
    import random
    
    def ranstr(num):
        #dictionary
        H = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
    
        salt = ''
        for i in range(num):
            salt += random.choice(H)
    
        return salt
    
    # read txt
    filepaths = []
    for line in open("E:datasetsliver_ct_process_outputlist.txt", "r"):  # 设置文件对象并读取每一行文件
        filepaths.append(line)
    # deal with format transform    
    for filepath in filepaths:
        filepath = filepath[:-1]   #去掉行位的换行符
        outputname = "liver_ct_"+ ranstr(10)
        cmd = d2n + outputname + para +'"'+ output_path +'" ' + '"'+ filepath +'"' #其中的双引号不可少
        os.system(cmd)
    print("Congratulation, Done!")

    处理好的文件,可以到你的输出目录中去查找,使用MRIcro打开即可

  • 相关阅读:
    Linux下静态库与动态库
    通过js操作样式(评分)
    javascript学习
    2017年6月1日学习
    javascript学习2
    javascript学习:闭包和prototype原型使用基础
    关于“System.Data.ProviderIncompatibleException”类型的异常
    Android性能优化之ViewStub
    Activity Threa创建Window和View分析
    软键盘触发后弹起底部布局文件方法
  • 原文地址:https://www.cnblogs.com/SakuraYuki/p/13341493.html
Copyright © 2011-2022 走看看