韋偉+朱俊+陳琳琳+劉偉
目前國內(nèi)X光機(jī)成像急需數(shù)字化改造,構(gòu)建成數(shù)字化醫(yī)院。針對這一問題,在VC++.net架構(gòu)上,設(shè)計和實現(xiàn)了一整套數(shù)字化醫(yī)院PACS操作軟件。主要包括建立管理數(shù)據(jù)庫,通過以太網(wǎng)方式采集圖像并轉(zhuǎn)換成DICOM3.0格式,對圖像進(jìn)行增強(qiáng)處理及膠片和報告的打印等內(nèi)容。通過現(xiàn)場的聯(lián)合調(diào)試,性能良好,滿足了醫(yī)院的實際使用需求。
【關(guān)鍵詞】PACS 以太網(wǎng)傳輸 DICOM圖像 圖像增強(qiáng) 膠片打印
1 引言
PACS(Picture Archiving and Communication Systems,影像歸檔和通信系統(tǒng))是數(shù)字化醫(yī)院的重要硬件支撐,包括獲取圖像、圖像管理、圖像處理、圖像歸檔等內(nèi)容。該系統(tǒng)起源于美國陸軍的遠(yuǎn)程放射診斷系統(tǒng)項目。隨后,美國及歐洲、日本的很多科研機(jī)構(gòu)開始研究商業(yè) PACS 系統(tǒng)。目前,西門子公司生產(chǎn)的 PACS 系統(tǒng)比較著名,在很多歐美國家使用。在我國,研究開發(fā) PACS 系統(tǒng)比較晚,到目前為止,只有一些大型醫(yī)療機(jī)構(gòu)使用 PACS 系統(tǒng),其規(guī)模較小,即為小型化、迷你化的 PACS 系統(tǒng)。主要原因是PACS 系統(tǒng)價格昂貴、遠(yuǎn)程醫(yī)療不發(fā)達(dá)、標(biāo)準(zhǔn)化程度不高等。我國生產(chǎn) PACS 系統(tǒng)的廠家較少,主要有中聯(lián)醫(yī)學(xué)圖像系統(tǒng)、永安科技和東軟系統(tǒng)。目前國內(nèi)的一些大醫(yī)院逐步淘汰模擬X射線機(jī)和普通的暗室洗片,而開始使用數(shù)字化DR攝影設(shè)備,結(jié)合數(shù)字化網(wǎng)絡(luò),組成醫(yī)療診斷系統(tǒng),所以PACS系統(tǒng)的研究和開發(fā)具有十分重要的現(xiàn)實意義。
2 系統(tǒng)工作原理
PACS是一套可用于X光機(jī)成像的軟件系統(tǒng),其主要功能是采集和保存X光機(jī)所拍攝的海量醫(yī)學(xué)圖像,通過圖像加密技術(shù)并對圖像進(jìn)行處理,提供病理信息和診斷依據(jù),可在授權(quán)的情況下通過外部接口進(jìn)行圖像的傳輸,醫(yī)生及專家在授權(quán)情況下進(jìn)行查看 PACS 系統(tǒng)中的圖像信息,進(jìn)行診斷。
3 系統(tǒng)軟件設(shè)計
本系統(tǒng)以Visual Studio.Net 為框架,以模塊化和嵌入式為技術(shù)指導(dǎo)思想,以SQL Server、Quartus為開發(fā)工具,完成了一個PACS完整系統(tǒng)的實際開發(fā)。本系統(tǒng)組成如圖1所示。
3.1 病人信息登記
信息登記是將病人的姓名、ID號、年齡、性別及注冊日期等基本信息錄入到醫(yī)院的PACS系統(tǒng)中統(tǒng)一管理。本系統(tǒng)采用SQL Server 2005作為數(shù)據(jù)庫引擎,在SQL Server的環(huán)境下編寫數(shù)據(jù)庫文件,創(chuàng)建數(shù)據(jù)庫。設(shè)置主數(shù)據(jù)文件名稱(PatientManager)及其初始大小、增長最大值及增長率。設(shè)置日志文件文件名及其初始大小和增長值。創(chuàng)建含有病人基本信息的數(shù)據(jù)表、病人圖像數(shù)據(jù)表格(包括圖像拍攝大小、保存路徑及生成日期等)、病人診斷報告信息表(包括病人ID、病情及診斷記錄等信息)。
在VS系統(tǒng)中編寫對話界面,輸入病人的ID、姓名、年齡等個人信息,并將這些信息錄入到創(chuàng)建的數(shù)據(jù)庫中。MFC訪問數(shù)據(jù)庫常用的技術(shù)是ADO,它提供了訪問對象鏈接和嵌入數(shù)據(jù)庫的應(yīng)用程序編程接口。VC++.net為開發(fā)ADO應(yīng)用程序提供了動態(tài)連接庫。使用前先導(dǎo)入ADO類型庫,在stdafx. h 文件里直接使用#import引入,#import " C: Program Files Common Files Systemado msado15. dll"之后調(diào)用CoInitialize進(jìn)行OLE/COM數(shù)據(jù)庫初始化,聲明一個指向Connection對象的指針,創(chuàng)建對象的實例并連接數(shù)據(jù)庫,創(chuàng)建記錄集。
CoInitialize(NULL);//初始化OLE/COM庫環(huán)境
pConn.CreateInstance("ADODB.Connection");//初始化Connection指針
pRst.CreateInstance("ADODB.Recordset");//初始化Recordset指針
pConn->ConnectionString = (_bstr_t)GetConnectionStr();//數(shù)據(jù)庫的連接字符串
pConn->Open("","","",adConnectUnspecified);//打開數(shù)據(jù)庫連接
通過病人信息輸入對話框,讀取病人的基本信息,并將這些信息存入結(jié)構(gòu)體iSqlSentence中。病人的信息輸入后調(diào)用pConn->Execute((_bstr_t)iSqlSentence,NULL,adCmdText); 將信息存入數(shù)據(jù)庫中。
3.2 圖像獲取
PACS系統(tǒng)和高壓發(fā)生器配合,接收高壓發(fā)生器傳輸?shù)腒V、mAs、劑量水平及曝光時間信號,在軟件里設(shè)置曝光時間,再接收高壓發(fā)生器的外觸發(fā)信號后進(jìn)行觸發(fā)曝光成像。PACS系統(tǒng)采用CCD作為圖像探測傳感器,采用碘化銫(CsI)作為DR探測器的主要閃爍材料,經(jīng)過X射線曝光后,將X射線光子轉(zhuǎn)換為可見光,再由CCD探測器變?yōu)閳D像電信號,最后獲得數(shù)字圖像。本系統(tǒng)所采用的CCD為柯達(dá)公司的KAF16803高分辨率圖像探測器,在輸出屏后端配有聚焦光學(xué)鏡頭成像,再輸入計算機(jī)進(jìn)行圖像處理。KAF16803是一款單輸出的高性能全幀型CCD圖像傳感器,有效分辨率為4096×4096,像元數(shù)量為16M,最小像素尺寸為9um×9um,兩相驅(qū)動讀出,最大支持10MHz的采樣頻率,實現(xiàn)高速高分辨率成像。AD轉(zhuǎn)換芯片是AD9824,片內(nèi)含有最高30MS/s相關(guān)雙采樣電路(CDS),并且可以編程控制其內(nèi)部增益放大器。KAF16803行列像素轉(zhuǎn)移所需要的驅(qū)動信號,AD轉(zhuǎn)換及鎖存信號由FPGA在Quartus環(huán)境下采用Verilog語言變成用狀態(tài)機(jī)的方法實現(xiàn)。這些信號通過電壓轉(zhuǎn)換(LM317/LM337)和脈沖驅(qū)動芯片(DS0026)經(jīng)過調(diào)整后加載到各自元件上。
CCD探測器與采集計算機(jī)通過千兆以太網(wǎng)進(jìn)行連接,采用MAC加PHY芯片的結(jié)構(gòu)組成千兆以太網(wǎng)傳輸模塊。具體采用AX88180作為數(shù)據(jù)鏈路層MAC控制器,采用88E1111作為自適應(yīng)物理層傳輸芯片。AX88180及88E1111的編程通過在FPGA中建立NIOS II軟核來實現(xiàn)。首先用Verilog語言編寫AX88180基于NIOS II總線(Avalon)接口的IP內(nèi)核,然后編程對AX88180內(nèi)置256字節(jié)的配置寄存器進(jìn)行配置初始化,參考亞信電子相關(guān)資料進(jìn)行初始化編程。采用Verilog語言編寫高效率的HDL語言封包程序。封包程序參考TCP/IP協(xié)議。為了滿足程序良好的兼容性,便于移植,PC端軟件采用Wincap類庫編寫程序來捕獲網(wǎng)絡(luò)數(shù)據(jù)包。圖像采集流程圖2所示。
3.3 圖像保存
16M像素所生成的圖像裸數(shù)據(jù)為32Mbyte,為了統(tǒng)一標(biāo)準(zhǔn),實現(xiàn)信息共享,需要將裸數(shù)據(jù)轉(zhuǎn)為DICOM標(biāo)準(zhǔn)格式。DICOM格式完整的定義了醫(yī)學(xué)影像及相關(guān)信息的消息格式及傳輸機(jī)制,使得影像信息在醫(yī)學(xué)設(shè)備間的交換更加有效。DICOM標(biāo)準(zhǔn)也一直在完善中,本系統(tǒng)的3.0版本,文件后綴為.DCM。DICOM實際上是一種文件封裝方式,一般由DICOM文件元信息和描述DICOM SOP類實例的數(shù)據(jù)集合而成。每個DICOM文件都有兩部分組成:頭文件信息和數(shù)據(jù)集。DICOM文件頭包含了數(shù)據(jù)集合的相關(guān)信息,包括文件的SOP、UID及傳輸格式等。數(shù)據(jù)集放在頭文件之后,代表了一個SOP(Service-Object Pair)實例,主要包括醫(yī)學(xué)圖像以及許多和醫(yī)學(xué)圖像有關(guān)的信息,如病人姓名、圖像大小等。文件頭元素采用顯示格式(Explicit VR)編碼,各個數(shù)據(jù)元素的排列按照標(biāo)簽數(shù)值從小到大的傳輸格式編碼。標(biāo)簽是一個4字節(jié)的無符號整數(shù),它被人為地分為兩個部分: 組號(高位2字節(jié))和元素號(低位2字節(jié))。
由于DICOM標(biāo)準(zhǔn)內(nèi)容較多,涉及到多種圖像壓縮,開發(fā)時可以借鑒專業(yè)的DCMTK開發(fā)包,進(jìn)行二次開發(fā)。DCMTK是一個遵循DICOM標(biāo)準(zhǔn)的公開源代碼的專業(yè)開發(fā)包,利用其自帶的庫可以實現(xiàn)DICOM應(yīng)用。二次開發(fā)時用到的DCMTK開發(fā)包里的庫主要有dcmdata.lib、dcmimage.lib、dcmimgle.lib等相關(guān)庫。
DCMTK開發(fā)包里DcmItem類中定義的putAndInsertString()函數(shù)創(chuàng)建一個DICOM dataset數(shù)據(jù)集,根據(jù)標(biāo)簽,寫入頭文件的信息。
部分代碼如:
DcmDataset *dataset = fileformat.getDataset();
dataset –>putAndInsertString(DcmTagKey(0x0002, 0x0002),UID_RawDataStorage);
dataset –>putAndInsertString(DcmTagKey(0x0002, 0x0003),dcmGenerateUniqueIdentifier(uid,SITE_INSTANCE_UID_ROOT));
調(diào)用DcmItem類函數(shù)編寫void GenerateHead(DcmDataset * dataset,intwidth,int height)將病人的信息寫入到頭文件中。編寫DICOM文件存儲函數(shù)voidSaveDicom(CStringpathName,intwidth,intheight,unsigned short* buf,boolbIsJpegCompressed),其中pathName為保存文件名,width 和height分別為CCD探測器行列像素大小,指針buf為32Mbyte圖像數(shù)字量信息的首地址,bIsJpegCompressed選擇是否保存為壓縮的DICOM文件。采集圖像結(jié)束后調(diào)用此函數(shù)將圖像保存成DICOM格式文件等。
3.4 圖像增強(qiáng)處理
圖像增強(qiáng)是改善圖像質(zhì)量,突出有用特征、增加圖像的清晰度、獲取較好視覺效果的一種手段,可以輔助醫(yī)生準(zhǔn)確地診斷病情。圖像增強(qiáng)包括灰度增強(qiáng)、平滑濾波和邊緣增強(qiáng)等。
本系統(tǒng)嵌入了南京醫(yī)療軟件公司的增強(qiáng)模塊,通過加密狗的操作方式達(dá)到增強(qiáng)效果。根據(jù)所拍攝人體部位的不同,采用了中值濾波、探測器邊界校準(zhǔn)、計算物體灰度閾值、背景灰度閾值、Sobel 濾波器、去除行偽影等一系列綜合圖像算法提高了不同部位,不同劑量強(qiáng)度下圖像清晰度。增強(qiáng)模塊與原始圖像之間采用DICOM文件接口方式,用戶以磁盤文件的形式指定原始圖像路徑以及文件名,增強(qiáng)之后的圖像也以文件的形式存放于磁盤,文件類型為DICOM格式。接口以動態(tài)鏈接庫的形式提供,按照動態(tài)鏈接庫的一般調(diào)用方式,調(diào)用動態(tài)連接庫IeLauncher.dll,(接口描述包含在頭文件IeLauncher.h中)。
增強(qiáng)時調(diào)用庫文件下的LaunchImageEnhancer_DICOM(srcPath, destPath, strRegion);函數(shù)。srcPath,destPath和strRegion分別為原始圖像數(shù)據(jù)文件地址、增強(qiáng)后圖像文件地址和增強(qiáng)部位選擇(現(xiàn)有胸部、腰椎、頸椎、盆骨、頭部、膝蓋及手足等部位可選)。
3.5 診斷報告打印及膠片打印
采集圖像結(jié)束后通過對話窗口打開診斷報告對話框。對話框先從數(shù)據(jù)錄中加載病人的基本信息,同時加載DICOM圖像并且創(chuàng)建縮略位圖文件,在Picture Control 控件里加載顯示。將MFC對話框界面轉(zhuǎn)換成打印文件的實現(xiàn)方法是采用MFC類打印及預(yù)覽CPrintFrame,CPrintView類。通過此類建立CPrintFrame的對象,設(shè)置該對象的指針為pframe, 并將對話框的指針傳給m_pCallerDlg(指向PrintFrame對話框的指針),調(diào)用對象的Creat函數(shù)創(chuàng)建框架窗口。
pframe->m_pCallerDlg = this;
pframe->Create(NULL,_T("打印預(yù)覽"),WS_VISIBLE | WS_CAPTION,CRect(0,0,0,0));
pframe->m_pView->OnMyPrintPreview();
pframe->m_pView->OnMyPrint();
在OnMyPrint函數(shù)中實現(xiàn)的功能包括打印表格、圖片、數(shù)據(jù)等。采用Rectangle(&DrawRect),SelectObject(&font);TextOut;Lineto等函分別實現(xiàn)矩形繪制、設(shè)置字體、文字輸出和劃線等功能。在主機(jī)上安裝打印驅(qū)動,進(jìn)行報告編輯的打印。
膠片打印功能通過在PACS系統(tǒng)基礎(chǔ)上編寫接收打印數(shù)據(jù)包的方法實現(xiàn)。為了方便開發(fā),可以采用德國offis公司提供的DCMTK開源項目,該平臺提供了所有必要的配置方法和示例工程文件,操作中使用標(biāo)準(zhǔn)中的打印管理服務(wù)類來實現(xiàn)打印管理的數(shù)據(jù)流模型。主要是編寫 dcmpstat.cfg 文件,此文件為打印引用的配置文件,打印膠片所需的參數(shù)都在該文件中。首先在VS中編寫膠片打印機(jī)配置界面,通過界面將打印機(jī)的基本信息錄入到dcmpstat.cfg。之后在該cfg中編寫Aetitle(系統(tǒng)與外部DICOM節(jié)點連接的實體名)、主機(jī)名稱、端口號、IP地址等信息。在VS中先調(diào)出需打印的一張影像,將該影像的文件路徑信息加上dcmprescu啟動DICOM接受服務(wù),從PACS服務(wù)器接收影像。通過CreateProcess創(chuàng)建進(jìn)程并調(diào)用進(jìn)程,即可將文件發(fā)送到打印服務(wù)器上。本系統(tǒng)所采用的是DRYPIX4000膠片打印機(jī),將打印機(jī)和PACS主機(jī)通過路由器設(shè)置在同一個IP段內(nèi)實現(xiàn)在線膠片打印。
4 運行結(jié)果
本系統(tǒng)完成后,安裝在河北南皮縣利民醫(yī)院,對其原有的傳統(tǒng)X光成像和手工膠片沖洗進(jìn)行了DR 成像系統(tǒng)數(shù)字化改造。將所開發(fā)的PACS軟件、CCD探測器與醫(yī)院原有的高壓發(fā)生器配合使用,對整個系統(tǒng)進(jìn)行了聯(lián)合測試,主要對系統(tǒng)各個模塊進(jìn)行了功能測試和整體性能測試。功能測試包括用戶登錄、圖像采集與增強(qiáng)、診斷報告及膠片打印等,而整體性能測試主要是對PACS工作站在運行過程中系統(tǒng)性能進(jìn)行測試,包括系統(tǒng)登錄響應(yīng)時間、查詢獲取病人信息的時間以及運行過程等。從結(jié)果看本系統(tǒng)運行穩(wěn)定,性能良好,滿足了醫(yī)院的實際使用需求。
5 結(jié)束語
本文討論了一套完整的PACS系統(tǒng)開發(fā)?;赩C++.NET框架配合SQL、ADO、FPGA、DCMTK 工具包等技術(shù)實現(xiàn)了對CCD探測器的以太網(wǎng)數(shù)據(jù)采集成像顯示、DICOM醫(yī)療圖像數(shù)據(jù)存儲、圖像增強(qiáng)分析及診斷信息和膠片打印等一系列工作,開發(fā)過程中進(jìn)行了大量的編程試驗和調(diào)試,最終投入到醫(yī)院實際使用。目前我國數(shù)字式X射線機(jī)主要依靠進(jìn)口,無法進(jìn)行成像檢測的普及,因此,以中小醫(yī)院為主要對象,開發(fā)國產(chǎn)數(shù)字式X光機(jī)及PACS系統(tǒng)非常迫切,PACS系統(tǒng)在以后將會有極其廣闊的發(fā)展前景。
參考文獻(xiàn)
[1]曹奕雯,陶薔.PACS關(guān)鍵技術(shù)及國內(nèi)應(yīng)用[J].醫(yī)療衛(wèi)生裝備,2011,32(01):77-80.
[2]郭強(qiáng).ADO技術(shù)在VC編程中的研究及應(yīng)用分析[J].電子科技,2013,26(01):37-40.
[3]朱曉科.醫(yī)用膠片數(shù)字化軟件中圖像采集與文件管理的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2007.
[4]門金瑞,姚大志,韋偉. 基于千兆以太網(wǎng)的CCD相機(jī)設(shè)計[J]. 激光與光電子學(xué)進(jìn)展,2012,49(03):146-150.
[5]王韻靈.跨平臺移動醫(yī)學(xué)圖像顯示系統(tǒng)[D].上海:中國科學(xué)院研究生院(上海技術(shù)物理研究所),2014.
[6]江和.數(shù)字醫(yī)院PACS系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2012.
[7]賈斌.醫(yī)學(xué)影像按需打印系統(tǒng)關(guān)鍵技術(shù)研究[D].廣州:華南理工大學(xué),2013.
作者單位
1.南京理工大學(xué)紫金學(xué)院 江蘇省南京市 210046
2.紫金山天文臺 江蘇省南京市 210008