洪 歧, 王 力
(陜西理工學(xué)院數(shù)學(xué)與計算機科學(xué)學(xué)院,陜西 漢中 723000)
為適應(yīng)不同應(yīng)用需要,當(dāng)今社會圖像的格式越來越多,解讀不同格式的圖像文件以便讀取出圖像數(shù)據(jù),對后期的圖像顯示、處理顯得非常重要。目前,雖然已經(jīng)有一些數(shù)據(jù)源數(shù)據(jù)結(jié)構(gòu)的解剖資料,但對它們的解剖并不深入,也沒有對多種不同數(shù)據(jù)源進行集中對比,更無從知曉如何將其納入一個實用系統(tǒng)中。為此,本文對常見的BMP、JPEG、DICOM三種不同數(shù)據(jù)源存儲結(jié)構(gòu)集中進行了深入分析,然后將三種不同數(shù)據(jù)源與我們自己研發(fā)的“三維醫(yī)學(xué)圖像可視化系統(tǒng)”所需數(shù)組IntigrateData[225][256*256]相對應(yīng),從而為明了一個實用系統(tǒng)讀取更大數(shù)據(jù)范圍的方法提供參考。
近年來,我們針對醫(yī)學(xué)領(lǐng)域需要,研發(fā)了“三維醫(yī)學(xué)圖像可視化系統(tǒng)”。該系統(tǒng)能夠?qū)崿F(xiàn)三維圖像裸數(shù)據(jù)的讀入、處理、顯示等功能。下面具體介紹該系統(tǒng)中三維圖像數(shù)據(jù)讀入模塊的數(shù)據(jù)組織情況。在系統(tǒng)的數(shù)據(jù)讀入模塊中,我們設(shè)定了一個225×256×256的IntigrateData[225][256*256]數(shù)組,用以存放除裸數(shù)據(jù)外一般的三維圖像數(shù)據(jù)。
數(shù)組的第二維數(shù)據(jù)構(gòu)成單片的圖像,即一張像素256×256的灰度圖片(選擇灰度圖片的原因是因為當(dāng)前的醫(yī)學(xué)圖片均以灰度居多),第一維表示可以由225張圖片疊加構(gòu)成3D圖片,這樣就可以從三維不同的角度進行觀察。本系統(tǒng)現(xiàn)在能夠讀入的圖像裸數(shù)據(jù)是由113片的圖像數(shù)據(jù)組成,先將這些數(shù)據(jù)讀入一個viewdata[113][256*256]數(shù)組之中,通過相鄰兩片插值,形成225個單片數(shù)據(jù),并將其放入IntigrateData[225][256*256]數(shù)組中,完成數(shù)據(jù)讀取,之后,系統(tǒng)實現(xiàn)單片平面及整體三維處理、顯示工作。
BMP文件格式是Windows系統(tǒng)中廣泛使用的圖像文件格式。三維醫(yī)學(xué)圖像可視化系統(tǒng)讀取BMP圖像數(shù)據(jù)就是要將其位圖像素數(shù)據(jù)讀入系統(tǒng)的數(shù)組IntigrateData[225][256*256]中。為此,首先,要找到圖像數(shù)據(jù)在BMP文件中的起始位置,這個信息就包含在BMP文件頭里面。BMP文件的數(shù)據(jù)按照從文件頭開始的先后順序分為四個部分:BMP文件頭(BMP file header)、位圖信息頭(bitmap information)、調(diào)色板(color palette)、位圖數(shù)據(jù)(bitmap data),如表1所示。
表1 BMP圖像文件結(jié)構(gòu)
Windows下BMP文件頭結(jié)構(gòu)體定義如下:
其中,bfOffBits用以表示圖像數(shù)據(jù)的起始位置,這是一個相對于文件頭部的偏移量,并以字節(jié)為單位;第二步要讀取的是BMP圖像的高度和寬度數(shù)據(jù),而這兩個數(shù)據(jù)則在位圖信息頭里面,Windows下位圖信息頭結(jié)構(gòu)體定義如下:
高度和寬度分別以biHeight和biWidth表示,以像素為單位;最后,要注意的就是BMP圖像數(shù)據(jù)的對齊規(guī)則。那就是對于位圖數(shù)據(jù)區(qū)域而言,每行的數(shù)據(jù)它必須湊滿4字節(jié),如果沒有滿,則用冗余的數(shù)據(jù)來補齊。考慮到這個特性,我們在程序中運用每行像素字節(jié)數(shù)計算方法line_width=(width*bit_count+31)/32*4來讀取位圖數(shù)據(jù)(這里的bit_count為固定值8,當(dāng)biBitCount=8時,則這張BMP文件圖像就是灰度圖像)。
這樣,我們就可以將位圖數(shù)據(jù)重新處理,讀入我們系統(tǒng)的數(shù)組中了。本系統(tǒng)中讀取數(shù)據(jù)的部分代碼如下:
在JPEG文件中,圖像像素數(shù)據(jù)是經(jīng)過壓縮的,所以在讀入系統(tǒng)數(shù)組之前,必須對像素數(shù)據(jù)進行解壓。解壓出圖像的像素數(shù)據(jù)之后,就可以將像素數(shù)據(jù)讀入三維醫(yī)學(xué)圖像可視化系統(tǒng)的數(shù)組IntigrateData[225][256*256]中,完成圖像顯示。
我們先敘述JPEG文件的解壓縮過程,然后說明如何將解壓后的圖像像素數(shù)據(jù)讀入該系統(tǒng)。JPEG文件大體上可以分成兩個部分:標記碼(Tag)和壓縮數(shù)據(jù)。標記碼(Tag)由兩個字節(jié)組成,前一個字節(jié)為固定值0xFF,后面一個字節(jié)則是根據(jù)不同意義有不同數(shù)值。在一個完整的兩字節(jié)標記碼后,就是該標記碼對應(yīng)的壓縮數(shù)據(jù)流,記錄了關(guān)于文件的多種信息。以下列出最常見、最常用到的標記代碼:
壓縮過程一般分為顏色轉(zhuǎn)換、DCT變換、量化、熵編碼四個步驟,解壓過程就是壓縮過程的逆過程,即從壓縮后的圖像數(shù)據(jù)經(jīng)過熵編碼的解碼、反量化、逆向DCT變換、顏色的還原,最終得到原始的圖像數(shù)據(jù)。壓縮過程中的四個步驟,而解壓就是其逆過程。
JPEG文件格式的壓縮方法是支持YCrCb顏色模式的數(shù)據(jù)結(jié)構(gòu),而一般的圖像都是RGB顏色模式,所以要進行壓縮就要先進行RGB顏色模式向YCrCb顏色模式轉(zhuǎn)變。公式如下:
而在解壓的過程中要在屏幕上顯示圖像,就必須是RGB模式表示的,YCrCb顏色模式向RGB顏色模式轉(zhuǎn)變的模式如下:
DCT變換將時間或空間數(shù)據(jù)變成頻率數(shù)據(jù),利用人的視覺對高頻信號(的變化)不敏感和對不同頻帶數(shù)據(jù)的感知特征不一樣等特點,對圖像數(shù)據(jù)進行壓縮。在JPEG壓縮中是將圖像信號在頻率域上進行變換,分離出高頻和低頻信息,然后對圖像的高頻部分(即圖像細節(jié))進行壓縮。以像素為單位將圖像劃分為多個8×8的矩陣,對每一個矩陣作DCT變換,把8×8的像素矩陣變成8×8的頻率系數(shù)矩陣。公式如下:
其中:f(i,j)為原始圖像數(shù)據(jù)空間的函數(shù);i為像素所處的行,j為像素所處的列;u和v為經(jīng)過DCT變換后對應(yīng)頻域空間的行和列;F(u,v)為經(jīng)過 DCT變換后對應(yīng)頻域空間的函數(shù)。當(dāng)u=0,v=0時C(u),C(v)=;當(dāng)u>0,v>0時C(u),C(v)=1。解壓就是上面正向變換的逆變換,公式如下:
量化是將系數(shù)(經(jīng)過DCT變換后的頻率)映射到更小的取值范圍,過程就是將頻率系數(shù)中的頻率系數(shù)值除以對應(yīng)量化矩陣中對應(yīng)的值,然后取與得到的結(jié)果最接近的整數(shù)。量化的具體計算公式為:
其中Sq(u,v)為量化后的結(jié)果,F(xiàn)(u,v)為DCT系數(shù),Q(u,v)為量化表中的數(shù)值,round為舍入取整函數(shù)。標準量化表如表2和表3。
表2 色差量化值
表3 亮度量化值
數(shù)據(jù)量化后,矩陣中的數(shù)據(jù)都是近似值,和原始圖像數(shù)據(jù)之間有了差異,這一差異是造成圖像壓縮后失真的主要原因。
在JPEG圖像壓縮的熵編碼采用的是哈夫曼編碼??梢杂煤唵蔚牟楸矸椒ㄟM行快速的編碼。壓縮數(shù)據(jù)時,哈夫曼編碼對出現(xiàn)頻度比較高的分配比較短的代碼,而對出現(xiàn)頻度較低的分配比較長的代碼。
通過對圖像數(shù)據(jù)的壓縮處理,和各種標記代碼組成一幀一幀的數(shù)據(jù),這樣就組織成了JPEG位數(shù)據(jù)流(JPEG bitstream)。通過標記代碼的識別找到應(yīng)該解壓的壓縮數(shù)據(jù),用解壓方法,就能將JPEG的圖像數(shù)據(jù)讀取出來。
讀取JPEG格式數(shù)據(jù)到本系統(tǒng)中的部分代碼如下:
DICOM(Digital Imaging and Communications in Medicine)標準是用于醫(yī)學(xué)圖像存儲和傳輸?shù)膰H標準。我們研發(fā)的三維醫(yī)學(xué)圖像可視化系統(tǒng)主要是針對醫(yī)學(xué)圖像進行處理,而DICOM醫(yī)學(xué)圖像格式分析與對其圖像數(shù)據(jù)的提取正是醫(yī)學(xué)圖像處理的基礎(chǔ)。
DICOM文件可分為文件頭和數(shù)據(jù)集兩部分。文件頭主要包含文件識別信息,主要由128個00H字節(jié)組成,接下來是DICOM前綴,是一個長度為4字節(jié)的字符串“DICOM”,可以根據(jù)該值來判斷一個文件是不是DICOM文件。緊接著就是最重要的數(shù)據(jù)集。DICOM數(shù)據(jù)集就是由DICOM數(shù)據(jù)元素按照一定的順序排列組成。每個數(shù)據(jù)元素均由標簽(tag)、值的含義(value representation,以VR表示,是可選項),值域長(value length)和值域(value field)組成。DICOM文件結(jié)構(gòu)與數(shù)據(jù)元素如圖1所示。
圖1 DICOM文件結(jié)構(gòu)與數(shù)據(jù)元素
DICOM所有數(shù)據(jù)元素都有一個唯一的標簽,由組號(2字節(jié)無符號整數(shù))和元素號(2字節(jié)無符號整數(shù))組成。本文主要介紹的是圖像數(shù)據(jù)的提取,所以只要找到圖像數(shù)據(jù)所代表的標簽,再編程將圖像數(shù)據(jù)讀出即可。下面幾個數(shù)據(jù)元素的標簽(0028,0010)圖像的行、(0028,0011)圖像的列數(shù)、(7FE0,0010)圖像像素數(shù)據(jù),是在DICOM圖像數(shù)據(jù)提取的過程中必須的。
具體的讀取DICOM圖像數(shù)據(jù)代碼如下:
我們利用VC++6.0開發(fā)工具,對BMP、JPEG及DICOM三種不同格式數(shù)據(jù)源讀取工作進行了研發(fā),并成功在三維醫(yī)學(xué)圖像可視化系統(tǒng)中得到顯示,實驗結(jié)果如圖2至圖4所示。其中,BMP圖像和JPEG原始圖像數(shù)據(jù)分辨率均為256×256像素,DICOM原始圖像數(shù)據(jù)分辨率為512×512像素。
圖2 BMP圖讀入后顯示效果
圖3 JPEG圖讀入后顯示效果
圖4 DICOM圖讀入后顯示效果
由以上顯示效果可知,原始圖像數(shù)據(jù)分辨率為512×512像素的DICOM圖像,它的最終顯示結(jié)果出現(xiàn)了像素的缺失,主要原因就是通過隔行、隔列的讀取方式將512×512圖像的像素數(shù)據(jù)放置到本系統(tǒng)256×256數(shù)組中。對于圖像分辨率為256×256像素的BMP圖像和JPEG圖像數(shù)據(jù)則可以完整顯示。
本文研究了BMP、JPEG和DICOM三種最常見的圖像格式,并針對每一種格式文件實現(xiàn)了與三維醫(yī)學(xué)圖像可視化系統(tǒng)的銜接,從而為后期不同數(shù)據(jù)源單片平面、整體三維可視化工作奠定了基礎(chǔ)。
[1]洪歧,張樹生,楊敏,等.基于三維規(guī)則數(shù)據(jù)場的快速光線投射法[J].計算機工程與應(yīng)用,2007,43(5):39-40.
[2]洪歧,周軍.分割技術(shù)的改進及在醫(yī)學(xué)體視化中的應(yīng)用[J].河池學(xué)院學(xué)報:自然科學(xué)版,2011(5):78-84.
[3]黃敏,馮鑫.單幀DICOM醫(yī)學(xué)圖像的解讀方法及VC實現(xiàn)[J].中南民族大學(xué)報,2010,29(2):53-57.
[4]朱本坤,朱亞奇,劉維婷.基于Windows CE下JPEG圖像的壓縮技術(shù)[J].江南大學(xué)學(xué)報,2009,8(1):29-32.
[5]韓嬌.基于VC++的BMP格式圖像與GIF格式圖像轉(zhuǎn)換[J].武漢理工大學(xué)學(xué)報,2007,29(12):23-25.