劉 洋 史森中
(陸軍軍醫(yī)大學(xué)大坪醫(yī)院野戰(zhàn)外科研究所信息科 重慶 400042)
醫(yī)學(xué)影像存儲與傳輸系統(tǒng)(Pictures Archiving and Communication System,PACS)是通過計算機(jī)軟硬件設(shè)備以及高速寬帶網(wǎng)絡(luò)將醫(yī)院CT、X光檢查、B超、核磁共振等影像診斷結(jié)果及相關(guān)信息連接起來,實(shí)現(xiàn)醫(yī)學(xué)影像信息的共享、查詢、調(diào)閱、輔助診斷等功能。有助于醫(yī)院提高工作效率以及實(shí)現(xiàn)無膠片化管理,為綜合發(fā)揮各類影像檢查手段的功能提供廣闊空間[1]。但是PACS主要運(yùn)行在醫(yī)院有線局域網(wǎng)的臺式計算機(jī)環(huán)境中,醫(yī)生若離開其辦公室無法檢索查看所需信息。為解決以上問題,開發(fā)一款能在移動網(wǎng)環(huán)境中通過智能手機(jī)或平板電腦進(jìn)行操作的移動醫(yī)學(xué)影像信息系統(tǒng)軟件,無線連接PACS獲取圖像,不再受操作場地的限制,方便醫(yī)生對患者所需醫(yī)療影像信息進(jìn)行檢索與瀏覽診斷,顯得非常重要。
近年來移動智能設(shè)備以及通訊技術(shù)發(fā)展迅速,移動智能手機(jī)用戶日益增多,人們隨時隨地使用智能手機(jī)及平板電腦進(jìn)行移動辦公,促使PACS突破物理線路的限制,實(shí)現(xiàn)在智能移動終端進(jìn)行醫(yī)學(xué)圖像的查詢、傳輸、瀏覽、遠(yuǎn)程診斷[2]。目前各大移動智能通訊設(shè)備平臺安卓(Android)平臺占有率較高,作為開放平臺在廠家生產(chǎn)移動設(shè)備時大部分都選擇平臺。其具備較為優(yōu)秀的交互界面以及交互邏輯,獲得用戶青睞[3],同時其較為開放的特性給予開發(fā)者更多的資源,平臺中應(yīng)用程序數(shù)量逐年增加[4]。因此本文旨在設(shè)計一款基于Android的平臺軟件,在不影響醫(yī)院已有PACS的情況下實(shí)現(xiàn)與PACS服務(wù)器無線互聯(lián)并下載文件以及對文件進(jìn)行解析,將屬性及圖像信息提取并顯示,為醫(yī)生和患者提供比較方便快捷的醫(yī)學(xué)影像查看方式。
主要為醫(yī)師診斷和分析患者影像醫(yī)學(xué)結(jié)果提供幫助。按其功能主要分為3個部分:患者信息管理、配置Ip與Port、患者篩選查詢。該模塊實(shí)現(xiàn)患者信息管理與維護(hù),對于已存在于PACS服務(wù)器內(nèi)的患者資訊可進(jìn)行查詢、檢索、篩選以及刪除操作。若需查詢相應(yīng)患者信息,如身份、入院時間、檢查部位、相應(yīng)設(shè)備等,僅需向PACS服務(wù)器中輸入統(tǒng)一的資源定位符,PACS 按照 WADO標(biāo)準(zhǔn)文件進(jìn)行查詢,獲取查詢的目標(biāo)文件。服務(wù)器地址配置PACS Server 的域名,端口號,使軟件與服務(wù)端連接,為查詢服務(wù)做準(zhǔn)備。該模塊實(shí)現(xiàn)流程,見圖1。首先查詢本地訊息,若無法查詢則需調(diào)整終端端口ID號、相應(yīng)名稱、對應(yīng)服務(wù)器等關(guān)鍵配置文件。在完成以上配置后進(jìn)入查詢界面,輸入患者信息進(jìn)行檢索,如ID號、入院號、姓名、體檢部位及設(shè)備等關(guān)鍵詞。然后從列表中下載查詢到的所需內(nèi)容到本地存放。最后返回本地列表,選擇并顯示已下載的內(nèi)容。具體實(shí)現(xiàn)過程如下:設(shè)計3各醫(yī)師所需交互界面。從左至右依次為ListView控件頁面、查詢檢索控件頁面、所需數(shù)據(jù)資料保存頁面;完成檢索篩選后,點(diǎn)擊所需具體項(xiàng)目,此時進(jìn)入醫(yī)學(xué)數(shù)字影像和通訊的國際標(biāo)準(zhǔn)(Digital Imaging and Communications in Medicine,DICOM)文件瀏覽界面;若無法準(zhǔn)確篩選所需患者數(shù)據(jù)則需重新配置用戶界面數(shù)據(jù)庫及篩選條件數(shù)據(jù)庫文件,直到能實(shí)現(xiàn)準(zhǔn)確篩選患者信息時對配置文件進(jìn)行保存。

