馮春雨,趙 建,趙 耀
(1.河北省科學院應用數(shù)學研究所 河北 石家莊050081;2.河北師范大學 河北 石家莊050024;3.中國人民銀行石家莊中心支行 河北 石家莊050000)
基于圖像分割的網(wǎng)絡API設計與實現(xiàn)
馮春雨1,趙 建2,趙 耀3
(1.河北省科學院應用數(shù)學研究所 河北 石家莊050081;2.河北師范大學 河北 石家莊050024;3.中國人民銀行石家莊中心支行 河北 石家莊050000)
通過圖像分割算法在腦圖像中自動分割出腦室并計算腦室面積,可以彌補人工診斷的主觀性和局限性,為臨床診療提供了更加客觀、全面的決策支持。另外,通過網(wǎng)絡API的形式提供服務,復雜的算法運算在服務器端完成,使用者只需在瀏覽器中進行簡單的操作就可獲得想要的結(jié)果。此方法不僅方便快捷,同時還大大降低對硬件資源的要求。
圖像分割;網(wǎng)絡API;輔助診斷;JAVA本地接口
近年來,腦部疾病以其高發(fā)病率、高死亡率、高致殘率、高復發(fā)率及多并發(fā)癥等特點成為威脅人類健康的重要因素。據(jù)報道,我國每年有超過200多萬人發(fā)生腦疾,其中我國每年死于腦疾病患者約有100萬以上,腦疾病病死率約為45%。因而,如何借助于醫(yī)學影像檢查,定性和定量地分析腦組織,進而分析與腦疾病的關系已經(jīng)成為當前的研究熱點。
核磁共振成像(MRI)是對腦部疾病進行診斷的重要手段[1]。由于大腦結(jié)構(gòu)的復雜性和個體差異性,準確地在MRI顱腦圖像中測量感興趣的腦組織是一項極為復雜和困難的任務。過去,定量化的測量腦組織尚不精確,病情診斷方面往往依賴醫(yī)生的經(jīng)驗。隨著計算機的應用與發(fā)展,醫(yī)院管理信息化和智能化水平的不斷提高,醫(yī)院信息系統(tǒng)在醫(yī)學圖像的管理、分析和輔助醫(yī)生診斷中發(fā)揮著不可替代的作用[2]。
本論文中通過前期改良的圖像分割算法在腦圖像中自動分割出腦室并計算腦室面積,可以彌補人工診斷的主觀性和局限性,為臨床診療提供了更加客觀、全面的決策支持。另外,通過網(wǎng)絡API的形式提供服務,復雜的算法運算在服務器端完成,使用者只需在瀏覽器中進行簡單的操作就可獲得想要的結(jié)果。此方法不僅方便快捷,同時還大大降低對硬件資源的要求。
因圖像分割算法涉及許多復雜的數(shù)學運算[3-7],如果采用常用的編程語言(C/C++、Java等)實現(xiàn)的話編程工作量將非常巨大。Matlab是面向科學計算的常用軟件,具有高效的數(shù)值計算及符號計算功能,且語法特征與C++語言極為相似,簡單易用[8]。使用Matlab可以輕松完成一些繁雜的數(shù)學運算,因此對于一些復雜的算法可以先通過Matlab實現(xiàn),然后被其它編程語言調(diào)用。在C程序中調(diào)用Matlab程序有兩種方式[9-10]。第一種是C程序直接調(diào)用Matlab引擎,第二種是將Matlab程序打包成動態(tài)鏈接庫文件(DLL)在C語言環(huán)境下調(diào)用。兩種方式各有優(yōu)缺點,本文中采用第二種方式。首先利用Matlab實現(xiàn)圖像分割算法[11-12],然后將Matlab程序編譯成C可調(diào)用的Dll,編寫C接口及數(shù)據(jù)轉(zhuǎn)換程序并打包成DLL,最后通過JNI調(diào)用C編譯生成的DLL完成網(wǎng)絡API的設計[13]。
文中實驗中使用的計算機主要配置為 intel i7-3770 CPU,內(nèi)存大小4G,硬盤空間500G。操作系統(tǒng)為Window XP,C編譯器使用VC++6.0,Matlab使用 Matlab9.0 32位版本,Java環(huán)境使用 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文件。
1)在Matlab的command window里面輸入mex–setup,Matlab詢問是否定位計算機上安裝的編譯器,輸入y,Matlab會列出所有電腦上所有的編譯器,這里選擇2,即VC++6.0,如圖1所示。
圖1 選擇編譯器
2)選擇build工具。完成以上步驟后,輸入mbuild-setup,選擇build工具,過程跟上一步類似,結(jié)果見圖2。
圖2 選擇build工具
在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函數(shù)的名字。詳細說明可在Matlab命令窗口敲入help mcc或mcc-?查看幫助。
Matlab完成指令運行后,在Matlab工程目錄下面會出現(xiàn)多個文件,其中對我們來說有用的是LGD.cpp,LGD.dll,LGD.h和LGD.lib這4個文件。LGD.dll是編譯好的動態(tài)鏈接庫,實現(xiàn)圖像分割的函數(shù)封裝在個文件里面,LGD.h是對應的頭文件,在C里面調(diào)用這個函數(shù)的時候,需要include這個頭文件,在這個頭文件的最后,你可以看到下面的內(nèi)容:
這就是Demo_LGD的C函數(shù)的聲明。nargout表示輸出變量的個數(shù)area1,area2,infile,outfile,X,Y,InforDef,Compress對應m函數(shù)的幾個變量。注意,除nargout外其它變量的類型都是mwArray。mwArray是一個類,是Matlab提供的一個特殊的變量類型。C程序調(diào)用Matlab程序時需進行數(shù)據(jù)類型轉(zhuǎn)換,這些內(nèi)容會在第6節(jié)中提到。
為了在C程序能夠調(diào)用上一節(jié)生成的dll和lib文件,支持Java編譯(JNI用到),需對VC環(huán)境進行設置,具體步驟如下:
1)打開VC程序并建立一個動態(tài)鏈接庫工程,這里起名為MRISegment,將上面生成的LGD.cpp,LGD.dll,LGD.h和LGD.lib 4個文件拷貝到工程目錄下。
2)在tool-option-directory里面設置include頭文件和lib的路徑。首先是include中添加Matlab和JAVA頭文件的路徑,如圖3最下面3行所示,根據(jù)具體情況選擇Matlab和JDK軟件的安裝目錄。
圖3 添加頭文件路徑
然后添加lib的位置,不僅需要添加Matlab靜態(tài)庫的位置,而且也要把剛編譯生成的lib位置添加進來,如圖4最后兩行所示。
圖4 添加鏈接庫文件路徑
3)添加所需lib文件。路徑設置好后,在project Settinglink-Object/library modules里面加入 mclmcrrt.lib、libmx.lib、libmat.lib、mclmcr.lib和LGD.lib 4個文件,文件名之間用空格隔開,如圖5所示。
圖5 添加鏈接庫文件
如果網(wǎng)站管理后臺采用C語言編寫,可以直接調(diào)用Matlab打包生成的DLL。如果使用Java語言編寫,則無法直接調(diào)用Matlab打包生成的DLL,可以采用JNI(Java Native Interface)形式快速有效的完成程序間的調(diào)用[14-15]。本節(jié)簡單介紹通過JNI調(diào)用算法DLL的流程。
1)新建一個txt文件,起名為MRISegment,將后綴名改為java,該文件主要定義一個java類實現(xiàn)對調(diào)用函數(shù)的封裝。內(nèi)容如下:
2)生成class文件。調(diào)出命令行程序,將路徑設置為上面所建java文件所在路徑(或者下一步javac命令中文件帶有絕對路徑)[16],輸入javac MRISegment.java,生成MRISegment. class文件。
3)生成h文件。將路徑設置為MRISegment.class文件所在路徑(或者下一步javah命令中文件帶有絕對路徑),輸入javah-jni MRISegment,生成MRISegment.h文件,并將該文件拷貝到MRISegment工程目錄下。
4)編譯生成C動態(tài)鏈接庫。首先在MRISegment工程中新建cpp文件。該cpp主要實現(xiàn)Java和C之間、C和Matlab之間數(shù)據(jù)格式的轉(zhuǎn)換以及MRISegment.h文件中定義的函數(shù)[17]。編譯工程生成MRISegment.dll。
前臺頁面主要負責圖像的顯示以及坐標點、參數(shù)的輸入以及處理后圖像的呈現(xiàn),數(shù)據(jù)提交到后臺調(diào)用第六節(jié)中生成的MRISegment.dll。圖像處理完畢后將結(jié)果返回給前臺頁面。圖6~8為實現(xiàn)過程的頁面截圖。
圖6 加載圖像
圖7 選擇目標區(qū)域
圖8 結(jié)果顯示
文中通過計算機自動分割出腦室并計算腦室面積,一定程度上彌補了人工診斷的主觀性和局限性。另外,以網(wǎng)絡API的形式為醫(yī)務人員提供服務,使用人員不需購置昂貴的設備,可以通過任何一個帶有網(wǎng)絡的普通PC或者移動設備隨時隨地獲取服務,既方便快捷又大大節(jié)省了使用方的費用。因此,該方式具有較高的商業(yè)價值,可在縣級以上醫(yī)療機構(gòu)大面積推廣,產(chǎn)生較好的經(jīng)濟效益。
[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,F(xiàn)an 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醫(yī)學圖像分割方法[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]霍斯特曼,科內(nèi)爾.Java核心技術 卷II高級特性[M].陳昊鵬,譯.北京:機械工業(yè)出版社,2014.
[14]李東博.HTML5+CSS3從入門到精通[M].北京:清華大學出版社,2013.
[15]李寧,劉巖,張國平.Java Web編程實戰(zhàn)寶典:JSP+Servlet +Struts 2+Hibernate+Spring+Ajax[M].北京:清華大學出版社,2014.
[16]王坤.基于SVPWM的STATCOM設計及實現(xiàn)[J].陜西電力,2011(1):11-15.
[17]朱向東,呼延霄,劉軼,等.基于Matlab/dSPACE的無刷直流電機雙閉環(huán)控制實時仿真[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—),男,河北邢臺人,碩士,助理研究員。研究方向:機器學習,信息安全及圖像處理。