基于混合调用的MRI图像预处理程序及其应用

2016-09-08 10:31张俊然蒋小梅陈富琴
计算机应用与软件 2016年8期
关键词:头骨调用轮廓

张 坤 张俊然 蒋小梅 陈富琴

(四川大学电气信息学院医学信息工程系 成都 四川 610065)



基于混合调用的MRI图像预处理程序及其应用

张坤张俊然*蒋小梅陈富琴

(四川大学电气信息学院医学信息工程系成都 四川 610065)

由于目前存在的MRI图像预处理操作过于繁琐或者过多依赖编译环境,从而严重影响了工作效率和处理时耗。针对上述情况,介绍两种基于C++和MATLAB平台混合调用的MRI神经影像图片预处理的算法及其应用。通过在MATLAB中调用bet.exe(VC++编译)提高了影像数据处理平台(SPM,MATLAB)的可扩展性,方便影像处理流程在同一个平台下完成,提升了工作效率。而通过在VC++中调用m子程序,将be_ls核心算法、fig程序等编译成独立于编程环境的可执行程序。单独的可执行exe可以在未安装MATLAB平台的计算机上运行,这种不过多依赖于程序环境的Standalone方式为许多专业软件所采用,但还未见应用于MRI图像处理领域的报道。实验结果表明,通过VC++和MATLAB的混合调用,不仅可以有效地实现头骨剥离,而且很大程度上节省了操作的周期,从而提高了工作效率。这对于推动该领域软件编译技术的发展具有积极的借鉴与现实意义。

MATALBBET水平集方法混合编程头骨剥离

0 引 言

磁共振成像MRI的神经影像图片预处理过程一般包括:头动校正、配准融合、图像标准化、平滑等[1],其中针对神经影像中结构图像,一般还包括去头骨(头骨剥离)这项预处理步骤。头骨剥离是将脑部组织从非脑组织中分离出来,去除图像中脑外组织。一般来说,图像分割尤其是精细化分割都要求去除和分割无关的组织,所以头骨剥离是脑组织分割中的一个关键步骤[2,3],只有精确地去除非脑组织才可确保脑白质、脑灰质和脑脊液的精确分割。而基于完整头骨剥离的脑组织精确分割对诊断、治疗、病理研究 、放疗计划的制定、手术导航、计算机辅助诊断等均有极其重要的意义。目前因为核磁共振成像的高分辨率、高信噪比、无放射性危害、软组织成像效果好等优点而被广泛应用于临床检查,因此针对MRI图像的头骨剥离对其临床应用有着重要的意义和价值。

进行头骨剥离的程序大多是用一种特定的语言编写的,其中VC++编写的bet.exe程序[4,8]是运行在Dos环境下的人脑影像头骨剥离程序,每次运行都需要在命令行下输入一定的命令,对于初学者较难掌握,也较为影响工作效率。而使用MATLAB编写的基于水平集方法的活动轮廓模型程序[9,12]是专门针对动物脑影像的头骨剥离程序。它由两个GUI编写的fig程序和子程序组成,其中包括水平集方法的核心算法[9];需要先安装MATLAB工具包,且每次运行都需要在MATLAB中先打开fig文件;这个过程繁琐,且增加了实验室的成本。

本文针对以上两种典型的去头骨程序通过MATLAB和VC++的混合调用来提高操作效率、易用性和降低实验成本。首先通过MATLAB调用bet.exe,然后在MATLAB中通过简单的命令就可以实现快速的人脑头骨剥离。而针对进行动物头骨剥离的水平集活动轮廓程序通过VC++和MATLAB的混合编程,将相应的核心算法和fig文件并编译成exe应用程序。生成的exe应用程序可以单独运行并且可以移植到其他Windows平台的计算机上。这样不仅提高了操作效率,而且减少了安装MATLAB的冗杂和所需要的存储空间。 图1是基于混合调用的MRI图像与处理算法流程图。

图1 神经影像预处理图

1 基于MATLAB调用的MRI神经影像图片的算法实现和应用

1.1Brain Extraction Tool(BET)介绍

