Freesurfer

Freesurfer是用于MRI图像处理和分析的一款开源软件,可进行多种模态数据的预处理,皮层重建,volume与surface的互相之间的配准等。

MRI成像

https://www.csdn.net/tags/Mtzagg1sNzM3MTMtYmxvZwO0O0OO0O0O.html

MRI成像原理:

含单数质子的原子核,例如人体广泛存在的氢原子,其质子有自旋运动,带正电,产生磁距,有如一个小磁体,小磁体自旋轴的排列无一定的规律
在这里插入图片描述

但如在均匀的磁场中,则小磁体的自旋轴将按磁场磁力线的方向重新排列

在这里插入图片描述

即:正常情况下,质子处于杂乱无章的排列状态,当把他们放入一个强外磁场中就会发生变化,这时候他们只能在平行或反平行于外磁场两个方向上排列,这个时候再使用特定频率的射频脉冲进行激发,作为小磁体的氢原子核吸收一定的能量能够共振,即发生了核磁共振现象。

停止发射射频脉冲时,被激发的氢原子核将所吸收的能量逐步释放出来,其相位和能级都恢复到激发前的状态,这一恢复过程称为弛豫过程(relaxation process).

恢复到原来平衡状态所需的实践称为弛豫时间(relaxation time)

弛豫时间分为两种:

自旋-晶格弛豫时间(spin-lattice relaxation time),又称为纵向弛豫时间(longitudinal relaxation time)称为T1

自旋-自旋弛豫时间(spin-spin relaxation time),又称为横向弛豫时间(transverse relaxation time)称为T2

T1成像和T2成像的区分:水在T1像种是低信号(呈黑色),在T2像中是高信号(呈白色)。

组织间弛豫时间上的差别是磁共振成像的成像基础,犹如组织间吸收系数(CT值)差别是CT成像基础的道理。

Freesurfer

freesurfer是一款用于MRI(核磁共振成像)图像处理和分析的一款开源软件,可以进行多种模态数据的预处理、皮层重建、volume与surface的互相之间的配准等。

1.freesurfer安装

安装参考教程:

https://blog.csdn.net/Y000077/article/details/122614510

https://zhuanlan.zhihu.com/p/464008182

https://www.freesion.com/article/7435549132/

步骤都是类似的,根据自己的系统对相应的命令进行更改

freesurfer的安装比较简单(基于ubuntu):

1.根据自己的操作系统下载相应版本的freesurfer,使用命令行的命令进行解压,得到一个解压后的freesurfer文件,记住解压后文件的地址。

sudo tar xzvf freesurfer-linux-ubuntu18_amd64-7.2.0.tar.gz

2.在官网上使用邮箱注册,会得到一个license.txt文件,将这个文件复制到解压后的freesurfer文件夹中。

3.在命令行中输入以下命令:

sudo gedit /etc/profile   #profile中的环境变量对所有用户都生效,注销或者重启可以修改生效,若要使添加 的环境立刻生效,执行下面的命令
source /etc/profile

profile文件打开后输入以下语句:

export FREESURFER_HOME=/usr/local/freesurfer  #这里FREESURFER_HOME的值是解压后freesurfer的地址,根据自己的情况填写

然后再在命令行中输入以下指令:

sudo gedit /etc/bash.bashrc   #bashrc中的环境变量仅对当前用户生效,注销或者重启可以使修改生效,如果需要使添加的环境立刻生效,则可以执行下面的命令
source ~/.bashrc  #符号~表示当前用户目录,个人感觉应该是source /etc/bash.bashrc

在打开的文件最后输入以下语句

export FREESURFER_HOME=/user/local/freesurfer  #同样,这里的FREESURFER_HOME的值也是解压后freesurfer的值
source $FREESURFER_HOME/SetUpFreeSurfer.sh  #使环境变量立马生效

到此环境就配置好了。

安装tcsh(如果没有的话,一般第一次安装是没有的)

sudo apt-get install tcsh

安装结束后:

可以在命令行中分别输入:tkregister2、tkmedit、tksurfer 和recon-all --help进行测试,没有报错的话 ,就说明基本安装成功。

还可以通过下面的方法进行测试:

Example 1: 将sample-001.mgz 转换成nifti格式。.

$> cp $FREESURFER_HOME/subjects/sample-001.mgz .
$> mri_convert sample-001.mgz sample-001.nii.gz   #转换命令mri_convert
#再对.gz文件进行解压 gzip -dv filename  得到sample-001.nii文件

会输出:


reading from sample-001.mgz…
TR=7.25, TE=3.22, TI=600.00, flip angle=7.00
i_ras = (-0, -1, -0)
j_ras = (-0, 0, -1)
k_ras = (-1, 0, 0)
writing to sample-001.nii.gz…

