前言
这个步骤其实拖沓了很久了,一直没有真正解决,这个礼拜由于老师的要求,必须完成数据的收集以及处理步骤,因此这也使得毕设成为了每天的重头戏。
之前上周以及上上周已经在linux服务器上安装了fsl,但是由于部分配置问题,导致原来写好的脚本无法使用,但是单张配准倒是可以实现,今天的实现思路如下:
- 按照之前的范例试着将其输出到特定文件夹内。
- 使用matlab实现配准,配准的程序另外实现。
工作内容
按照之前的范例将其输出到特定文件夹内
主要问题是之前在运行程序的过程中,输出的文件没有存储到指定的路径中,而是直接命名为该路径,那么如何解决这个问题呢?我猜测是文件无法识别路径而是需要我们输入一个特定的文件,输出的文件就命名如此,那么我们需要:
- 提取每次处理的文件的名称
- 加上路径,因此名称不变,存储到另外一个文件夹(路径)
初始代码:
import nibabel as nib
import numpy as np
from glob import glob
import nipype
from nipype.interfaces import fsl
from subprocess import call
import sys
import os
def registration(in_file, out_file, reference):
fsl.FSLCommand.set_default_output_type('NIFTI')
flt = fsl.FLIRT(bins=640, cost_func='mutualinfo')
flt.inputs.in_file = in_file
flt.inputs.out_file = out_file
flt.inputs.reference = reference
result = flt.run()
if __name__ == "__main__":
raw_folder = sys.argv[1] # where the raw data is saved
out_folder = sys.argv[2] # where you want to save processed scans
for file in glob(raw_folder+'/*.nii'):
reference = 'MNI152_T1_1mm.nii'
out_folder = file
registration(file, out_folder, reference)
bash registration.sh folder_of_raw_nifti/ test1.nii output_folder_for_processed_data/
再谈一谈其配准的性能,单张配准的时间在三分钟左右,那么就算只有五百张,也需要1500分钟,即25个小时。这样就会导致我有25个小时基本没法使用服务器。
目前最差的情况就是我手动配准,每三分钟配一张,那么计算4分钟一张,一天也只能配准150张左右。(而且手动配准实在太蠢了,还是在后台让服务器自己跑吧)
目前为了研究各种MRI成像之间的差异,我下载了一位ID为“S1203”的患者的四种MRI的图像,基本是靠观察看图像的成像质量:
-
MPRAGE
-
MPRAGE-REPEAT
-
Calibration-body
-
Calibration-head
明显calibration系列的清晰度很低,基本没有结构细节,所以一概采用MPRAGE系列的成像。没有该系列成像的ID将被抛弃。
笔者手动挑选好(指逐个点击添加)后,目前已经处于下载的阶段了,下载好之后基本就是测试配准。只希望校园网别断。。。
又发现一个新问题,也就是名字太长居然显示无法配准?
实在没法弄懂其逻辑,但是目前好像最好的办法是我挨个重命名后配准,大概需要花两天?如果没有猜错的话repeat是四维图像,而MPRAGE是三维版本,因此速度还是快不少的。现在我再配准个mprage试下就知道了,如果控制在单个一分钟内,300-400分钟也不是不能接受。
所以目前得到的步骤是:
(1)数据下载以及名称处理