基于图像分割的网络API设计与实现

2016-12-23 11:18冯春雨
电子设计工程 2016年24期
关键词:编译器调用石家庄

冯春雨,赵 建,赵 耀

(1.河北省科学院应用数学研究所 河北 石家庄050081;2.河北师范大学 河北 石家庄050024;3.中国人民银行石家庄中心支行 河北 石家庄050000)

基于图像分割的网络API设计与实现

冯春雨1,赵 建2,赵 耀3

(1.河北省科学院应用数学研究所 河北 石家庄050081;2.河北师范大学 河北 石家庄050024;3.中国人民银行石家庄中心支行 河北 石家庄050000)

通过图像分割算法在脑图像中自动分割出脑室并计算脑室面积,可以弥补人工诊断的主观性和局限性,为临床诊疗提供了更加客观、全面的决策支持。另外,通过网络API的形式提供服务,复杂的算法运算在服务器端完成,使用者只需在浏览器中进行简单的操作就可获得想要的结果。此方法不仅方便快捷,同时还大大降低对硬件资源的要求。

图像分割;网络API;辅助诊断;JAVA本地接口

近年来,脑部疾病以其高发病率、高死亡率、高致残率、高复发率及多并发症等特点成为威胁人类健康的重要因素。据报道,我国每年有超过200多万人发生脑疾,其中我国每年死于脑疾病患者约有100万以上,脑疾病病死率约为45%。因而,如何借助于医学影像检查,定性和定量地分析脑组织,进而分析与脑疾病的关系已经成为当前的研究热点。

核磁共振成像(MRI)是对脑部疾病进行诊断的重要手段[1]。由于大脑结构的复杂性和个体差异性,准确地在MRI颅脑图像中测量感兴趣的脑组织是一项极为复杂和困难的任务。过去,定量化的测量脑组织尚不精确,病情诊断方面往往依赖医生的经验。随着计算机的应用与发展,医院管理信息化和智能化水平的不断提高,医院信息系统在医学图像的管理、分析和辅助医生诊断中发挥着不可替代的作用[2]。

本论文中通过前期改良的图像分割算法在脑图像中自动分割出脑室并计算脑室面积,可以弥补人工诊断的主观性和局限性,为临床诊疗提供了更加客观、全面的决策支持。另外,通过网络API的形式提供服务,复杂的算法运算在服务器端完成,使用者只需在浏览器中进行简单的操作就可获得想要的结果。此方法不仅方便快捷,同时还大大降低对硬件资源的要求。

1 总体设计思路

因图像分割算法涉及许多复杂的数学运算[3-7],如果采用常用的编程语言(C/C++、Java等)实现的话编程工作量将非常巨大。Matlab是面向科学计算的常用软件,具有高效的数值计算及符号计算功能,且语法特征与C++语言极为相似,简单易用[8]。使用Matlab可以轻松完成一些繁杂的数学运算,因此对于一些复杂的算法可以先通过Matlab实现,然后被其它编程语言调用。在C程序中调用Matlab程序有两种方式[9-10]。第一种是C程序直接调用Matlab引擎,第二种是将Matlab程序打包成动态链接库文件(DLL)在C语言环境下调用。两种方式各有优缺点,本文中采用第二种方式。首先利用Matlab实现图像分割算法[11-12],然后将Matlab程序编译成C可调用的Dll,编写C接口及数据转换程序并打包成DLL,最后通过JNI调用C编译生成的DLL完成网络API的设计[13]。

2 前期准备

文中实验中使用的计算机主要配置为 intel i7-3770 CPU,内存大小4G,硬盘空间500G。操作系统为Window XP,C编译器使用VC++6.0,Matlab使用 Matlab9.0 32位版本,Java环境使用 JDK 1.7.0_67版本,Web应用服务器使用Tomcat 7.0.61版本。C编译器和Matlab选取时只要在Matlab中能够找到C编译器就行,一般来说只要C编译器的版本不高于 Matlab版本就能达到此要求。如 Matlab2012b和VS2010/VS2012,Matlab2014和 VS2010/2012等等。 利用Matlab编写改进后的图像分割算法,文中算法主程序为Demo_LGD.m文件。

3 Matlab编译器设置

1)在Matlab的command window里面输入mex–setup,Matlab询问是否定位计算机上安装的编译器,输入y,Matlab会列出所有电脑上所有的编译器,这里选择2,即VC++6.0,如图1所示。

