Nifti文件分類及整理與如何從讀取DICOM讀取模態(tài)信息

Python——劃分Nifti對應(yīng)模態(tài)數(shù)據(jù)并整理

問題:把DICOM的數(shù)據(jù)用MRIcron的dcm2niigui.exe轉(zhuǎn)好格式以后每個(gè)被試的全部模態(tài)都在一個(gè)文件夾內(nèi),but,有人給了你一個(gè)名單,只要那些人的某幾個(gè)模態(tài)的數(shù)據(jù),比如T1像和DTI,所以該怎么辦?
人數(shù)少時(shí)一個(gè)一個(gè)操作很方便,但數(shù)量大了就發(fā)現(xiàn)代碼的方便之處,而Python正是處理這些任務(wù)明智的選擇。
So,let‘s begin

  • 最初想法是在當(dāng)前的文件夾中處理,但是考慮到還要刪除其余不需要的文件,不如以最簡單的方式,就是建立一個(gè)新的文件夾來存放這些結(jié)果數(shù)據(jù)。
    比如我這里zhongxinzhongxin_done就分別是當(dāng)前的文件夾和新建的要存放分好類數(shù)據(jù)的文件夾。
image.png

看下未整理之前的轉(zhuǎn)完格式后的文件夾里的數(shù)據(jù)形式:

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復(fù)制到新的文件夾中,因此先建立對應(yīng)的文件夾
    os.makedirs(u'F:\\zhongxin_done' + u'\\' + son)
    new_son_dir = os.path.join(new_dir,son)
    # 在每個(gè)人的文件夾內(nèi)建立T1和DTI子文件夾存放其對應(yīng)模態(tài)的數(shù)據(jù)
    os.makedirs(new_son_dir + u'\\' + 't1')
    os.makedirs(new_son_dir + u'\\' + 'dti')

    # 查找對應(yīng)模態(tài)的文件
    grand_son_path = root_dir + u'\\'+ son
    # 此處會列出當(dāng)前文件夾下全部的一級文件和子文件夾名稱
    grand_son_dir = os.listdir(grand_son_path)
    # print(grand_son_dir)
    # 選取對應(yīng)的模態(tài)并進(jìn)行拷貝
    for name in grand_son_dir:
        oldfile= root_dir + u'\\' + son + u'\\' + name
        newfile_dir = new_son_dir 
        # 根據(jù)文件的命名特征分類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')

結(jié)果如下:


image.png

每個(gè)被試的文件夾下都有兩個(gè)文件夾存放對應(yīng)模態(tài),success。


但這就完了嗎?
Absolutely not!Why?
因?yàn)橐话阆襁@樣命名有規(guī)則的文件雖然很容易處理,但并非總是如此,總有一種混亂令你感動,比如像下面這樣轉(zhuǎn)完格式以后毫無頭緒的文件類型:


image.png

這樣就沒辦法了嗎?No!
可以在DICOM狀態(tài)讀取它的模態(tài)信息提前把各個(gè)模態(tài)分好類再轉(zhuǎn)格式。此時(shí)需要用到讀取DICOM信息的函數(shù)。使用Matlab或者Python都可以。我這里使用的是pydicom包。

使用dicominfo('filename') 函數(shù),比如:
使用如下命令可得到下圖的信息,然后從SeriesDescription一欄讀取掃描的該模態(tài)信息,比如這里是ep2d_bold_moco_p2:dicominfo('H:\xxx\xxx')

image.png


這是matlab讀取出來的結(jié)果:


image.png

這是pydicom讀取出來的結(jié)果:

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

會發(fā)現(xiàn)讀出來是一樣的,都包含了被試的很多信息。

就是這樣,The fishing skill is over。之后再迭代吧。

20190107

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容