康亞冰,劉哲星,艾育華,陳芳炯,耿仁文
1.華南理工大學 電子與信息學院,廣東 廣州 510641;2. 南方醫科大學 生物醫學工程學院,廣東 廣州510515;3. 南方醫科大學南方醫院,廣東 廣州 510515
計算機和通信技術的高速發展推動了數字影像的進步,醫院信息化建設目前已經取得了長足的進步。影像歸檔和通信系統(Picture Archiving and Communication System,PACS)[1]將醫學影像資料轉化為數字形式,通過高速計算設備及通訊網絡完成對圖像信息的采集、存儲、顯示及傳輸等功能,使得醫學影像資料得以有效管理和充分利用。PACS應遵循DICOM[2]醫學影像設備和系統可以互聯互通;DICOM瀏覽器是PACS的重要組成部分,它直接面向用戶,其可用性和操作友好程度直接關系到PACS系統的用戶接受度。
Qt[3]是諾基亞公司開發的一個跨平臺的C++圖形用戶界面應用程序開發框架,利用Qt可以實現“一處編寫,隨處編譯”的跨平臺解決方案。這些平臺包括Windows、MacOS X、Linux、Solaris、HP-UX及 UNIX系統。因此,日益受到開發者的重視和青睞。
DCMTK(DICOM Tool Kit)[4]德國offis公司提供的開源項目,經過10多年的開發和維護,已經基本實現了DICOM協議的內容,它為實現DICOM協議提供了一個平臺。DCMTK不但提供各種操作系統平臺下已經編譯好的二進制開發包,而且提供所有的源代碼,供用戶在自己的開發平臺上自行編譯。
結合Qt強大的圖形用戶界面應用程序開發框架和DCMTK開源庫實現DICOM協議,本文提出基于Qt和DCMTK庫的DICOM瀏覽器的開發,目的是結合二者開源和跨平臺的優勢,以期開發出經濟、適應性強的DICOM瀏覽器。本文開發環境采用Windows 7,編譯開發環境選用VS2010,Qt庫采用最新版的Qt Library 4.9.2,DCMTK庫采用最新版的DCMTK 3.6.0。
DICOM3.0標準遵照面向對象[5-6]思想進行設計,具體表現為實體-關系模式(Entity-Relations,E-R)。DICOM文件一般由DICOM文件頭和DICOM數據集(DICOM Data Set)組成。
文件頭一般由128字節的文件前言(File Preamble)組成,它包含了封裝數據的標識信息[7]以用于描述應用概略或特定實現,如果沒有這樣的描述,則要全部置零。緊跟著4字節DICOM的前綴“DICM”,它用來標識文件類型是不是DICOM文件。
數據集描述了現實世界信息對象(IOD)的單個實例。DICOM數據集是分層次的,即有四個信息層次組成:病人(Patient)、研究(Study)、系列(Series)、圖像(Image),前一個層次和后一個層次是一對多的關系。DICOM數據集由一系列的DICOM數據元素組成,每個數據元素包含元素標簽(Tag)、值表示法(VR)、值長度(VL)及值域(VF),其中,VR為可選項。其結構,見圖1。