BET算法[4,8]的主要思想是采用可变点阵模型,该模型由一系列离散的点组成。首先粗略的初始化一个脑组织表面,然后通过u1,u2,u3,这3种相互作用的力将轮廓点推到脑组织的边缘。其中u1是平行于轮廓切线方向的力,其主要作用是将各个轮廓点之间保持一定的距离;u2是垂直于轮廓切线方向的平滑力,其主要作用是保持轮廓的平滑;而u3是与切线方向垂直的扩张力,其主要作用是决定轮廓向内还是向外演化。可变点阵模型在这三个力的作用下不断进行自我调整,最终将所有的轮廓点全部收敛于脑组织表面,最终得到相应的脑组织[7]。BET工作流程见图2所示。

图2 BET算法流程

(1) 图像基本参数估计

BET算法首先要粗略地估计一些参数,用于初始化可变点矩阵模型。

首先通过观察图像的直方图,找到该直方图的最大和最小灰度值。并且简单地估计一个脑组织和非脑组织之间的灰度阈值;然后根据估计的阈值可以粗略地估计出脑组织部分的重心COG(Centre Of Gravity);最后很粗略地估计一个大脑的半径r0。

(2) 表面模型初始化

表面模型初始化就是以脑部的重心作为圆心,r0为半径做一个圆。然后将圆分成N等份,每个等份点就是可变点阵模型的顶点。

(3) 轮廓演化过程

BET的主要思想[8]是通过u1,u2,u3三个相互作用的力将顶点推送到脑组织的边缘。各个顶点在u1,u2,u3作用下不断地更新位置,最后达到平衡状态。这个过程就是轮廓不断演化的过程。

图3 轮廓顶点示意图

取三个相邻的顶点A0,A1,A2。如图 3 所示:o为估计的圆心,连接A1A2。Ac为其连线的中点,则S为底边的中线。A0At垂直A1A2,At为底边的垂足。 那么Sn即是垂线向量。将S分解为和St和Sn,其中,St=S-Sn,R是半径,eSn为Sn的单位向量。

①u1:使表面内各个顶点之间保持一定的间距(间距不能太大也不能太小)。保持所有顶点之间都等间距的分布在脑组织边缘上。因此,u1直接与St相关。此处设:

u1=St/2

(1)

②u2:轮廓表面平滑力。u2作用于当前顶点A0,使其与相邻顶点之间保持一定的平滑度。因此,u2和Sn有关。此处一个简单规则是赋予Sn一个与曲率有关常数分量:

u2=[1+tanh(F×(1/r-E))/2]Sn

(2)

其中r是曲线在顶点A0处的曲率k的倒数,其中F=6(kmax-kmin),E=(kmax+kmin)/2,此处取kmax=1/33,k=1/100。

③u3:轮廓演化选择力。u3同u2方向一致,也平行于Sn,可以与图像直接相互作用。它决定着图像表面轮廓演化的方向。首先,找到灰度的最小值和最大值。其中Imin是以A0为起点,沿着R的方向Nd个采样点中灰度的最小值。而Imax则是找到灰度的最大值。

u3=2[(lmin-t1)/(lmax-t2)]×eSn

(3)

t1=(lmin-t2)×bt+t2

(4)

一般来说,bt是位于 0 到 1 之间的一个常数值,默认值为 0.5,t2是区别背景和MRI图像的阈值。

合力表达式为:

u=u1+u2+0.05lu3

(5)

结合图3,清晰地看到u1是将顶点A0往中点Ac方向拉,是相邻的顶点之间都保持一点的间距。u2将凹出的A0向外拉,将凸出的A0向内拉,保持A0与相邻A1A2之间的平滑。u3是将A0点推向脑组织边缘阈值的点,最终三个力达到平衡。

BET算法的优点是:从式(5),可以看出,这3个力的计算非常简单,故BET算法速度很快,由于u1 和u2 的作用,,轮廓点之间的分布很均匀,得到的轮廓曲线很平滑。

(4) 实验与应用环境