Example 2: 查看图像.

$> cd $SUBJECTS_DIR
$> freeview -v \
    bert/mri/T1.mgz \%可换成自己的图像
    bert/mri/wm.mgz \
    bert/mri/brainmask.mgz \
   
    -f \
    bert/surf/lh.white:edgecolor=blue \
    bert/surf/lh.pial:edgecolor=red \
    bert/surf/rh.white:edgecolor=blue \
    bert/surf/rh.pial:edgecolor=red

结果如下图:

在这里插入图片描述

注意:

有时候在每次打开终端时,都会弹出几行代码,需要在终端进行环境变量配置:

export FREESURFER_HOME=/home/lihao/Downloads/freesurfer #直接在命令行中使用export导入环境变量,只对这一个终端起作用etxc
export SUBJECT_DIR=/home/lihao/Downloads/freesurfer/subjects
source $FREESURFER_HOME/SetUpFreeSurfer.sh  #这句话是配置的环境变量生效

2.freesurfer基础使用

freesurfer文件夹中带有一些数据放在subjects文件夹中,subject文件夹中的大多是.mgz文件,.mgz文件是一种linux的压缩文件格式。

根据官方教程:

使用下列命令下载数据集(大概有8G),并将下载好后的文件存放在文件夹tutorial_data中

curl https://surfer.nmr.mgh.harvard.edu/pub/data/tutorial_data.tar.gz -o tutorial_data.tar.gz  #curl是commandline/client url的缩写,向某个url发出请求,下载资料
tar -xzvf tutorial_data.tar.gz	#解压压缩包
rm tutorial_data.tar.gz	#rm,即remove删除文件

配置

为了运行该数据,必须定义一个名为TUTORIAL_DATA的环境变量

export TUTORIAL_DATA=/path/to/your/tutorial/dir
ls $TUTORIAL_DATA

#出现类似下面的内容,表示配置成功
buckner_data                    fsfast-functional
diffusion_recons                fsfast-tutorial.subjects
diffusion_tutorial              long-tutorial

几种三维模型数据格式

vtk

vtk是visualization toolkit的缩写,即视觉化工具函数库,开源,可跨平台,支持并行处理,vtk是一个3D计算机图形学、图像处理及可视化工具包主要用于三维计算机图形学、图形处理和可视化,内核由C++构建,可以通过Java和Python等语言使用vtk,并可以在任何一个基于Unix的平台上操作,以及Windows95/98/NT/2000/xp。

obj

obj文件格式与ply文件类似,也是主要用于保存三维模型,但是obj能够支持更加复杂的操作,例如纹理坐标、线段,obj文件是一种文本文件,可以直接使用写字版进行编辑和修改。

ply

ply文件是使用多边形模型数据格式创建的三维图像文件,Polygon File Forma(多边形文件格式),ply文件是obj文件的升级版,ply文件改进了OBJ格式所缺少的对任意属性及群组的扩充性,发明了"property"和"element"这两个关键词,来概括“顶点、面、相关资讯、群组”的概念。

stl

STL是(STereLithography,立体光刻)由3D System软件公司创立、原本用于立体光刻计算机辅助设计软件的文件格式,STL用于描述原始非结构化三角网格由表面单位法线和由右手定则排序的顶点用三维三角形笛卡尔坐标系。STL坐标必须是正数,没有尺度信息,且计量单位为任意的。

dicom

dicom(Digital Imaging and Communications in Medicine),即医学数字成像和通信,具有国际标准,其定义了质量能满足临床需要的可用数据交换的医学图像格式。

nii

nii结尾的是NIFTI格式的文件,大部分医学领域导出dicom格式的数据,比较复杂,很多时候,将dicom格式转为nii格式。

NIFTI格式的数据主要包含三个部分:hdr,ext,img

hdr/header

这部分数据长度是固定的,当然不同版本可能规定的长度不同,但是同一个版本的多个nii文件是相同的

header中包含的信息有:

维度:x,y,z,单位是毫米,还有第四个维度,就是时间,这部分存储的主要是四个数字。

voxel size(体素大小):毫米单位的x,y,z大小。

数据类型 ,一般是int16,这个精度不够,最好使用double类型。

Form和转换矩阵,每一个Form都对应一个转换矩阵,暂时不知道Form是什么。

Extension

自己随意定义数据的部分,可以自己用,但通用的软件公司无法使用这部分数据

Image

储存3D或者4D的图像数据

坐标

dicom和nii格式定义了不同的方向,对于nii格式,坐标原点在大脑中某个部位上,方向可以从下图看出

在这里插入图片描述