圖1 數據元素組成
Tag是一個有序的16 位的無符號證書對,由組號和元素號組成,它是數據元素的唯一標識。
VR是2字節的字符串,表示后面的值域的數據類型,它是可選項。根據VR是否出現將數據元素分成兩類,即隱式VR數據元素(不含VR)和顯式VR數據元素(含VR)。
VL表示本元素中值域中數據的長度,它是一個16位或32位的無符號整數。
VF的長度為偶數字節,存儲了數據元素的值,其數據類型由VR指定,數據長度由VL指定。
傳輸語法(transfer syntax UID)規定了數據的編碼方式,其中包括字節的排序和壓縮方式以及數據元素是否包含VR。傳輸語法由元信息中標簽為(0002,0010)的數據元素決定,它是一個唯一標識符(UID),可以用Dataset類中的getOriginalXfer()來獲取。例如傳輸語法為UID為1.2.840.10008.1.2.1,那么UID NAME,即編碼規則為Explicit VR Little Endian,表明在數據元素結構中含有VR,且對二進制數據用倒序方式編碼。
大端(Big Endian)是指對于多字節的二進制數據,按順序方法排列每字節,即高字節存儲在低地址中。小端(Little Endian)指對于多字節二進制數據,按照倒序方法排列每字節,即低字節存儲在低地址中。兩者對于單字節組成的字符串都是從左到右排序,另外,對于VR=OB的數據編碼不受大端小端的影響。
圖像的像素數據可以是壓縮格式,也可以是非壓縮格式。無論為哪種編碼格式,像素的編碼都是從左導游,從上到下的,編碼格式由傳輸語法決定。
2.3.1 非壓縮格式
非壓縮格式的VR通常為OW,像素位數不大于8 位的使用Explicit VR非壓縮格式,也可以使用VR為OB。VR為OW類型的數據存儲順序視大端小端而定。
2.3.2 壓縮格式
壓縮格式的VR通常為OB,DICOM支持游程編碼(RLE)、JPEG和JPEG2000編碼格式。
(1)游程編碼。其傳輸語法為1.2.840.10008.1.2.5,在DICOM中使用的編碼方式為:對于重復字節,用<字節數+1><字節值>編碼;對于非重復字節,用<字節數-1><字節值>編碼。這是一種無損編碼方式。
(2)JPEG編 碼。DICOM標 準 支 持4種JPEG壓 縮,其傳輸語法分別為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變換,后兩種為無損壓縮,采用DPCM編碼。
(3)JPEG2000編碼。其傳輸語法分別為1.2.10008.1.2.4.90、1.2.10008.1.2.4.91,前者是無損編碼,后者可以是有損編碼,也可以是無損編碼。
DICOM文件的讀取要用到DCMTK中的dcmdata 和dcmimage兩個工具包。dcmdata包含了管理DICOM文件和結構的類,同時它也提供對DICOMDIR的支持以滿足DICOM Storage Media的需要。dcmimage提供對彩色圖像的支持,對單色圖像的支持由dcmimgle提供。
dcmdata中的DcmFileFormat是負責處理DICOM文件的類。其中,loadFile()方法可以讀入DICOM文件,getDataset()可以獲取DICOM數據集。DIOCM文件的讀取代碼如下:

dcmdata中的DcmDataset類負責處理DICOM文件數據集。其中,findAndGet系列函數可以解析和獲取DICOM文件中包含的各類信息。下面的代碼演示從DICOM數據集中提取病人的姓名和圖像顯示默認的窗寬、窗位信息。

在Qt架構中顯示圖像,要把DICOM中的圖像轉化為Qt中支持的圖像,本文中轉化為QImage。QImage支持獨立與硬件的圖像,且支持直接訪問像素。
在Qt窗口下顯示圖像,首先需要根據DICOM文件中圖像信息創建對應的QImage。如果是單色圖像,則創建Format_Indexed8格式的8位灰度圖像QImag。如果是彩色圖像,則創建Format_ARGB32格式的32位彩色圖像QImage。


然后給創建的QImage的每個像素賦值。如果是灰度圖像,在賦值之前,設置好默認的窗寬、窗位。給QImage像素賦值后,就可以在Qt框架中直接顯示,如為一幅DICOM格式的胸片的顯示結果,見圖2。