图1 选择编译器

2)选择build工具。完成以上步骤后,输入mbuild-setup,选择build工具,过程跟上一步类似,结果见图2。

图2 选择build工具

4 M文件编译

在Matlab的command window里面敲入命令:mcc-W cpplib:LGD-T link:lib Demo_LGD,其中,mcc是Matlab提供的编译命令,-W是控制编译之后的封装格式,cpplib是指编译成C++的lib,cpplib冒号后面指定编译后库的名字,-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字是后面的Demo_LGD,即你写的m函数的名字。详细说明可在Matlab命令窗口敲入help mcc或mcc-?查看帮助。

Matlab完成指令运行后,在Matlab工程目录下面会出现多个文件,其中对我们来说有用的是LGD.cpp,LGD.dll,LGD.h和LGD.lib这4个文件。LGD.dll是编译好的动态链接库,实现图像分割的函数封装在个文件里面,LGD.h是对应的头文件,在C里面调用这个函数的时候,需要include这个头文件,在这个头文件的最后,你可以看到下面的内容:

这就是Demo_LGD的C函数的声明。nargout表示输出变量的个数area1,area2,infile,outfile,X,Y,InforDef,Compress对应m函数的几个变量。注意,除nargout外其它变量的类型都是mwArray。mwArray是一个类,是Matlab提供的一个特殊的变量类型。C程序调用Matlab程序时需进行数据类型转换,这些内容会在第6节中提到。

5 VC环境设置

为了在C程序能够调用上一节生成的dll和lib文件,支持Java编译(JNI用到),需对VC环境进行设置,具体步骤如下:

1)打开VC程序并建立一个动态链接库工程,这里起名为MRISegment,将上面生成的LGD.cpp,LGD.dll,LGD.h和LGD.lib 4个文件拷贝到工程目录下。

2)在tool-option-directory里面设置include头文件和lib的路径。首先是include中添加Matlab和JAVA头文件的路径,如图3最下面3行所示,根据具体情况选择Matlab和JDK软件的安装目录。

图3 添加头文件路径

然后添加lib的位置,不仅需要添加Matlab静态库的位置,而且也要把刚编译生成的lib位置添加进来,如图4最后两行所示。

图4 添加链接库文件路径

3)添加所需lib文件。路径设置好后,在project Settinglink-Object/library modules里面加入 mclmcrrt.lib、libmx.lib、libmat.lib、mclmcr.lib和LGD.lib 4个文件,文件名之间用空格隔开,如图5所示。

图5 添加链接库文件

6 JNI及C接口程序编写

如果网站管理后台采用C语言编写,可以直接调用Matlab打包生成的DLL。如果使用Java语言编写,则无法直接调用Matlab打包生成的DLL,可以采用JNI(Java Native Interface)形式快速有效的完成程序间的调用[14-15]。本节简单介绍通过JNI调用算法DLL的流程。

1)新建一个txt文件,起名为MRISegment,将后缀名改为java,该文件主要定义一个java类实现对调用函数的封装。内容如下:

2)生成class文件。调出命令行程序,将路径设置为上面所建java文件所在路径(或者下一步javac命令中文件带有绝对路径)[16],输入javac MRISegment.java,生成MRISegment. class文件。

3)生成h文件。将路径设置为MRISegment.class文件所在路径(或者下一步javah命令中文件带有绝对路径),输入javah-jni MRISegment,生成MRISegment.h文件,并将该文件拷贝到MRISegment工程目录下。

4)编译生成C动态链接库。首先在MRISegment工程中新建cpp文件。该cpp主要实现Java和C之间、C和Matlab之间数据格式的转换以及MRISegment.h文件中定义的函数[17]。编译工程生成MRISegment.dll。

7 API调用页面显示

前台页面主要负责图像的显示以及坐标点、参数的输入以及处理后图像的呈现,数据提交到后台调用第六节中生成的MRISegment.dll。图像处理完毕后将结果返回给前台页面。图6~8为实现过程的页面截图。

图6 加载图像

图7 选择目标区域

图8 结果显示

8 结 论