圖1 移動PACS軟件患者信息管理模塊流程
為獲取數(shù)據(jù)寫入權(quán)限以及智能設(shè)備無線訪問PACS服務(wù)器的權(quán)限,需通過AndroidManifest.xml配置文件進(jìn)行權(quán)限配置。部分代碼如下:
讀取數(shù)據(jù)權(quán)限
Android:name="android.permission.READ_EXTERNAL_STORAGE"/> 創(chuàng)建及刪除文件權(quán)限: android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 通過智能手機(jī)寫入數(shù)據(jù)權(quán)限: android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 無線訪問PACS服務(wù)器權(quán)限: 該模塊需在上述3個界面間相互切換,采用ViewPager 控件。ViewPager是在android.support. v4.jar 中的控件,android.support.v4.jar 庫設(shè)計為An droid7.2(API 等級4)和更高版本的使用。它包括最大應(yīng)用編程接口(Application Programming Interface,API)集,用于獲取處理數(shù)據(jù)、網(wǎng)絡(luò)連接和編程公用事業(yè)支持應(yīng)用組件的用戶界面。完成 ViewPager控件的主要代碼如下: List mViewPager=(ViewPager)findViewById(R.id.vPa ger); 實(shí)例化viewList對象: viewList = new ArrayList 布局填充器創(chuàng)建: LayoutInflater mInflater = getLayoutInflater(); 向 viewlist 中添加 View 對象: viewList.add(mInflater.inflate(R.layout.filepage, null)); ........... 設(shè)置ViewPager初始頁面為第3個頁面: mViewPager.setCurrentItem(2); 添加適配器到ViewPager中: mViewPager.setAdapter(new MyPagerAdapter(viewList)); 在適配器ViewPager中實(shí)現(xiàn) instantiateItem方法: public Object instantiateItem(View container, int position) { // TODO Auto-generated method stub ((ViewPager)container).addView(mListViews.get(position), 0); return mListViews.get(position); } 采用ListView控件完成患者清單文件數(shù)據(jù)的本地頁面顯示,該控件采用的適配器設(shè)計具有降低資源功耗從而提高設(shè)備效率。該模塊設(shè)計的重點(diǎn)在于如何實(shí)現(xiàn)手機(jī)APP接口與PACS接口的互聯(lián),將PACS服務(wù)器內(nèi)的數(shù)據(jù)加載到智能手機(jī)APP中。概括而言是將路徑 filePath (端口號、IP等所匯集而成的字符串)封裝成 URL后訪問PACS服務(wù)器,以此下載PACS服務(wù)器內(nèi)的數(shù)據(jù)文件。主要代碼如下: 將路徑filePath封裝成URL: URL filePath=new URL(filepath); 建立與PACS服務(wù)器的鏈接通道: HttpURLConnection fileConn=(HttpURLConnection) filepath.openConnection(); fileConn. setConnectTimeout(5000); 設(shè)置請求連接時間,大于這個時間連接失敗; 設(shè)置請求方式,因下載文件需用GET方法: fileConn. setRequestMethod("GET"); 獲得數(shù)據(jù)流: InputStream ins = fileConn. getInputStream(); DICOM中的內(nèi)容主要包括圖像和文本數(shù)據(jù),而移動PACS軟件文本信息提取模塊主要是將DICOM中的圖像數(shù)據(jù)進(jìn)行采集并且成像,對其文本數(shù)據(jù)實(shí)現(xiàn)提取、編輯并保存等操作功能。通過Java本地接口(Java Native Interface,JNI)調(diào)用由C++語言編寫的本地方法。這個過程概括而言是對圖像以及文本進(jìn)行讀取,細(xì)分為顯式與隱式讀取,根據(jù)圖像采樣器(VR)數(shù)值來確定數(shù)據(jù)的表示方法以及獲取數(shù)據(jù)的大小和長度,最后將這種數(shù)據(jù)進(jìn)行標(biāo)記與轉(zhuǎn)換。在隱式情況下對圖像采樣器的數(shù)據(jù)進(jìn)行確認(rèn)后再讀取,而顯性情況下則基于Android平臺醫(yī)學(xué)影像閱片軟件設(shè)計的數(shù)據(jù)類型和長度直接讀取。在DICOM中對患者的信息數(shù)據(jù)是通過全球唯一且明確的身份證明標(biāo)識來辨識。通過在信息模型中創(chuàng)建3個圖像數(shù)據(jù)結(jié)構(gòu)圖像層結(jié)構(gòu)體(Patient、Study、Series)來存儲患者、研究以及序列的文本信息。這樣的結(jié)構(gòu)具備存儲所有文本信息的屬性,其結(jié)構(gòu)體定義如下: typedef struct InfoData{ int patientId; int seriesTime; …… } InfoData; 將DicomConverter 實(shí)例中的相關(guān)文本信息獲取并將值傳遞給InfoData 結(jié)構(gòu)體對象,然后返回這個結(jié)構(gòu)體對象。部分代碼如下: public InfoData getInfoData (DicomConverter dc){ InfoData infoData = new InfoData(); infoData. patientId = dc.getPatientID; …… }。 PACS數(shù)據(jù)的顯示與傳統(tǒng)圖像數(shù)據(jù)一樣,主要是由圖像像素以及長寬進(jìn)行表現(xiàn)。而不同的醫(yī)學(xué)影像設(shè)備所采集到的影像數(shù)據(jù)模型并不相同,需將這些原始圖像數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一標(biāo)準(zhǔn)的圖像數(shù)據(jù)字符后進(jìn)行無線傳輸,傳輸過程中以1或0兩個字符來表示圖像像素。傳統(tǒng)PACS顯示器與智能手機(jī)顯示器的分辨率完全不同,需進(jìn)行圖像窗口調(diào)整,設(shè)計能夠在智能手機(jī)上進(jìn)行窗口調(diào)節(jié)的醫(yī)學(xué)標(biāo)準(zhǔn)數(shù)據(jù)影像圖像,對于低1 250灰度的影像像素用0來表示并顯示成黑色,對于1 500灰度以上像素的則以255來表示并顯示成白色,而介于1 250~1 500灰度的像素則以x=255y/2 047(x為普通顯示器灰度,y為智能手機(jī)屏幕灰度值)來表示,根據(jù)不同顯示器窗口位置以及寬高度來調(diào)整窗位。如肌肉與骨骼所呈現(xiàn)的灰度完全不同,利用窗口位置的大小及寬度來重點(diǎn)顯示所需查閱的病患部位會得到更加明確的效果。部分代碼如下: BitmapFactory.Options options = new Options(); 圖像防抖處理: options. inDither = false; 設(shè)置最佳解碼器方式: options. inPreferredConfig = null; options. inSampleSize=10; Bitmap bitmap = ……. ); imageView. setImageBitmap(bitmap); 首先測試對文件夾遍歷,將遍歷到的dcm格式文件添加到ListView中,點(diǎn)擊該文件后將顯示文件內(nèi)容。有兩種不同格式文件,軟件在遍歷時只將dcm格式文件加載到ListView列表中,其他格式并未加載,符合設(shè)計要求[5]。通過點(diǎn)擊 ListView 中的9.dcm,測試是否可以加載,載入圖片的瀏覽界面。從測試看出影像資料可以正常加載,在打開文件的最初階段圖像顯示的窗位是中間值[6],窗寬是最大值,說明通過JNI 調(diào)用本文件將數(shù)據(jù)傳送給java端獲得成功[7],設(shè)計符合需求。顯示區(qū)位于頁面中心,用于顯示二維切片影像及三維體繪制結(jié)果[8]。畫布左上角顯示的是鼠標(biāo)在畫布中移動的位置坐標(biāo)、當(dāng)前坐標(biāo)的標(biāo)量值和影像的相關(guān)信息、參數(shù)。這些都是醫(yī)生在使用醫(yī)學(xué)影像可視化軟件過程中所關(guān)心的一些數(shù)據(jù)。顯示區(qū)上方以及右方為系統(tǒng)功能區(qū),提供圖像請求及在智能手機(jī)上的交互顯示功能[9]。 本研究基于Android平臺開發(fā)以DICOM為標(biāo)準(zhǔn)的移動手機(jī)醫(yī)學(xué)影像操作軟件,極大地拓展PACS的應(yīng)用環(huán)境。通過各類無線傳輸方式實(shí)現(xiàn)智能手機(jī)的無線網(wǎng)絡(luò)連接功能,提取醫(yī)院PACS中心服務(wù)器內(nèi)的醫(yī)學(xué)影像數(shù)據(jù)資料,通過該軟件實(shí)現(xiàn)影像資料的查詢、瀏覽以及處理。PACS訪問不再受時間和地域的限制,醫(yī)生隨時隨地獲取醫(yī)學(xué)影像信息,提高診療工作中醫(yī)學(xué)影像的能力與效率[10]。此外移動PACS軟件作為輔助工具將受到越來越多健康醫(yī)療機(jī)構(gòu)的關(guān)注。在后續(xù)的研究工作中將考慮通過智能移動設(shè)備的移動芯片模塊GSM/GPRS或CDMA進(jìn)行影像數(shù)據(jù)傳輸,將應(yīng)用層完全從網(wǎng)絡(luò)層分離出來,這就能夠完全適應(yīng)將來的移動5G網(wǎng)絡(luò)[10],具有極大的發(fā)展?jié)摿σ约皩?shí)用價值。2.3 文本信息提取模塊
2.4 圖像顯示模塊
2.5 移動PACS軟件功能測試
3 結(jié)語
——以西太平洋地區(qū)醫(yī)學(xué)索引為例*