圖2 DICOM文件格式的胸片的顯示結果
DCMTK中包含了對圖像處理的包和類。dcmimgle是一個圖像處理庫和可用的工具模塊,它包括了對DICOM單色圖像的訪問和顯示。其中,DICOMImage類為模塊提供接口,主要目的是顯示;dcmimgle模塊提供對彩色圖像的支持。dcm2pnm工具支持轉換DICOM圖像為PPM/PGM、PNG、TIFF或 BMP格式,dcmscale工具支持縮放DICOM圖像。dcmjpeg提供了JPEG格式的壓縮/解壓縮庫以及工具。使用該模塊包含的類,可將DICOM圖像對象在非壓縮和JPEG壓縮表示(傳輸協議)之間轉換,既支持無失真的JPEG處理,也支持有失真的JPEG處理。其中,DJCodecEncoder是JPEG編碼器的一個抽象codec類,DJCodecDecoder是JPEG解碼器的一個抽象codec類。
DICOM瀏覽器中,最常用的圖像處理操作是窗寬、窗位[8]。在DICOM文件中,灰度圖像存儲的位數通常為8位、12位、16位、24位等,而目前計算機所能顯示的灰度圖像的等級數在0~255之間[9],因此,在顯示DICOM圖像之前,需要對圖像進行響應的轉換,即通過窗位(Window Center)和窗寬(Window Width)將某段感興趣的灰度值轉換到0~255之間。窗位和窗寬指定了從存儲的像素值到顯示像素值的線性變換。線性變換公式,見式(1)[10]。

式中,G(V)為顯示器的顯示值,g為顯示器顯示的最大值,W為窗寬,C為窗位。
DICOMImage中的setWindow(const double center,constdouble width)函數實現了窗寬窗位的調整。專業DICOM瀏覽器使用鼠標的滑動來調整窗寬窗位,上下滑動調整窗位,左右滑動調整窗寬,可以使用Qt中的鼠標移動事件mouseMoveEvent(QMouseEvent* event)和鼠標按鍵事件mouse zPressEvent(QMouseEvent*event)來實現。實現過程如下:



圖3 調整窗寬窗位前后的對比
本文基于DICOM3.0標準和Qt架構,采用DCMTK開源庫平臺,開發一個跨平臺的DICOM圖像瀏覽器,實現了DICOM文件的讀取和圖像的顯示、窗寬和窗位的調整等圖像處理操作。以本文開發的DICOM瀏覽器為基礎,通過增加DICOM圖像的傳輸、分割、配準[11]及三維圖像重建等功能,可進一步開發為一個功能強大的DICOM圖像診斷平臺,并作為PACS的重要組成部分。DCMTK開源庫提供了較完整的DICOM標準支持,Qt架構具有強大的開發功能、簡易的GUI編程特點以及跨平臺特性,二者結合,可以快速開發出功能更強大的DICOM瀏覽器軟件。
[1]邱峰,田捷,曹勇,等. PACS系統綜述[J].中國醫學影像技術,2000,16(1):73.
[2]于鳳海.DICOM標準綜述[J].紅外,2003,(9):30-33.
[3]閆鋒欣,曾泉人,張志強.C++ GUI QT4 編程[M].2版.北京:電子工業出版社,2008.
[4]柯穎波,黃展鵬.基于Visual C++和DCMTK的醫學DICOM圖像顯示與調窗[J].現代計算機,2011,(30):58-61.
[5]郭立文.面向對象的分析與設計[J].中等職業教育,2005,(6):46-47.
[6]楚振升,李亞.兼容DICOM設備的連接方法改進[J].中國醫療設備,2011,26(7):57-58.
[7]林春漪,尹俊勛,馬麗紅,等.論解讀DICOM醫學圖像文件及其顯示的VC++實踐方法[J].現代醫學儀器與應用,2005,(1):3-6.
[8]夏珺芳.基于DCMTK顯示醫學影像軟件的實現[J].計算機科學技術與發展,2011,(3):54-57.
[9]張尤賽,趙志峰,陳福民.DICOM醫學圖像的DIB顯示技術[J].計算機應用研究,2003,(2):75-76.
[10]王光飛,劉杰,劉文.DICOM醫學圖像的調窗技術及DIB顯示[J].醫療裝備,2005,(8):1-4.
[11]阮秋琦,阮宇智.數字圖像處理[M].2版.北京:電子工業出版社,2007.