楊 平,倪 軍,劉在英
(上海杉達(dá)學(xué)院信息科學(xué)與技術(shù)學(xué)院,上海 201209)
DICOM(Digital Imaging and Communications in Medicine)是醫(yī)學(xué)圖像文件存儲與通信的國際標(biāo)準(zhǔn)。DICOM醫(yī)學(xué)圖像是一個關(guān)于信息體實例的數(shù)據(jù)集,這個數(shù)據(jù)集由很多數(shù)據(jù)元素組成,包含患者、研究、序列和圖像等4層信息,醫(yī)療影像除了圖像以外有許多其它參數(shù),大多數(shù)圖像處理軟件都不支持DICOM圖像文件格式。
本文在Android系統(tǒng)平臺上將DICOM標(biāo)準(zhǔn)圖像的文字信息進(jìn)行提取,顯示醫(yī)生、病人、醫(yī)院、設(shè)備、圖像等基本文字信息;將像素信息轉(zhuǎn)換為Bitmap對象進(jìn)行顯示和圖像處理。目前尚未發(fā)現(xiàn)基于Android系統(tǒng)移動終端的此類醫(yī)學(xué)圖像處理軟件[1]。
圖1 DICOM圖像的結(jié)構(gòu)
基于DICOM標(biāo)準(zhǔn)的醫(yī)學(xué)圖像文件由文件頭信息和像素數(shù)據(jù)組成。文件分單幀圖像文件和多幀圖像文件,整個文件稱之為數(shù)據(jù)集,文件的整體結(jié)構(gòu)如圖1所示[2]。整個圖像文件是由一個一個的數(shù)據(jù)元素組合而成的,而每個數(shù)據(jù)元素又包括如下幾部分:
(1)Tag(group,element):一對有序16位無符號整數(shù),前16位表示組號,后16位表示元素號。
(2)VR(Value Representation):2個字節(jié)的字符串,表示數(shù)據(jù)元素值的類型,例如OB、OW、DA、PN、SH等。
(3)Len:數(shù)據(jù)長度。指的是讀后面數(shù)據(jù)的字節(jié)數(shù)。
(4)VF:數(shù)據(jù)元素值。讀取的長度由前面的Len決定。
表1~表3列出了部分元素結(jié)構(gòu)。
表1 VR為OB OW OF UT SQ UN的元素結(jié)構(gòu)
表2 VR為普通類型時元素結(jié)構(gòu)
表3 隱式VR的元素結(jié)構(gòu)
DICOM定義了一些數(shù)據(jù)元素來規(guī)定這些像素單元的結(jié)構(gòu)數(shù)據(jù)元素及釋義,部分如表4所示[3]。
表4 部分VR值列表
DICOM文件整體結(jié)構(gòu)先是128字節(jié)的導(dǎo)言部分,然后是數(shù)據(jù)元素依次排列。排列的方式就是一個數(shù)據(jù)元素接一個數(shù)據(jù)元素的方式排到文件結(jié)尾。下面以一個DICOM圖像文件在十六進(jìn)制編輯器Uedit32軟件中進(jìn)行數(shù)據(jù)分析。
(1)跳過128字節(jié)導(dǎo)言部分(一般都為0),讀取“DICM”4個字符以確認(rèn)是DICOM格式文件。
(2)隨后讀取的數(shù)據(jù)元素是“02000000554C 040000 A60000”?!?2000000”表示組號和元素號;“554C”意思是 VR 為“UL”,由表1查出沒有預(yù)留位,“0400”即值長度為4,所以后面讀4個字節(jié)“A6000000”,即是“00 A60000”,值為 10878976,指文件元信息長度。
(3)又一個數(shù)據(jù)元素“02001000554914003121000000010200”?!?0020010”表示組號和元素號,該值確定傳輸語法;“5549”意思是 VR為“UI”,由表1查出沒有預(yù)留;“1400”即值長度為20,所以后面讀20 個字節(jié),值為“1.2.840.10008.1.2.1”,該傳輸語法是little字節(jié)序。例如十進(jìn)制數(shù)35280用十六進(jìn)制表示是0xff00,但是存儲到文件中用十六進(jìn)制編輯器打開看到的是00ff,這就是 little字節(jié)序[4]。0002,0010的值有如下3種:
顯示情況下根據(jù)VR和Len確定數(shù)據(jù)類型,根據(jù)數(shù)據(jù)長度直接讀取就可以了。隱式情況只能根據(jù)tag字典確定它是什么VR才能讀取。
(4)tag為“E07F 1000”,即是“7F E00010”表示像素數(shù)據(jù)開始處。后面讀取具體像素便可以進(jìn)行向常用圖像格式轉(zhuǎn)換。
(1)打開DICOM圖像并顯示;
(2)具有窗寬/窗位調(diào)節(jié)功能;
(3)局部放大和全部放大顯示功能;
(4)水平/垂直方向鏡像處理。
DICOM圖像直接按像素從左到右、從上到下,逐行依次掃描。2個字節(jié)表示一個像素,普通DICOM格式存儲的是16位的灰度圖像,其實有效數(shù)據(jù)只有12位,除去0所以最高值是2047。而系統(tǒng)調(diào)色板只能顯示256灰度等級,而且由于人眼的分辨率有限,256灰度級已完全能滿足人眼的辨別極限了。需要將DICOM圖像灰度映射到0~255之間,把12位灰度影射到8位灰度顯示出來。已知的12位灰度值為y,設(shè)要求的8位灰度值為 x,那么,x/255=y/2047,或者,x=255y/2047。
為了較逼真地顯示醫(yī)學(xué)圖像的全部信息,必須對圖像數(shù)據(jù)進(jìn)行窗寬、窗位的調(diào)整,把窗口區(qū)域的圖像數(shù)據(jù)線性地轉(zhuǎn)換到顯示器的最大顯示范圍內(nèi),這樣就可以動態(tài)調(diào)整窗寬和窗位,觀察醫(yī)學(xué)圖像的全部信息。在大多數(shù)情況下,窗寬值都大于圖像數(shù)據(jù)的最大值,圖像的所有灰度信息都落入窗口范圍內(nèi)。采用了線性加窗處理使用公式(1)[5]:
其中:V為原始圖像數(shù)據(jù),W為窗寬,C為窗位,G(V)為轉(zhuǎn)換后的像素值。
2.3.1 圖像鏡像變換
圖像的鏡像變換分為2種:水平鏡像和垂直鏡像。圖像的水平鏡像操作是將圖像的左半部分和右半部分以圖像垂直中軸線為中心鏡像進(jìn)行對換;圖像的垂直鏡像操作是將圖像上半部分和下半部分以圖像水平中軸線為中心鏡像進(jìn)行對換[6]。
設(shè)圖像高度為mHeight,寬度為mWidth,原圖中(x0,y0)經(jīng)過水平鏡像后坐標(biāo)將變?yōu)?mWidth-x0,y0),其矩陣表達(dá)式為:
同樣,(x0,y0)經(jīng)過垂直鏡像后坐標(biāo)將變?yōu)?x0,mHeight-y0),其矩陣表達(dá)式為:
2.3.2 縮放變換
圖像的縮放操作將會改變圖像的大小,產(chǎn)生的圖像中的像素可能在原圖中找不到相應(yīng)的像素點,這樣就必須進(jìn)行近似處理。一般的方法是直接賦值為和它最相近的像素值,也可以通過一些插值算法來計算。
假設(shè)圖像x軸方向縮放比率為fx,y軸方向縮放比率為fy,那么原圖中點(x0,y0)對應(yīng)于新圖中的點(x1,y1)的轉(zhuǎn)換矩陣為:
其逆運算如下:
即:
例如,當(dāng)fx=fy=0.5時,圖像被縮放到一半大小,此時縮小后圖像中的(0,0)像素對應(yīng)于原圖中的(0,0)像素;(0,1)像素對應(yīng)于原圖中的(0,2)像素;(1,0)像素對應(yīng)于原圖中的(2,0)像素,以此類推。在原圖基礎(chǔ)上,每行隔一個像素取一點,每隔一行進(jìn)行操作。其實是將原圖每行中的像素重復(fù)取值一遍,然后每行重復(fù)一次。
讀DICOM文件的流程圖如圖2所示。
圖2 讀取DICOM文件的流程圖
灰度圖像像素的轉(zhuǎn)換以及顯示,部分核心代碼如下:
顯示DICOM文件的文本信息和圖像信息的運行界面分別如圖3和圖4所示。
圖3 DICOM圖像的部分文字信息顯示
圖4 DICOM圖像分別在不同寬窗窗位的顯示
3.2.1 縮放圖像處理
實現(xiàn)圖像縮放是在創(chuàng)建Bitmap圖像時用如下方法創(chuàng)建:createScaledBitmap(Bitmap src,int dstWidth,int dstHeight,Boolean filter):對源位圖src進(jìn)行縮放,縮放成寬dstWidth、高dstHeight的新位圖。如果對局部放大用如下方法創(chuàng)建:createScaledBitmap(Bitmap src,int x,int y,int width,int height):對源位圖 source的指定坐標(biāo)點(給定x,y)開始,從中“挖取”width、height的一塊出來,創(chuàng)建新的Bitmap對象。運行的效果如圖5所示。
圖5 全部放大圖和局部放大圖
3.2.2 水平/垂直鏡像圖像處理
水平/垂直鏡像圖像處理的部分核心代碼如下:
垂直鏡像和水平鏡像運行的效果如圖6所示。
圖6 圖像的垂直鏡像和水平鏡像
本文分析DICOM醫(yī)學(xué)圖像的格式,提取圖像的文本信息,實現(xiàn)了對單幀的圖像灰度轉(zhuǎn)換并顯示,在轉(zhuǎn)換過程中采用了調(diào)窗技術(shù)進(jìn)行其灰度的變換。實現(xiàn)了圖像的局部以及全局的縮放,水平和垂直鏡像圖像處理。該實驗在三星N7100 GALAXY Note2手機(jī),Android 4.1系統(tǒng)上進(jìn)行。對于1M的DICOM灰度圖像文件顯示的耗時平均約900ms,圖像處理耗時平均約600ms,處理速度快,顯示效果良好。
目前,本系統(tǒng)只能顯示DICOM格式的灰度圖像文件,還不能顯示DICOM的彩色圖像。實現(xiàn)的圖像處理只是幾何圖像處理,針對具體臨床使用的圖像處理有待研究和開發(fā)。
該實驗在移動終端上實現(xiàn),能更方便醫(yī)生進(jìn)行會診和醫(yī)學(xué)分析。后續(xù)工作是希望充分利用平板電腦觸摸屏操作的優(yōu)勢,實現(xiàn)更多的醫(yī)學(xué)圖像處理。
[1]楊博菲,呂衛(wèi),褚晶輝,等.基于Android平臺的醫(yī)學(xué)圖像顯示軟件設(shè)計[J].中國醫(yī)學(xué)物理學(xué)雜志,2012,29(3):3375-3379.
[2]邱明輝,張紀(jì)國.基于DICOM標(biāo)準(zhǔn)的醫(yī)學(xué)圖像顯示與處理系統(tǒng)的研究與實現(xiàn)[J].醫(yī)院數(shù)字化,2004,19(11):18-20.
[3]ISO 12052:2006,Digital Imaging and Communications in Medicine(DICOM)[S].
[4]Assassinx.Dicom格式文件解析器[EB/OL].http://www.cnblogs.com/assassinx/archive/2013/01/09/dicom-Viewer.html,2013-01-09.
[5]孫亦博,朱玲利.DICOM醫(yī)學(xué)圖像與BMP格式的轉(zhuǎn)換研究[J].現(xiàn)代計算機(jī),2010(8):121-124.
[6]詹青龍,盧愛芹.數(shù)字圖像處理技術(shù)[M].北京:清華大學(xué)出版社,2010.
[7]徐潘輝,林峰.DICOM醫(yī)學(xué)數(shù)字圖像格式與BMP通用圖像格式轉(zhuǎn)換軟件的設(shè)計與實現(xiàn)[J].醫(yī)療設(shè)備信息,2006,21(3):1-5.
[8]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2012.
[9]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2011.
[10]Gonzalez R C,Woods R E.Digital Image Processing(3rd Edition)[M].北京:電子工業(yè)出版社,2010.
[11]章毓晉.圖像處理和分析[M].北京:清華大學(xué)出版社,1999.
[12]吳志福.基于DICOM標(biāo)準(zhǔn)的醫(yī)療影像管理系統(tǒng)的研究[D],西安:西安電子科技大學(xué),2012.
[13]林紅利,陳真誠,王偉勝.DICOM醫(yī)學(xué)圖像顯示算法改進(jìn)與實現(xiàn)[J].計算機(jī)系統(tǒng)應(yīng)用,2010,19(6):204-207.
[14]楊文君,宋曉梅.基于Android平臺的圖像采集系統(tǒng)[J].西安工程大學(xué)學(xué)報,2012,26(4):494-496.