医学MRI影像处理

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

2020-10-05  本文已影响0人  Nick是老外

最近处理实验室数据,遇到新的需求:每个病人的每次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
上一篇下一篇

猜你喜欢

热点阅读