本研究中图4采用SIMENS Trio 3.0T MR全身成像系统。并用最新的8通道头线圈以提高信噪比。所有纳入者的3D T1图像通过3D扰相梯度回波序列(SPGR)获得,扫描参数如下:TR 1.9 s,TE 2.26 ms,反转角 9°,层厚1 mm,单次激励,视野(FOV)24 cm×24 cm,矩阵256×256,体素(voxel)大小1.00 mm×1.00 mm×1.00 mm。全脑共采用156层轴面图像。

图5采用GE 3.0 T MR全身成像系统(Excite,General Electric,Milwaukee,USA),并用最新的8通道头线圈以提高信噪比。所有纳入者的3D T1图像通过3D扰相梯度回波序列(SPGR)获得,扫描参数如下:TR 8.5 ms,TE 3.4 ms,反转角 12°,层厚1 mm,单次激励,视野(FOV)24 cm×24 cm,矩阵256×256,体素(voxel)大小0.47 mm ×0.47 mm ×1.00 mm。全脑共采用156层轴面图像。

1.2MATLAB调用Win32程序

bet.exe是用VC++编写的针对Win32系统的图像分割程序,能在Dos下面通过相应的命令实现快速的MRI图像脑组织的提取;但是实际中大家并不习惯直接在Dos下写命令,而是喜欢用简单的指令完成相应的功能。所以通过MATLAB调用bet.exe是一个很便捷的方式。在MATLAB中通过简单的命令就能提取出脑组织。MATLAB中通过语法:

unix(sprintf(′bet %s%c%s %s%c%s%s -f %0.2f′,...

pn,filesep,fn,pn,filesep,...

prefix,fn,num));

调用bet.exe。

MATLAB调用bet后的处理结果详见图4和图5所示,(a)是待处理的原始图片,(b) 是程序处理过的脑组织图片。

(a) 原始图片   (b) 去除头骨后的脑组织图片图4 BET算法处理的SIEMENS图像

(a)原始图片    (b) 去除头骨后的脑组织图片图5 BET算法处理的GE图像

从上面的分割图片能够看到分割后脑组织的真实性很好。并且对于来自不用仪器,不同大小和分辨率的MRI图像。BET算法都可以实现有效的分割。

2 基于VC++混合调用的MRI神经影像图片的算法实现和应用

2.1水平集轮廓模型

从人类到灵长类-哺乳类-灵长类-啮齿类,不同的生物大脑结构有很大的差异;其头骨剥离算法也有较大的差异。这是由于它们各自的特殊解剖学特性,这些特性包括与头骨组织相似的信号强度以及外围与头骨之间非常狭窄的脑脊髓液成分、比例[9]。这些特性的相似之处在于可以使用图像强度和图像梯度来提取脑组织结构,而这些信号强度的分布和梯度在不同的生物种类之间有着较大的差异,故专门针对人脑的脑组织提取方法对这些生物种类都基本不适用。

基于老鼠大脑的这些特性,一种半自动的脑组织提取方法—水平集活动轮廓模型在2010年被美国内布拉斯加医学中心研发出来[9,12]。该活动轮廓模型是使用约束水平集(CLS)算法提取脑组织。如图6是主动轮廓模型的算法流程图。

图6 活动轮廓模型流程图

(1) 水平集方法