体素

转换矩阵

转换矩阵可以轻松分清图像的左右,转换矩阵是一个4x4的矩阵,作用是将体素索引(i,j,k)转换为空间位置(x,y,z),具体使用方法是转换矩阵乘以一个包含(i,j,k)的矩阵,就可以得到一个包含(x,y,z)的矩阵,转换矩阵用到了一些概念,在dicom格式上也是一样的。

转换矩阵内部参数概念

在这里插入图片描述

Related DICOM tags

1.ImageOrientionPatient:[1 0 0 0 1 0]

这个ImageOrientionPatient是一个行向量,主要有6个元素,前三个元素[1 0 0]是图中的c向量,后三个元素[0 1 0]图中的r向量,定义了这个切片图的长和宽的方向,对应于转换矩阵的顺序是[r_x r_y r_z v_x v_y v_z]

2.ImagePositionPatient:[-100 -200 -40.2]

三个元素x,y,z定义了切片图的坐标定点

ImageOrientionPatient和ImagePositionPatient定义了这个图的位置

3.PixelSpacing:[3 3]

ImageOrientionPatient定义了长宽的方向,但是没有定义大小,对应于转换矩阵的顺序是[v_c v_r]

4.SpaceBetweenSlices(SliceThickness):3

厚度,这个切片总共有多厚

转换矩阵的组成

在这里插入图片描述

通过上面参数的介绍,可知转换矩阵的第一,第二列的参数来源,第三列中的n表示切片厚度,x_n就表示第n个切片的顶点的坐标空间,此矩阵的最后一行是[0 0 0 1]的常数。

转换矩阵的应用

转换矩阵乘以一个包含(i,j,k)的矩阵,就可以得到一个包含(x,y,z)的矩阵

在这里插入图片描述

将体素的坐标[i j k]转换为[x y z]

freesurfer中的数据格式

参考链接:http://www.grahamwideman.com/gw/brain/fs/surfacefileformats.htm

freesurfer中主要处理两种数据格式,一种是基于体素的volume数据,一种是来自volume的surface数据,surface数据由一系列顶点(包括顶点在空间中的位置)和面(通常是三角形,有时会是四边形)组成。

三维空间中的体素类似于二维图像中的像素,volume数据是基于三维空间中的体素的,同时,freesurfer中的volumes也有数据卷的意思。

体数据(volume data)

体数据是对一种数据类型的描述,只要包含了体细节的数据都可以称体数据,例子:一堆混泥土,包含了碳物质若干,水分子若干,以及不明化学成分的胶状物,当使用该混凝土建造方块时,如果存在一个三维数组,将砖块的X,Y,Z方向上的物质分布表示出来,则该三维数组可以被称为体数据。

体数据来源:

1.科学计算的结果,如:有限元的计算和流体物理计算

2.仪器测量数据,如:CT或MRI扫描数据、地震勘测数据、气象监测数据等

与提数据相关的专业术语:体素(voxel),体纹理(volume texture),尤其要注意:所谓面数据并不是说二维平面数据,而是说这个数据中只有表面细节,没有包含体细节,实际上体数据和面数据的本质区别,在于是否包含了体细节,而不是在维度方面。

体素(voxel)

A voxel (a portmanteau(合成词) of the words volumetric(体积的) and pixel ) is a volume element, representing a value on a regular grid(栅格) in three dimensional(空间的) space. This is analogous(模仿) to a pixel , which represents 2D image data in a bitmap.

即体素是组成体数据的最小单元,一个体素表示数据中三维空间某部分的值,体素相当于二维空间中像素的概念。

下图中,每个小方块代表一个体素,体素不存在绝对空间位置的概念,只有在体空间中的相对位置,至一点和像素也是类似的。

例如:该数据由nmt个体素组成,表示该体数据在x,y,z方向上分别有n,m,t个元素构成。

在数据表达上,体素代表三维数组中的一个单元,假设一个体数据在三维空间上由256x256x256个体素构成,用三维数组表示,就必须在每一维度上分配256个空间。

实际的仪器采样中,会给出体素相邻间隔的数据描述,单位是mm,例如0.412mm表示该体数据中相邻体素的间隔为0.412毫米。
在这里插入图片描述

体纹理(volume texture)

体数据最主要的文件格式是“体纹理(volume texture)”.

3D texture (Three Dimensional Texture), also known as “volume texture,” is a logical extension of the traditional (and better known) 2D texture. In this context, a texture is simply a bitmap image that is used to provide surface coloring for a 3D model. A 3D texture can be thought of as a number of thin pieces of texture used to generate a three dimensional image map. 3D textures are typically represented by 3 coordinates(坐标).

