康亞冰,劉哲星,艾育華,陳芳炯,耿仁文
1.華南理工大學(xué) 電子與信息學(xué)院,廣東 廣州 510641;2. 南方醫(yī)科大學(xué) 生物醫(yī)學(xué)工程學(xué)院,廣東 廣州510515;3. 南方醫(yī)科大學(xué)南方醫(yī)院,廣東 廣州 510515
計(jì)算機(jī)和通信技術(shù)的高速發(fā)展推動(dòng)了數(shù)字影像的進(jìn)步,醫(yī)院信息化建設(shè)目前已經(jīng)取得了長(zhǎng)足的進(jìn)步。影像歸檔和通信系統(tǒng)(Picture Archiving and Communication System,PACS)[1]將醫(yī)學(xué)影像資料轉(zhuǎn)化為數(shù)字形式,通過(guò)高速計(jì)算設(shè)備及通訊網(wǎng)絡(luò)完成對(duì)圖像信息的采集、存儲(chǔ)、顯示及傳輸?shù)裙δ埽沟冕t(yī)學(xué)影像資料得以有效管理和充分利用。PACS應(yīng)遵循DICOM[2]醫(yī)學(xué)影像設(shè)備和系統(tǒng)可以互聯(lián)互通;DICOM瀏覽器是PACS的重要組成部分,它直接面向用戶,其可用性和操作友好程度直接關(guān)系到PACS系統(tǒng)的用戶接受度。
Qt[3]是諾基亞公司開(kāi)發(fā)的一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架,利用Qt可以實(shí)現(xiàn)“一處編寫(xiě),隨處編譯”的跨平臺(tái)解決方案。這些平臺(tái)包括Windows、MacOS X、Linux、Solaris、HP-UX及 UNIX系統(tǒng)。因此,日益受到開(kāi)發(fā)者的重視和青睞。
DCMTK(DICOM Tool Kit)[4]德國(guó)offis公司提供的開(kāi)源項(xiàng)目,經(jīng)過(guò)10多年的開(kāi)發(fā)和維護(hù),已經(jīng)基本實(shí)現(xiàn)了DICOM協(xié)議的內(nèi)容,它為實(shí)現(xiàn)DICOM協(xié)議提供了一個(gè)平臺(tái)。DCMTK不但提供各種操作系統(tǒng)平臺(tái)下已經(jīng)編譯好的二進(jìn)制開(kāi)發(fā)包,而且提供所有的源代碼,供用戶在自己的開(kāi)發(fā)平臺(tái)上自行編譯。
結(jié)合Qt強(qiáng)大的圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架和DCMTK開(kāi)源庫(kù)實(shí)現(xiàn)DICOM協(xié)議,本文提出基于Qt和DCMTK庫(kù)的DICOM瀏覽器的開(kāi)發(fā),目的是結(jié)合二者開(kāi)源和跨平臺(tái)的優(yōu)勢(shì),以期開(kāi)發(fā)出經(jīng)濟(jì)、適應(yīng)性強(qiáng)的DICOM瀏覽器。本文開(kāi)發(fā)環(huán)境采用Windows 7,編譯開(kāi)發(fā)環(huán)境選用VS2010,Qt庫(kù)采用最新版的Qt Library 4.9.2,DCMTK庫(kù)采用最新版的DCMTK 3.6.0。
DICOM3.0標(biāo)準(zhǔn)遵照面向?qū)ο骩5-6]思想進(jìn)行設(shè)計(jì),具體表現(xiàn)為實(shí)體-關(guān)系模式(Entity-Relations,E-R)。DICOM文件一般由DICOM文件頭和DICOM數(shù)據(jù)集(DICOM Data Set)組成。
文件頭一般由128字節(jié)的文件前言(File Preamble)組成,它包含了封裝數(shù)據(jù)的標(biāo)識(shí)信息[7]以用于描述應(yīng)用概略或特定實(shí)現(xiàn),如果沒(méi)有這樣的描述,則要全部置零。緊跟著4字節(jié)DICOM的前綴“DICM”,它用來(lái)標(biāo)識(shí)文件類(lèi)型是不是DICOM文件。
數(shù)據(jù)集描述了現(xiàn)實(shí)世界信息對(duì)象(IOD)的單個(gè)實(shí)例。DICOM數(shù)據(jù)集是分層次的,即有四個(gè)信息層次組成:病人(Patient)、研究(Study)、系列(Series)、圖像(Image),前一個(gè)層次和后一個(gè)層次是一對(duì)多的關(guān)系。DICOM數(shù)據(jù)集由一系列的DICOM數(shù)據(jù)元素組成,每個(gè)數(shù)據(jù)元素包含元素標(biāo)簽(Tag)、值表示法(VR)、值長(zhǎng)度(VL)及值域(VF),其中,VR為可選項(xiàng)。其結(jié)構(gòu),見(jiàn)圖1。
圖1 數(shù)據(jù)元素組成
Tag是一個(gè)有序的16 位的無(wú)符號(hào)證書(shū)對(duì),由組號(hào)和元素號(hào)組成,它是數(shù)據(jù)元素的唯一標(biāo)識(shí)。
VR是2字節(jié)的字符串,表示后面的值域的數(shù)據(jù)類(lèi)型,它是可選項(xiàng)。根據(jù)VR是否出現(xiàn)將數(shù)據(jù)元素分成兩類(lèi),即隱式VR數(shù)據(jù)元素(不含VR)和顯式VR數(shù)據(jù)元素(含VR)。
VL表示本元素中值域中數(shù)據(jù)的長(zhǎng)度,它是一個(gè)16位或32位的無(wú)符號(hào)整數(shù)。
VF的長(zhǎng)度為偶數(shù)字節(jié),存儲(chǔ)了數(shù)據(jù)元素的值,其數(shù)據(jù)類(lèi)型由VR指定,數(shù)據(jù)長(zhǎng)度由VL指定。
傳輸語(yǔ)法(transfer syntax UID)規(guī)定了數(shù)據(jù)的編碼方式,其中包括字節(jié)的排序和壓縮方式以及數(shù)據(jù)元素是否包含VR。傳輸語(yǔ)法由元信息中標(biāo)簽為(0002,0010)的數(shù)據(jù)元素決定,它是一個(gè)唯一標(biāo)識(shí)符(UID),可以用Dataset類(lèi)中的getOriginalXfer()來(lái)獲取。例如傳輸語(yǔ)法為UID為1.2.840.10008.1.2.1,那么UID NAME,即編碼規(guī)則為Explicit VR Little Endian,表明在數(shù)據(jù)元素結(jié)構(gòu)中含有VR,且對(duì)二進(jìn)制數(shù)據(jù)用倒序方式編碼。
大端(Big Endian)是指對(duì)于多字節(jié)的二進(jìn)制數(shù)據(jù),按順序方法排列每字節(jié),即高字節(jié)存儲(chǔ)在低地址中。小端(Little Endian)指對(duì)于多字節(jié)二進(jìn)制數(shù)據(jù),按照倒序方法排列每字節(jié),即低字節(jié)存儲(chǔ)在低地址中。兩者對(duì)于單字節(jié)組成的字符串都是從左到右排序,另外,對(duì)于VR=OB的數(shù)據(jù)編碼不受大端小端的影響。
圖像的像素?cái)?shù)據(jù)可以是壓縮格式,也可以是非壓縮格式。無(wú)論為哪種編碼格式,像素的編碼都是從左導(dǎo)游,從上到下的,編碼格式由傳輸語(yǔ)法決定。
2.3.1 非壓縮格式
非壓縮格式的VR通常為OW,像素位數(shù)不大于8 位的使用Explicit VR非壓縮格式,也可以使用VR為OB。VR為OW類(lèi)型的數(shù)據(jù)存儲(chǔ)順序視大端小端而定。
2.3.2 壓縮格式
壓縮格式的VR通常為OB,DICOM支持游程編碼(RLE)、JPEG和JPEG2000編碼格式。
(1)游程編碼。其傳輸語(yǔ)法為1.2.840.10008.1.2.5,在DICOM中使用的編碼方式為:對(duì)于重復(fù)字節(jié),用<字節(jié)數(shù)+1><字節(jié)值>編碼;對(duì)于非重復(fù)字節(jié),用<字節(jié)數(shù)-1><字節(jié)值>編碼。這是一種無(wú)損編碼方式。
(2)JPEG編 碼。DICOM標(biāo) 準(zhǔn) 支 持4種JPEG壓 縮,其傳輸語(yǔ)法分別為1.2.840.10008.1.2.4.50、1.2.840. 10008.1.2.4.51、1.2.840.10008.1.2.4.57、1.2.840.10008. 1.2.4.70,前兩種為有損壓縮,采用DCT變換,后兩種為無(wú)損壓縮,采用DPCM編碼。
(3)JPEG2000編碼。其傳輸語(yǔ)法分別為1.2.10008.1.2.4.90、1.2.10008.1.2.4.91,前者是無(wú)損編碼,后者可以是有損編碼,也可以是無(wú)損編碼。
DICOM文件的讀取要用到DCMTK中的dcmdata 和dcmimage兩個(gè)工具包。dcmdata包含了管理DICOM文件和結(jié)構(gòu)的類(lèi),同時(shí)它也提供對(duì)DICOMDIR的支持以滿足DICOM Storage Media的需要。dcmimage提供對(duì)彩色圖像的支持,對(duì)單色圖像的支持由dcmimgle提供。
dcmdata中的DcmFileFormat是負(fù)責(zé)處理DICOM文件的類(lèi)。其中,loadFile()方法可以讀入DICOM文件,getDataset()可以獲取DICOM數(shù)據(jù)集。DIOCM文件的讀取代碼如下:
dcmdata中的DcmDataset類(lèi)負(fù)責(zé)處理DICOM文件數(shù)據(jù)集。其中,findAndGet系列函數(shù)可以解析和獲取DICOM文件中包含的各類(lèi)信息。下面的代碼演示從DICOM數(shù)據(jù)集中提取病人的姓名和圖像顯示默認(rèn)的窗寬、窗位信息。
在Qt架構(gòu)中顯示圖像,要把DICOM中的圖像轉(zhuǎn)化為Qt中支持的圖像,本文中轉(zhuǎn)化為QImage。QImage支持獨(dú)立與硬件的圖像,且支持直接訪問(wèn)像素。
在Qt窗口下顯示圖像,首先需要根據(jù)DICOM文件中圖像信息創(chuàng)建對(duì)應(yīng)的QImage。如果是單色圖像,則創(chuàng)建Format_Indexed8格式的8位灰度圖像QImag。如果是彩色圖像,則創(chuàng)建Format_ARGB32格式的32位彩色圖像QImage。
然后給創(chuàng)建的QImage的每個(gè)像素賦值。如果是灰度圖像,在賦值之前,設(shè)置好默認(rèn)的窗寬、窗位。給QImage像素賦值后,就可以在Qt框架中直接顯示,如為一幅DICOM格式的胸片的顯示結(jié)果,見(jiàn)圖2。
圖2 DICOM文件格式的胸片的顯示結(jié)果
DCMTK中包含了對(duì)圖像處理的包和類(lèi)。dcmimgle是一個(gè)圖像處理庫(kù)和可用的工具模塊,它包括了對(duì)DICOM單色圖像的訪問(wèn)和顯示。其中,DICOMImage類(lèi)為模塊提供接口,主要目的是顯示;dcmimgle模塊提供對(duì)彩色圖像的支持。dcm2pnm工具支持轉(zhuǎn)換DICOM圖像為PPM/PGM、PNG、TIFF或 BMP格式,dcmscale工具支持縮放DICOM圖像。dcmjpeg提供了JPEG格式的壓縮/解壓縮庫(kù)以及工具。使用該模塊包含的類(lèi),可將DICOM圖像對(duì)象在非壓縮和JPEG壓縮表示(傳輸協(xié)議)之間轉(zhuǎn)換,既支持無(wú)失真的JPEG處理,也支持有失真的JPEG處理。其中,DJCodecEncoder是JPEG編碼器的一個(gè)抽象codec類(lèi),DJCodecDecoder是JPEG解碼器的一個(gè)抽象codec類(lèi)。
DICOM瀏覽器中,最常用的圖像處理操作是窗寬、窗位[8]。在DICOM文件中,灰度圖像存儲(chǔ)的位數(shù)通常為8位、12位、16位、24位等,而目前計(jì)算機(jī)所能顯示的灰度圖像的等級(jí)數(shù)在0~255之間[9],因此,在顯示DICOM圖像之前,需要對(duì)圖像進(jìn)行響應(yīng)的轉(zhuǎn)換,即通過(guò)窗位(Window Center)和窗寬(Window Width)將某段感興趣的灰度值轉(zhuǎn)換到0~255之間。窗位和窗寬指定了從存儲(chǔ)的像素值到顯示像素值的線性變換。線性變換公式,見(jiàn)式(1)[10]。
式中,G(V)為顯示器的顯示值,g為顯示器顯示的最大值,W為窗寬,C為窗位。
DICOMImage中的setWindow(const double center,constdouble width)函數(shù)實(shí)現(xiàn)了窗寬窗位的調(diào)整。專(zhuān)業(yè)DICOM瀏覽器使用鼠標(biāo)的滑動(dòng)來(lái)調(diào)整窗寬窗位,上下滑動(dòng)調(diào)整窗位,左右滑動(dòng)調(diào)整窗寬,可以使用Qt中的鼠標(biāo)移動(dòng)事件mouseMoveEvent(QMouseEvent* event)和鼠標(biāo)按鍵事件mouse zPressEvent(QMouseEvent*event)來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)過(guò)程如下:
圖3 調(diào)整窗寬窗位前后的對(duì)比
本文基于DICOM3.0標(biāo)準(zhǔn)和Qt架構(gòu),采用DCMTK開(kāi)源庫(kù)平臺(tái),開(kāi)發(fā)一個(gè)跨平臺(tái)的DICOM圖像瀏覽器,實(shí)現(xiàn)了DICOM文件的讀取和圖像的顯示、窗寬和窗位的調(diào)整等圖像處理操作。以本文開(kāi)發(fā)的DICOM瀏覽器為基礎(chǔ),通過(guò)增加DICOM圖像的傳輸、分割、配準(zhǔn)[11]及三維圖像重建等功能,可進(jìn)一步開(kāi)發(fā)為一個(gè)功能強(qiáng)大的DICOM圖像診斷平臺(tái),并作為PACS的重要組成部分。DCMTK開(kāi)源庫(kù)提供了較完整的DICOM標(biāo)準(zhǔn)支持,Qt架構(gòu)具有強(qiáng)大的開(kāi)發(fā)功能、簡(jiǎn)易的GUI編程特點(diǎn)以及跨平臺(tái)特性,二者結(jié)合,可以快速開(kāi)發(fā)出功能更強(qiáng)大的DICOM瀏覽器軟件。
[1]邱峰,田捷,曹勇,等. PACS系統(tǒng)綜述[J].中國(guó)醫(yī)學(xué)影像技術(shù),2000,16(1):73.
[2]于鳳海.DICOM標(biāo)準(zhǔn)綜述[J].紅外,2003,(9):30-33.
[3]閆鋒欣,曾泉人,張志強(qiáng).C++ GUI QT4 編程[M].2版.北京:電子工業(yè)出版社,2008.
[4]柯穎波,黃展鵬.基于Visual C++和DCMTK的醫(yī)學(xué)DICOM圖像顯示與調(diào)窗[J].現(xiàn)代計(jì)算機(jī),2011,(30):58-61.
[5]郭立文.面向?qū)ο蟮姆治雠c設(shè)計(jì)[J].中等職業(yè)教育,2005,(6):46-47.
[6]楚振升,李亞.兼容DICOM設(shè)備的連接方法改進(jìn)[J].中國(guó)醫(yī)療設(shè)備,2011,26(7):57-58.
[7]林春漪,尹俊勛,馬麗紅,等.論解讀DICOM醫(yī)學(xué)圖像文件及其顯示的VC++實(shí)踐方法[J].現(xiàn)代醫(yī)學(xué)儀器與應(yīng)用,2005,(1):3-6.
[8]夏珺芳.基于DCMTK顯示醫(yī)學(xué)影像軟件的實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué)技術(shù)與發(fā)展,2011,(3):54-57.
[9]張尤賽,趙志峰,陳福民.DICOM醫(yī)學(xué)圖像的DIB顯示技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2003,(2):75-76.
[10]王光飛,劉杰,劉文.DICOM醫(yī)學(xué)圖像的調(diào)窗技術(shù)及DIB顯示[J].醫(yī)療裝備,2005,(8):1-4.
[11]阮秋琦,阮宇智.數(shù)字圖像處理[M].2版.北京:電子工業(yè)出版社,2007.