认知神经科学

Nifti文件分类及整理与如何从读取DICOM读取模态信息

2019-01-07  本文已影响1人  Galory

Python——划分Nifti对应模态数据并整理

问题:把DICOM的数据用MRIcron的dcm2niigui.exe转好格式以后每个被试的全部模态都在一个文件夹内,but,有人给了你一个名单,只要那些人的某几个模态的数据,比如T1像和DTI,所以该怎么办?
人数少时一个一个操作很方便,但数量大了就发现代码的方便之处,而Python正是处理这些任务明智的选择。
So,let‘s begin

image.png

看下未整理之前的转完格式后的文件夹里的数据形式:

image.png

代码如下(以后可以迭代):

#coding=utf-8
#20190107 Nifti分类及拷贝
import sys
import os
import shutil

root_dir = u"F:\\zhongxin"
son_dir = os.listdir(root_dir)
new_dir = u'F:\\zhongxin_done'

# print(son_dir)
for son in son_dir:
    # 思路是把需要的T1和DTI复制到新的文件夹中,因此先建立对应的文件夹
    os.makedirs(u'F:\\zhongxin_done' + u'\\' + son)
    new_son_dir = os.path.join(new_dir,son)
    # 在每个人的文件夹内建立T1和DTI子文件夹存放其对应模态的数据
    os.makedirs(new_son_dir + u'\\' + 't1')
    os.makedirs(new_son_dir + u'\\' + 'dti')

    # 查找对应模态的文件
    grand_son_path = root_dir + u'\\'+ son
    # 此处会列出当前文件夹下全部的一级文件和子文件夹名称
    grand_son_dir = os.listdir(grand_son_path)
    # print(grand_son_dir)
    # 选取对应的模态并进行拷贝
    for name in grand_son_dir:
        oldfile= root_dir + u'\\' + son + u'\\' + name
        newfile_dir = new_son_dir 
        # 根据文件的命名特征分类Nifti,比如这里't1mprsag'就是T1像
        if 't1mprsag' in name:
            shutil.copy(oldfile,newfile_dir + u'\\' + 't1')
        if 'ep2ddiffDTI' in name:
            shutil.copy(oldfile,newfile_dir + u'\\' + 'dti')

结果如下:


image.png

每个被试的文件夹下都有两个文件夹存放对应模态,success。


但这就完了吗?
Absolutely not!Why?
因为一般像这样命名有规则的文件虽然很容易处理,但并非总是如此,总有一种混乱令你感动,比如像下面这样转完格式以后毫无头绪的文件类型:


image.png

这样就没办法了吗?No!
可以在DICOM状态读取它的模态信息提前把各个模态分好类再转格式。此时需要用到读取DICOM信息的函数。使用Matlab或者Python都可以。我这里使用的是pydicom包。

使用dicominfo('filename') 函数,比如:
使用如下命令可得到下图的信息,然后从SeriesDescription一栏读取扫描的该模态信息,比如这里是ep2d_bold_moco_p2:dicominfo('H:\xxx\xxx')

image.png

这是matlab读取出来的结果:


image.png

这是pydicom读取出来的结果:

import pydicom
filename = r"C://xxx//xxx.IMA"
dcm = pydicom.read_file(filename)
print(dcm)
image.png

会发现读出来是一样的,都包含了被试的很多信息。

就是这样,The fishing skill is over。之后再迭代吧。

20190107

上一篇下一篇

猜你喜欢

热点阅读