译文:三维纹理,即体纹理,是传统 2D 纹理在逻辑上的扩展。二维纹理是一张简单的位图图片,用于为三维模型提供表面点的颜色值;而一个三维纹理,可以被认为由很多张 2D 纹理组成的,用于描述三维空间数据的图片。三维纹理通过三维纹理坐标进行访问。

这时可能会有人提出问题了,图片都是平面的,怎么能表示三维数据?请注意,我们通常所看到的图片确实都是平面的,但是并不意味着 x,y 平面上的像素点不能存放三维数据,举一个例子:在高级语言编程中,我们完全可以用一维数组去存放三维数组中的数据,只要按照一定规则存放即可!

按照一定规则将三维数据存放在 XY 像素平面所得到的纹理,称之为 volume texture 。

体数据通常是由 CT 仪器进行扫描得到的,然后保存在图片的像素点上。目前国际上比较常用的体纹理格式有,基于 DirectX 的 .dds 格式和 .raw 格式。注意,很多人会将 .raw 格式当作摄像器材使用的那种格式,其实这两个格式的后缀虽然都是 .raw ,但是其数据组织形式是不同的。用于体纹理的 .raw 格式,存放的是三维数据,用于摄像器材的 .raw 格式只是普通的二维图片。 图 43 从左到右分别是 University of Tübingen ( Germany )、 Viatronix Inc.(USA) 、 Walter Reed Army Medical Center (USA) 三家机构的通过仪器扫描得到的体纹理数据的体绘制图片。

在这里插入图片描述

这三个体纹理数据的描述分别是: 256 x 320 x 128 /0.66, 0.66, 0.66 ; 512 x 512 x 174/0.8398, 0.8398, 3.2 ; 512 x 512 x 463/0.625, 0.625, 1.0 。

由于在国内的网站上很难找到体数据,所以下面我给出几个国外的网址,这些网址提供用于教学和研究只用的体纹理数据(只能用于教学和研究)。

http://wwwvis.informatik.uni-stuttgart.de/~engel/pre-integrated/data.html

http://www9.informatik.uni-erlangen.de/External/vollib/

http://www.volren.org/

体绘制算法
国际上留下的体绘制算法主要有:光线投射算法( Ray-casting )、错切 - 变形算法( Shear-warp )、频域体绘制算法( Frequency Domain )和抛雪球算法( Splatting )。其中又以光线投射算法最为重要和通用。

究其原因,无外乎有三点:其一,该算法在解决方案上基于射线扫描过程,符合人类生活常识,容易理解;其二,该算法可以达到较好的绘制效果;其三,该算法可以较为轻松的移植到 GPU 上进行实现,可以达到实时绘制的要求。

surface data(表面数据、曲面数据)

参考资料:http://www.grahamwideman.com/gw/brain/fs/surfacefileformats.htm

The surface data consists of lists of vertices(顶点)(and their positions in space), and faces (usually triangles(三角形), sometimes quadrangles(四边形)) and the vertices associated with them. A number of FreeSurfer programs are thus devoted to manipulating, viewing and analyzing these surface files. FreeSurfer can derive some per-vertex or per-face data items, and also provides ways for you to add your own per-vertex data. This kind of associated data can also be viewed and analyzed with some FreeSurfer tools.

vertices and patches

FreeSurfer surface data involves vertices which will be subjected to various transformations. Consequently it’s necessary to be able to track each vertex through this process, and for this purpose FreeSurfer assigns each vertex an id or “vertex number”. For a set of data derived from a particular original surface analysis, a particular vertex number always refers to the same vertex, though in different surfaces the (x,y,z) values for that vertex may have been transformed. It is to this vertex number that additional data items (such as curvature, thickness or functional activity) can be attached.

Patches(补丁) are subsections of complete surfaces, hence containing only a subset of the vertices. Patches retain(保留) the same vertex numbering, so that a patch’s vertices can be cross-referenced(相互参照,交叉引用) to the complete set. Since a patch does not contain the complete set of vertices, the numbering of vertices in a patch will be non-contiguous(无关紧要).

主要信息:

1.三维纹理和体纹理是同一概念,三维纹理和二维纹理是不同的。

2.三维纹理通过三维纹理坐标进行访问。

1.dicom格式数据,FreeSufer的三维模型格式转换(转换为vtk、obj、ply、stl等格式)

2.mgz数据和dicom格式数据的转换

3.继续实现任务(1、基于FreeSufer的重建实验环境及官方案例 2、基于FreeSufer的CLI(命令行接口)接口重建脑部皮层的DEMO)

4.寻找重建函数

5.FreeSufer支持CLI方式集成使用,CLI Command-line Interface(命令行接口)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