水平集的思想是用一个4维方程(m=φ(w,y,z)或者φ(w,y,z,m)来隐形地表示一个3D的头皮表面C。因此φ是x,y,z,m的方程。而头皮表面C就可以表示为C={(x,y,z)|φ(t,x,y,z)=0}。其中φ被称为水平集函数,而C则称为零水平表面。水平集方法首先是定义一个初始水平集表面,然后通过不断的迭代让零水平表面的边缘不断的逼近初始水平集表面。零水平表面(C(t)={(x,y,z)|φ(t,x,y,z)=0})的不断迭代使水平集函数φ不断演变。φ的演变过程可以用式(6)来表示:

(6)

式(6)也称为水平集等式。其中F是速度函数。与图相梯度和水平集函数φ有关。根据文献[12],这个等式又可以表示为:

(7)

(2) 通过先验知识获取水平集权重因子和初始化水平集表面

使用者首先应该了解脑组织解剖学方面的知识,这样才能根据先验知识更容易和更快速地定义脑组织的初始化水平集表面。在这我们需要定义的是小鼠MRI图像的轴状面和矢状面的脑组织轮廓,如图7所示,分别定义完成的矢状面和轴状面的轮廓。它由使用者定义的点连成线段,然后进一步组成一个封闭的圈。轴状面和矢状面的脑组织总体就构成一个正交的脑组织轮廓。而这个轮廓的位置和形状完全取决于使用者是否可以准确和有效地区分脑组织和非脑组织。然后在定义好的轮廓中提取出约束点。如图8所示,其中竖直方向的两个点表示图7(1)定义的矢状面轮廓,水平方向的两个的点表示的是图7(2)定义的轴状面轮廓。

(1) 矢状面活动轮廓模型图   (2) 轴状面活动轮廓模型图7 矢状面和轴状面定义轮廓

通过先验知识定义初始化水平集表面和约束点。约束点首先用来定义初始化水平集表面,同时约束了零水平表面的演化范围。为了在水平集方法中包含约束点,等式(7)中的权重因子也需要不断变化。而约束点的变化则是通过不断增加μ,减小λ和改变ν的符号来实现(其中μ是内力,λ和ν都是外力)。

(1) 定义的主动轮廓模型   (2) 导入主动轮廓模型的图像图8 定义的活动轮廓模型

(3) 基于水平集的活动轮廓模型程序

用MATLAB编写的该程序主要包括定义轮廓(defineContours)和提取脑组织(be_ls)两个主程序,defineContours的作用是首先定义初始化水平集表面。而be_ls程序通过调用defineContours定义的初始化水平集表面模进行脑组织的提取。并且通过GUI图形界面分别设计相应的fig文件。

图9是水平集活动轮廓处理效果图,(1)是待处理的原始图片,(2) 是程序处理过的脑组织图片。

(1) 原始图片       (2) 程序处理后的图片图9 水平集活动轮廓处理效果图

(4) 实验与应用环境

RI数据来源:Bruker 7.0T磁共振成像系统,TR 1 s,TE11 ms,层厚1 mm,视野(FOV) 3.5 cm × 3.5 cm,矩阵128×128,分辨率 0.02 mm×0.02 mm×0.02 mm。

2.2VC++调用MATLAB

(1) MATLAB编译器(mcc)

mcc是MATLAB中经过优化的编译器。使用mcc,用户可以将MATLAB数学库、图形库和界面的MATLAB程序编译成为独立于MATLAB的exe应用程序和DLL动态连接库[11,15]。在VC++中设置用户界面并且调用exe应用程序,就可以脱离MATLAB平台而独立运行,值得注意的是:此时计算机也需要安装相应的MCRInstaller.exe来配置上述exe程序运行所需要的环境。此种方式极大地方便使用者,无须安装整个MATLAB平台就可以实现相同的功能。

(2) MATLAB编译环境设置

首先在MATLAB命令提示符下输入mbuild-setup 命令,选择编译器[11]。(需要注意的是必须确保计算机上已经安装了某个版本的VC++,并且VC++6.0是32位的,所以32位的MATLAB才能识别出VC++6.0。本文选择visual C++6.0和32位的MATLAB 7.1。)

(3) mcc 编译exe应用程序

连接MATLAB和VC++成功后,在MATLAB中分别输入 mcc-e be_ls.fig 和mcc-e defineContours.fig ,将相应的MATLAB中运行的fig文件编译成相应的exe。此时的exe文件可以移植到未安装MATLAB的电脑上运行。同时需要安装的文件还包含MCRInstaller.exe用以配置独立运行所需要的类MATLAB环境。

(4) VC++编译独立运行exe

此时生成的exe应用程序包含be_ls.exe 和defineContours.exe,实际的使用过程中比较繁琐,所以我们在VC++ 中设置一个用户界面。建立一个MFC程序,加入两个按钮并给按钮添加WinExec函数调用相应的exe。

MFC中通过

WinExec("be_ls.exe",NULL)

调用be_ls.exe。

完成以后只需要在电脑上提前安装MCRInstaller.exe,就可以将exe应用程序移植到该电脑。减少了安装MATLAB的冗杂和所需要的内存空间。

3 实验结果

表1 改进结果分析

表1中列出了程序改进前后的效果分析。可以明显地得出BET程序改进后不仅节省了输入复杂命令的时间。并且MRI图像分割质量也没有改变。由于MATLAB具有图像处理方面独特的优势,所以经过分割的MRI图像不需要换环境,就可以在MATLAB中实现后续的处理。对于提升整个预处理流程的周期也有明显的提升。而从水平集程序列出了改进前后的效果。容易得出:改进后的活动轮廓模型可以在未安装MALTAB的PC机上运行,不仅节省了正版软件的经济支出和安装MATLAB的冗杂,而且还缩短了整个分割的周期。这种Standalone方式对于临床有积极的作用。

针对BET算法,本文中对比了来自不同设备(SIMENS和GE)、不同大小和不同分辨率MRI图像对分割的影响。效果如图4和图5。通过简单的观察,可以看到BET算法可以有效实现分割。BET算法和水平集算法在医学临床和图像处理方面已经被广泛使用,并且针对不同生理参数也提出了不同的改进(如参考文献[18-20])。文献[4]对BET算法的效果进行了详细的分析,通过与其他分割方法的比较,BET算法可以有效地实现脑组织和非脑组织的分割;文献[9]对水平集算法的活动轮廓模型进行了量化分析,结果显示基于水平集的活动轮廓模型能有效实现分割效果。

本文中基于PC上运行的bet.exe和MATLAB上运行的be_ls.m程序分别提出了在MATLAB和VC++中混合调用的方法。增加了程序的使用环境。方便了不同的用户对程序的需求。同时也减少了程序本身的操作周期,一定程度上提高了工作的效率。

4 结 语

实验和分析结果表明,基于BET算法的头骨剥离程序和活动轮廓模型的头骨剥离程序可以有效地实现脑部区域和非脑部区域的自动分割。并且通过VC++和MATLAB混合调用极大地改善了特定语言编写的程序在运行模式上的不足。其中通过MATLAB调用VC++编写的bet.exe简化了操作的复杂性,提高了工作效率。而通过VC++调用MATLAB编写的fig程序,将依赖于MATLAB的fig程序编译成单独的exe应用程序,减少了费用和安装软件所需的空间。正是因为混合调用弥补了不同程序需要在不同平台编程的不足,所以混合调用给使用者带来了很大的便利。目前混合调用的方式在医学图像处理领域还少见报道,不依赖于编译环境的Standalone方式将提升这一领域的工作效率,推动新的软件运行模式/环境在此领域的广阔应用。

[1] 陈华.基于 fMRI 数据分析的外关穴特异性研究[D].南方医科大学,2011.

[2] 裴晓敏,田秀华.MRI 脑部图像头骨剥离方法研究[J].计算机仿真,2009 (3): 205-207.

[3] 张海燕,李海云.核磁共振图像脑组织自动提取方法[J].Computer Engineering and Applications,2014,50(16):168-172.

[4] Smith SM.BET: brain extraction tool,FMRIB technical report TR00SMS2b [R].Oxford Centre for Functional Magnetic Resonance Imaging of the Brain, 2002.http://www.fmrib.ox.ac.uk/fsl/bet2/.

[5] Fagiolo G,Waldman A,& Hajnal J V.A simple procedure to improve FMRIb software library brain extraction tool performance[J].The British Journal of Radiology,2008,81(963):250-251.

[6] Wang Y,Nie J,Yap P T,et al.Knowledge-guided robust MRI brain extraction for diverse large-scale neuroimaging studies on humans and non-human primates[J].PloS one,2014,9(1): e77810.

[7] 张伟瑞.基于 graph-cuts 的脑组织自动提取方法[D].南昌航空大学,2013.

[8] 江少锋,王文辉,冯前进,等.基于改进 BET 算法的 MR 颅脑图像脑组织自动提取[J].中国图象图形学报,2009 (10): 2029-2034.

[9] Uberti M G,Boska M D,Liu Y.A semi-automatic image segmentation method for extraction of brain volume from in vivo mouse head magnetic resonance imaging using constraint level sets[J].Journal of neuroscience methods,2009,179(2): 338-344.

[10] Wang H,Huang T Z,Xu Z,et al.An active contour model and its algorithms with local and global Gaussian distribution fitting energies[J].Information Sciences,2014,263: 43-59.

[11] Zheng Q,Dong E,Cao Z,et al.Active contour model driven by linear speed function for local segmentation with robust initialization and applications in MR brain images[J].Signal Processing,2014,97: 117-133.

[12] Li C,Xu C,Gui C,et al.Level set evolution without re-initialization: a new variational formulation[C]//Computer Vision and Pattern Recognition,2005.CVPR 2005.IEEE Computer Society Conference on.IEEE,2005,1: 430-436.

[13] 张沛露,王建军.VC++ 与 MATLAB 混合编程方法[J].吉林建筑工程学院学报,2014(6):57-60.

[14] 穆以东,赵岭.VC++ 与 MATLAB 混合编程方法研究[J].测控技术,2013,32(9): 111-114.

[15] 甘禹,陈炜,杨秀萍,等.VC 与 MATLAB 的混合编程研究及其应用[J].天津理工大学学报,2014,30(3):5-8.

[16] 付慧琳,刘芳,邓友燕.C++ 与 MATLAB 混合编程模式的研究与实现[J].电子科技,2014,27(11): 73-75.

[17] 鲁晓东.Visual C++ 与 MATLAB 的界面混合编程[J].实验室研究与探索,2011,30(7): 76-78.

[18] 江少锋,王文辉,冯前进,等.基于改进 BET 算法的 MR 颅脑图像脑组织自动提取[J].中国图象图形学报,2009 (10): 2029-2034.

[19] 敖谦,朱燕平,江少锋.基于混合水平集的脑组织自动提取方法[J].计算机应用,2013,33(7): 2014-2017.

[20] 郑罡,王惠南.基于水平集的多相活动轮廓图像分割模型 (英文)[J].南京航空航天大学学报: 英文版,2006 (2): 132-137.

MRI IMAGE PREPROCESSOR BASED ON MIXED CALLING AND ITS APPLICATION

Zhang KunZhang Junran*Jiang XiaomeiChen Fuqin

(DepartmentofMedicalInformationEngineering,CollegeofElectricalEngineeringandInformationSichuanUniversity,Chengdu610065,Sichuan,China)

Since existing operations of MRI image preprocessing are too complicated or excessively rely upon the compiler environment,it seriously affects the processing efficiency and time-consuming.In view of this,the paper introduces two MRI neuroimaging picture preprocessing algorithms,both are based on mixed C ++ and MATLAB platform calling,and their applications.By calling bet.exe (VC++ compiler) in MATLAB the algorithm improves the scalability of image data processing platform (SPM,MATLAB),facilitates the completion of image processing flow on same platform,and enhances work efficiency.And by calling m subprogram in VC ++,the algorithm compiles be_ls core algorithm and fig procedures into an executable program that is independent of the programming environment.The single and executable exe can be run on a computer without installing MATLAB platform.The way of Standalone,which is not much rely on compiler environment,has been used by many professional software,but the reports about its application in MRI image processing have not yet been found.Experimental results show that through mixed calling of CV++ and MATLAB,it can not only achieve skull stripping effectively,but can also greatly shortens the cycle of operation,so that improves the work efficiency.It has a positive reference and practical significance to promoting the development of the software compiler technology in the field.

MATLABBETLevel set methodMixed callingSkull stripping

2015-03-16。国家自然科学基金项目(81000605);广东省自然科学基金重点项目(S20120200-10867);四川省科技计划项目(2015HH0036)。张坤,本科生,主研领域:图像处理,信息处理。张俊然,副教授。蒋小梅,硕士生,陈富琴,硕士生。

TP391

A

10.3969/j.issn.1000-386x.2016.08.044

猜你喜欢
头骨调用轮廓
头骨祈福
OPENCV轮廓识别研究与实践
神奇的水晶头骨
基于实时轮廓误差估算的数控系统轮廓控制
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
高速公路主动发光轮廓标应用方案设计探讨
基于系统调用的恶意软件检测技术研究
利用RFC技术实现SAP系统接口通信
会说话的头骨