Gretna源码解读

作者: 韧心222 | 来源:发表于2023-10-22 11:12 被阅读0次

    为了简化程序开发,还是要站在巨人的肩膀上,所以我又开始读Gretna的源码了,今天读的是Gretna预处理的第二个步骤——Remove First Images。顾名思义,这个步骤就是移除掉fMRI图像中经常遇到的伪影,在Grenta中,这个功能被封装在gretna_RUN_RmFstImg.m文件中,其源码如下:

    function gretna_RUN_RmFstImg(InputFile, DelImg)
    %-------------------------------------------------------------------------%
    %   Run Remove First Images
    %   Input:
    %   InputFile  - The input file list, Nx1 cell (1x1 cell for 4D NIfTI)
    %   DelImg     - The number of time points should be removed
    %-------------------------------------------------------------------------%
    %   Written by Sandy Wang (sandywang.rest@gmail.com) 20161013.
    %   Copyright (C) 2013-2016
    %   State Key Laboratory of Cognitive Neuroscience and Learning &
    %   IDG/McGovern Institute of Brain Research, 
    %   Beijing Normal University,
    %   Beijing, PR China.
    
    OutputFile=cellfun(@(f) gretna_FUN_GetOutputFile(f, 'n'), InputFile,...
        'UniformOutput', false);
    if numel(InputFile)==1 %4D
        Nii=nifti(InputFile{1});
        TP=size(Nii.dat, 4);
        InputCell=arrayfun(@(t) sprintf('%s,%d', InputFile{1}, t),...
            (1:TP)', 'UniformOutput', false);
        InputCell=InputCell(DelImg+1:end, 1);
    else %3D
        InputCell=InputFile;
        InputCell=InputCell(DelImg+1:end, 1);
    end
    V_in=spm_vol(InputCell);
    V_out=gretna_FUN_GetOutputStruct(V_in, OutputFile);
    
    cellfun(@(in, out) WriteByVolume(in, out), V_in, V_out);
    
    function WriteByVolume(in, out)
    Y=spm_read_vols(in);
    spm_write_vol(out, Y);
    

    在这段代码的最开始,首先用grentna_FUN_GetOutputFile函数,来获取输出的文件名称。
    之后,判断输入的文件是否为4D的nifti数据。如果是的话,则将这段文件进行一个读取和截断,并保存到InputCell变量中;如果不是,则直接进行截断,并使用WrtieByVolume进行文件的写入操作,只不过这个写入过程使用了cellfun函数,因此不难想见的是如果原来该位置中存在一个已经写好的文件,则此举必然会造成数据写入发生错误(例如第一次截断的时候,去除了前10幅图像,经过查看后觉得前10幅图像并不满足要求,需要去除前20幅,则在不执行删除操作的情况下再次执行该函数时,会进行文件的重复写入,最终结果就是得到的仍然是去除了前10图像的数据)。

    这不知道算不算个小Bug。也许在使用界面操作的时候,gretna会有其他的处理,但是单独调用该函数时则可能会发生错误!!!

    相关文章

      网友评论

        本文标题:Gretna源码解读

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