文中通过计算机自动分割出脑室并计算脑室面积,一定程度上弥补了人工诊断的主观性和局限性。另外,以网络API的形式为医务人员提供服务,使用人员不需购置昂贵的设备,可以通过任何一个带有网络的普通PC或者移动设备随时随地获取服务,既方便快捷又大大节省了使用方的费用。因此,该方式具有较高的商业价值,可在县级以上医疗机构大面积推广,产生较好的经济效益。

[1]陈武凡,康立丽.MRI原理与技术[M].北京:科学出版社,2012.

[2]章毓晋.图像工程[M].第2版.北京:清华大学出版社,2007.

[3]Song Z,Tustison N,Avants B,et al.Integrated graph cuts for brain MRI segmentation.Proceedings of Medical Image[J]. Computing and Computer Aided Intervention,2006:831-838.

[4]Kapur T,Grimson W E,Wells W M,et al.Segmentation of brain tissue from magnetic resonance images [J].Medical Image Analysis,1996,1(2):109-127.

[5]Piovano J,Rousson M,Papadopoula T.Efficient segmentation of piecewise smooth image[J].SSVM,2007:709-720.

[6]Shi F,Fan Y,Tang S,et al.Neonatal brain image segmentation in longitudinal MRl studies[J].Neurvlmage,2010,49(1):391-400.

[7]陈志彬,邱天爽,Ruan S,一种基于FCM和Level Set的MRI医学图像分割方法[J].电子学报,2008,36(9):1733-1736.

[8]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解 [M].北京:清华大学出版社,2013.

[9]刘维.精通Matlab与C/C++混合程序设计[M].第4版.北京:北京航空航天大学出版社,2015.

[10]明日科技.Visual C++从入门到精通[M].第3版.北京:清华大学出版社,2012.

[11]Wang L,Li C,Sun Q,et al,Active contours driven by local and global intensity fitting energy with application to brain MR images segmentation[J].Computerized Medical Imaging and Graphics,October 2009,33(7):520-531.

[12]Wang L,Chen Y,Pan X,et al.Level set segmentation of brain magnetic resonance images based on local Gaussian distribution fitting energy [J].Journal of Neuroscience Methods,2010,188(2):316-325.

[13]霍斯特曼,科内尔.Java核心技术 卷II高级特性[M].陈昊鹏,译.北京:机械工业出版社,2014.

[14]李东博.HTML5+CSS3从入门到精通[M].北京:清华大学出版社,2013.

[15]李宁,刘岩,张国平.Java Web编程实战宝典:JSP+Servlet +Struts 2+Hibernate+Spring+Ajax[M].北京:清华大学出版社,2014.

[16]王坤.基于SVPWM的STATCOM设计及实现[J].陕西电力,2011(1):11-15.

[17]朱向东,呼延霄,刘轶,等.基于Matlab/dSPACE的无刷直流电机双闭环控制实时仿真[J].火箭推进,2015(1):117.

Design and implementation of network API based on image segmentation

FENG Chun-yu1,ZHAO Jian2,ZHAO Yao3
(1.Applied Mathematics Research Institute of Hebei Academy of Science,Shijiazhuang 050081,China;2.Hebei Normal University,Shijiazhuang 050024,China;3.The People’s Bank of China Shijiazhuang Central Sub-Branch,Shijiazhuang 050000,China)

Auto-segment of ventricle through image segmentation algorithm and calculating its area,which can make up the subjectivity and limitation of artificial diagnosis and provide move objective and comprehensive decision support for clinic treatment.Besides,through network API,the complicate algorithm can be run on server,and the user can get what they want by simple operation in web browser.So,this way is not only convenient and efficient,but also low hardware resource requirement.

image segmentation;network API;auxiliary diagnosis;JNI

TN919.8

A

1674-6236(2016)24-0169-04

2015-11-16 稿件编号:201512179

冯春雨(1982—),男,河北邢台人,硕士,助理研究员。研究方向:机器学习,信息安全及图像处理。

猜你喜欢
编译器调用石家庄
石家庄晓进机械制造科技有限公司
基于相异编译器的安全计算机平台交叉编译环境设计
核电项目物项调用管理的应用研究
梁丛
基于系统调用的恶意软件检测技术研究
Microchip为MPLAB XC系列专业版编译器推出低成本可续订包月许可证
通用NC代码编译器的设计与实现
利用RFC技术实现SAP系统接口通信
石家庄衡水商会
基于ARM嵌入式平台的x86译码SOC架构设计