前言:本站為你精心整理了DICOM醫學技術及DIB顯示范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。
1dicom文件的讀取
DICOM文件的讀取就是讀取DICOM的某些數據元素,從而獲得顯示DICOM文件所需要的必要信息和圖像的數據,如讀取傳輸語法(Transfersyntax),就可以獲得VR顯式還是隱式,字節排序格式,圖像數據的壓縮格式等信息;讀取像素抽樣值(SamplesperPixel),每抽樣值位分配(BitsAllocated),行數,列數,實際存儲像素的位數(BitsStored)、幀數、位深、符號標志、窗寬、窗位等。當然還可以獲得其他一些信息,如查詢等信息,本文在此不再展開。讀取數據元素并獲得數據元素中存儲的值時,應根據傳輸語法的規定,獲得數據的隸屬類型,字節排列格式,并對數據進行相應處理。
2數據的轉換處理
DICOM讀取來的圖像數據,如果每抽樣值位分配(BitsAllocated)大于8,此時以字為單位存儲圖像數據的像素抽樣值,要想顯示DICOM圖像文件,必須進行數據轉換處理,數據轉換處理過程依次為高低字節交換,高位截取,重調整。當每抽樣值位分配(BitsAllocated)大于8,也就是一個像素抽樣值需要高于8位才能表示,以一個字為單位存儲像素的抽樣值,會由于傳輸語法中規定的字節排列格式不同,而產生字存儲的數據表達的意義不同,同時還會出現16位(一個字)中可能真正表示像素值的要少于16位。以CT為例,在DICOM文件中,CT圖像的(SamplesperPixel)為1,也就是只需要一個像素抽樣值來表示像素,而每像素抽樣值由12位來表示,此時16位中真正存儲像素值的只占12位,那么想正確顯示CT圖像,就需要根據字節排列格式重新調整字節排列,同時將多余的4位去掉。
(1)高低字節交換傳輸語法規定了DICOM文件中字節的排列格式,如果字節的排列格式BIG_ENDIAN并且每抽樣值位分配(BitsAllocated)大于8位(一個字節)時,需要將以字為單位存儲的圖像數據進行高低字節轉換,既將16位(一個字)前8位和后8位互換位置;否則不進行高低字節交換處理。
(2)高位截取由于DICOM文件常用2個字節存儲圖像數據像素值,但是很多圖像格式實際每像素所用位數可能少于16位(如CT為12位),所以從DICOM文件中讀取來的數據不能進行直接顯示,必須經過預先處理,提取實際的像素數據,將高位數據進行截取。截取時,從標號為(0028H,0102H)的數據元素中獲取最高位(HighBit)信息,從(0028H,0101H)數據元素中獲得實際存儲像素位數(BitsStored),就可以知道每像素所占位數,然后截取高位,得到最終的像素值。截取時,如果是無符號,則直接獲得低nHeight+1位所表示的整數,前面位數補零,否則對這個數按2取余。假設當前以nHeight表示最高位數值,并且最高位(HighBit)=實際存儲像素位數(BitsStored)-1,此時高于第nHeight的數位與圖像數據無關,幾乎可以不用考慮,即高15-nHeight位根本不用考慮,只看低nHeight+1位,如果是無符號,則直接獲得低nHeight+1位所表示的整數,否則對這個數按2求補。
(3)DICOM文件中特殊圖像格式的數據重調整該過程單對某些特殊圖像進行的處理,用來將DICOM文件里存儲的數值與實際有意義的值之間做一個線性變換,使獲得的數值具有實際的意義。以CT圖像為例,必須將DICOM文件中獲得的像素值先轉換成Hounsfield值,再做窗寬窗位調整。因為在DICOM文件中,CT圖像需要12位來存儲,但是一般CT值的范圍在-1000~+32768之內變化,不便于存儲,需要將其通過線形變換到一個便于存儲的數據范圍。所以當進行DICOM文件讀取時,需要將存儲數據反變換為實際有意義的數據。對于一般的圖像,可以直接將從DICOM文件中獲得的數據進行調窗處理,但是對于某些特殊的圖像(CT等),首先需要將獲得的圖像數據進行重新調整,然后才能進行窗寬窗位處理。在(0028H,1052H)和(0028H,1053H)數據元素中分別存儲fRescaleIntercept和fRescaleSlope的值,相當于截距和斜率,重新調整根據如下公式:HU=pixel_value*fRescaleSlope+fRescaleIntercept。這種線形調整僅對某些格式圖像有意義,例如CT圖像,PET有時也用到它們,但是其他格式的圖像中(0028H,1052H)和(0028H,1053H)兩個數據元素的值分別為0和1;對CT而言,CT值是從-1024開始的,所以這兩個值也可以為負值。
(4)數據備份對經過上面(1)、(2)、(3)步調整的數據進行備份保存。在對圖像的處理過程中,由于醫生對于感興趣區域的變化,以及先前得到的窗寬窗位可能并不是最佳顯示,所以就需要不斷的去調整窗寬窗位,而每次調窗處理都必須重新獲得原來備份數據,然后再去進行調整,所以在每次調窗前,必須先備份原始數據。
3調窗處理(窗寬窗位調整)
所謂調窗處理(C/W),原理上是根據預知的窗寬和窗位值,獲得需要顯示的窗口大小(窗寬)和中心位置(窗位),從而將窗口內的值轉換成顯示時的最亮和最暗范圍內的值,高于窗口灰度范圍的部分置為最亮,低于窗口灰度范圍的部分置為最暗。其中:V為圖像數據,G為顯示器的顯示值,為顯示器的最大顯示值,W為窗寬,C為窗位。調窗處理中,窗寬(Windowwidth)是指需要顯示圖像的范圍,調節窗寬主要影響對比度,窗寬越大,圖像灰度層次多,組織對比減少,細節顯示差,而窗位(windowlevel)也稱窗中心(windowcenter),表征顯示區域的中心位置。譬如骨骼的窗寬(C)、窗位(W)分別為C=400,W=2000,那么就可以利用調窗處理,將窗寬調節到骨骼窗寬,窗位調節到骨骼的窗位,然后利用上面的公式將圖像V換算成顯示器顯示值,最終得到的結果是只顯示窗口范圍內的圖像,也就是骨骼,而將窗口范圍外的分別置最暗或最亮。
(1)初始窗寬窗位變換當打開一個DICOM時,我們就想立刻看到它的顯示,并且想看到圖像的較好顯示效果,但是當前并不能手動調節窗寬窗位的值,所以就需要獲得窗寬和窗位值的一個預先定義值,通過窗寬和窗位來對DICOM文件中讀取的數據進行變換,最終顯示出來。有兩種途徑去顯示一個動態范圍,一種是在DICOM文件中存儲了窗寬和窗位值,直接利用窗寬窗位進行變換;另一種方式就是在不知道窗寬窗位值的前提下,通過某些運算得到這兩個值。下面就兩種途徑進行分解說明:(a)如果DICOM文件中未標記窗寬窗位,也就是存儲窗寬窗位的數據元素(0028H,1050H)和(0028H,1051H)中的值均為0。此時應該在整個圖像內部找到灰度最大值nMax和最小值nMin,設置初始的窗寬(windowwidth)值為nMax-nMin,窗位(windowcenter)為(nMax+nMin)/2,根據下面公式,將最大值和最小值范圍內的數據變換到0~255灰度范圍內顯示。其中nMax和nMin分別表示DICOM圖像的灰度最大值和最小值,x為nMin到nMax范圍內的某儀灰度值(nMinxnMax),y表示0到255范圍內的一個灰度值,通過上面的公式就可以將nMin到nMax范圍內的圖像灰度值x變換到0到255范圍內的灰度值y來顯示。(b)如果存儲窗寬窗位的數據元素(0028H,1050H)和(0028H,1051H)中的值不為0,表明此時DICOM圖像提供窗寬窗位數據進行調整,調整的原理與上面相似,只是此時的窗寬窗位直接由(0028H,1050H)和(0028H,1051H)數據元素提供,此時公式(1)就會變為:y=(x-(Level-Width/2•0))×255•0/Width;(2)為了提高精度,可以運用半精度法對窗口范圍內的圖像數據進行調整。
(2)手動窗寬窗位調整在圖像處理工程中,可能會多次進行調窗處理,獲得某時候的感興趣區域的顯示,這就需要手動的調整窗寬窗位的值,對動態范圍進行顯示。(a)獲得備份數據上面曾提到,當打開DICOM文件并顯示其圖像時,都首先根據窗寬窗位來算出一個顯示值,最終顯示在顯示器上,既DICOM文件解析出像素值轉換→中間數據(高位截取等)調窗轉換→pValue(顯示值)生成→bitmap顯示,而每一次窗寬窗位調整必須獲得中間數據,這樣才能達到利用調窗顯示不同感興趣區域的目的,所以對于每次調窗之前需要先備份中間數據。(b)手動調窗獲得了備份數據后,通過不斷改變窗寬和窗位值,利用公式(3)進行手動調窗。
(3)非線性調窗根據人眼對于灰度的反應是非線性的,對亮色比對暗色敏感性強的特點,獲得中間數據(高位修剪/CT值)的最大nMax和最小灰度nMin,然后通過調整gamma值,將x非線性轉換為y來顯示圖像。y=255•0×pow(x/(nMax-nMin),1•0/gamma);如果希望將圖像的整個灰度級以不同對比度盡量通過顯示設備灰度級顯示(PC顯示一般為256個灰度級),本文分別利用折線和貝塞爾曲線實現圖像灰度級到顯示設備灰度級的轉換(見圖2、圖3)。通過人為的拉動曲線,獲得從圖像灰度到顯示器灰度的對應函數,使得對于那些不重要的區域,可以調整曲線,使得變化率很小,這樣相當于將較大的區域轉換到0~255很小的區域,相反對于感興趣區域,就盡量使得變換率特別大,這樣就可以獲得感興趣區域較大的對比度,同時又保留了一些其他區域的細節信息。
(4)去除白斑(1)和(2)以及(3)的調窗處理后,最終都需要將得到的pValue(顯示值),也就是利用公式(1)或(2)或(3)得到的y值,進行上溢(overflow)和下溢(underflow)判斷處理,否則會形成白斑。
4圖像的DIB顯示
在過程3的調窗處理中,無論初始窗寬窗位變換還是手動調窗處理,最終都需要進行圖像的顯示。由于計算機系統下不能直接支持DICOM醫學圖像的顯示,而DIB顯示是計算機中普遍應用的位圖文件格式,所以本文以DIB顯示DICOM醫學圖像。在內存中,以DIB顯示只需要包含位圖信息頭(BITMAPIN-FOHEADER),顏色表(RGBQUAD)以及圖像數據就可以顯示,所以構建DIB數據塊結構。本文首先對調窗處理后的pValue(顯示值)變換為DIB數據塊,然后利用CDib類的Create()函數創建CDib對象,最后顯示圖像。位圖信息頭(BITMAPINFOHEADER)顏色表(RGBQUAD)圖像數據圖9DIB數據塊的結構生成DIB數據塊:(1)獲得數據元素(0028H,0004H)中圖像顏色系統(PhotometricInterpolation),如果圖像顏色系統為RGB或者YBR格式,則置調色板大小為0,否則調色板大小為sizeof(RGBQUAD)×256,即:4×256=1024,(2)判斷調窗處理后每行字節數是否為4的倍數,如果不是4的倍數,則需要在每行末尾補n個0,生成新的數據區。其中n=列數4%,由于調窗前為字存儲,調窗后變換為0~255灰度級,為字節存儲,即每個像素由一個字節表示,所以調窗處理后圖像數據區大小應該為原來的一半,每行字節數就變成了列數。(3)申請DIB數據區,大小為nLength+sizeof(BITMAPINFOHEADER)+4*256+nCols4%*nRows其中nLength為調窗處理后生成的圖像數據區的大小(為調窗前數據區的大小);4*256為調色板大小;nCols為列數,nRows為行數,nCols4%*nRows為(2)中補的0的個數。(4)填寫bmp頭信息(BITMAPINFOHEADER),并將頭信息寫入DIB數據區;如果調色板不為0,則將顏色表(調色板)寫入DIB數據區;將(2)中生成的新的圖像數據寫入DIB數據區。(5)調用CDib類中的Create()函數生成CDib對象,最后顯示圖像。
5結束語
本文基于DICOM3•0標準,介紹了DICOM中比較關鍵的調窗處理技術和dib顯示技術,嘗試以一些線性以及非線性調窗技術,實現DICOM醫學圖像數據到顯示器設備灰度級的映射,并采用DIB顯示技術,實現了DICOM醫學圖像的計算機顯示。本文利用折線和貝塞爾曲線實現非線性調窗,既實現了DICOM醫學圖像動態范圍到顯示器灰度級的映射,又保留了一些范圍外細節。