任务:在MeVisLab平台完成fMRI数据的预处理
难点:对MeVisLab平台的不熟悉;平台本身关于fMRI的可用内容少(多了就不用我做了 = =);语言障碍,好多专业词汇根本翻译不过来,或者翻译不过去……
具体流程:
功能核磁数据的导入
参数自动提取
层面时间校正
头动校正(刚体变换)
图像配准
去基线漂移
带通滤波
时间延时(暂时不了解)
进展:
0.对不认识的模块(Modules)右键 show help。[安装目录下Packages/MeVisLab/Standard/Documentation/Publish/ModuleReference/genre.html 可按类显示核心Modules]
1.关于数据导入,要求为dicom格式导入,可以文件夹识别什么的,尝试了众多导入方法,最终确定DirectDicomImport,选择文件夹,可识别文件信息。在此,导入的文件为mosaic排列后的,为了后期的正常处理,需要将其一张slice中的z取出来,使用Demosaic模块,得到参数为[x,y,z,t,c,u]的图像集。这里x,y,z为图像的空间坐标,t为时间坐标,也即多少个dicom文件,多少个TR, c=color,指的是图像的色彩显示方法,MRI数据为灰度显示(Gary)。U好像是user,可是我尝试导入多个被试的数据,u并没有改变,可能是理解错误,还需要进一步确认。
2.参数提取比较简单,直接通过Info实现,如果后期需要实现GUI,可直接引用其中的参数;
3.时间层面校正(选作),暂时还没有发现相关的Module,可以通过自己开发Module实现,在生成的cpp工程中利用LOOP中的t的循环,实现对时间层面的校正,另外,在info信息中也有对时间信息的显示,后经确认并非是层面时间信息。还需要继续学习SPM中层面时间校正的内容。
4.头动校正,利用刚体变换模型实现。具体模块为MERIT,变换类型为rigid.在进行头动校正时,选择t=1的图像作为模板图像,利用subImage从导入的dicom文件中选取一张子图,subImage可以对六个坐标都进行重新选择,这里我只对t进行选择,在SPM Manual里好像看到说以首帧做基础,进行头动校正,则用subImage选出首帧。可利用MERIT对图像进行刚体变换,得到变换矩阵(MERIT/output/Transformation Matrix).可是问题在于,MERIT一次只能将一幅图像变换到模板图像的变换矩阵得到,而fMRI-BOLD数据绝对不止一副,如何实现多图像的校正,我还是没有想到合适的方法,在我现有的理解中在MeVisLab中,模块与模块的链接只能传输数据,而非数据流,也就是说,我无法在模块外实现对某些环节的循环引用,难道我要基于MERIT重新开发Module吗?或者还有其他的方法可以实现,可我还没发现?
另外RegistrationManual 模块,可以通过overlay显示配准效果,在调试过程中作为检验工具。
5.图像配准,同样利用MERIT模块实现,变换类型为rigid.模板图像为T1像,进行配准操作,具体问题与头动校正相同。在配准过程中,需要对结构像进行重构,利用Resample3D调整分辨率和坐标信息。[在spm中是先进行完分割再配准的,如果不分割是否有影响,需要分割吗?]
6.去基线漂移&带通滤波处理 直接使用FFTbandpassFilter 实现滤波。其核心算法即通过FFT→加滤波模板→IFFT实现。
对于基线漂移的改善情况,不知道怎么检验效果,以及如何改善,还需要学习。
7.时间延时相关特性
8.归一化到标准脑模板(选做) 与头动校正和图像配准相同,都属于空间变换,变换形式不同,需要利用整体变换仿射变换affine实现,模板图像为SPM提供的标准脑模板,利用MERIT,变换类型为affine.
其他积累:
1.论坛学习:http://forum.mevis.fraunhofer.de/index.php
2.可能用到的模块
ImagePropertyConvert | 调整图像参数,包括分辨率,大小等 |
SoView2Doverlay | 用于比较图片 |
Imagespector | 沿某一坐标将图像分隔开,但最多只有6个输出…… |
reshape | x*y*z*C*T*U保持不变 |
soGVRVolumeRender | 对3D、4D进行渲染呈现 |
MinMaxSCan | 调整大小,在变换过程中可能会用到 |
Affinetransformation3D | 进行3D仿射变换 |
Fiter类 | 进行滤波和平滑等 |