美文网首页医学MRI影像处理
Python-Dicom图像自动按照扫描序列分类储存

Python-Dicom图像自动按照扫描序列分类储存

作者: Nick是老外 | 来源:发表于2020-10-05 11:10 被阅读0次

    最近处理实验室数据,遇到新的需求:每个病人的每次MRI的多张dicom图像按照所属的序列自动分类存储,并提取出想要的序列;But原始影像所有dicom文件都是在一起的,如下图所示。

    image.png
    image.png
    所有序列都是混乱在一起的
    用MicroDicom viewer打开整个文件夹能够到清晰的序列结构:
    image.png

    localizer为定位序列,t2_tse_tra_fs为t2序列,t1_tse_tra为t1序列,
    ep2d_diff_tra_spair为DWI序列(扩散加权成像),ep2d_diff_tra_spair_ADC为ADC序列,t1_fl3d_tra_dyna_1+5_NEW为增强序列(后面为注射完对比剂后5个不同时间的增强序列)

    在网上找类似的程序实现,只找到matlab代码,python实现的没找到,自己根据其思路用python实现了想要的结果。

    1.导入需要的包
    import glob
    import os
    import pydicom
    import shutil
    import re
    
    2.读取一个文件夹里面全部的dicom文件
     #待处理的原始影像文件路径
    InFolderName = 'D:/FinishedDataTotal/part3_3.0T/2019-12-11/00225718';
     #存储的分类影像文件路径
    saveFolderName=InFolderName.replace("FinishedDataTotal","NewData")
    print(saveFolderName)
    #读取灭个dicom文件的路径,并存入list
    dcm_paths = glob.glob(os.path.join(InFolderName,"MR","**","**.dcm"))
    print(len(dcm_paths))
    print(dcm_paths[1])
    
    3.定义需要分类的序列
    #T1 T2 DWI ADC
    need_Series = ['t2_tse_tra_fs','t1_tse_tra','ep2d_diff_tra_spair','ep2d_diff_tra_spair_ADC'] 
    #DCE
    DCE_Series = ['t1_fl3d_tra_dyna_1+5','t1_fl3d_tra_dyna_1+5_NEW']
    
    4.读取文件中序列名称,按照序列名新建文件夹,把图片放到对应的文件夹里面去
    for i in range(len(dcm_paths)):
    size = os.path.getsize(dcm_paths[i])
    #判断某个dcm文件的大小是否为 0,是则移除这个dcm文件
    if size == 0:
        os.remove(path)
    else:
        dcm = pydicom.read_file(dcm_paths[i])
        #protocolname = dcm.ProtocolName
        seriesUid,seriesName = dcm.SeriesInstanceUID,dcm.SeriesDescription
        if seriesName in need_Series: 
            tmp_save_Folder = os.path.join(saveFolderName,seriesName)
            source_File = dcm_paths[i].replace("/",'\\')
            #去掉不需要的字符
            tmp_save_Folder = tmp_save_Folder.replace("<",'').replace(">",'')
            tmp_save_Folder = tmp_save_Folder.replace("\\",'/')
            if not os.path.exists(tmp_save_Folder):
                os.makedirs(tmp_save_Folder)
            shutil.copy(source_File,tmp_save_Folder)
        elif seriesName in DCE_Series:
            source_File = dcm_paths[i].replace("/",'\\')
            tmp_save_Folder = os.path.join(saveFolderName,'DCE'+str(seriesUid)[-1])
            if not os.path.exists(tmp_save_Folder):
                os.makedirs(tmp_save_Folder)
            shutil.copy(source_File,tmp_save_Folder) 
    
    5.得到最终的分类的序列
    image.png
    说明:参考或转发本文需注明本文链接,尊重知识产权,社区才能更好地发展,有什么问题请联系小编2210432548@qq.com

    相关文章

      网友评论

        本文标题:Python-Dicom图像自动按照扫描序列分类储存

        本文链接:https://www.haomeiwen.com/subject/nvtauktx.html