??上一篇文章分析了如何決議DICOM影像,在此基礎上,本文章將講解如何計算CT值,
主要流程如圖所示:

??不同設備產生的DICOM影像像素格式不同,比如CT影像保存的是Hu值,超聲(US)影像保存的是RGB值,
??以最常見的CT影像舉例:
??CT值的單位是Hounsfield,簡稱為Hu,范圍是 -1024-3071,資料范圍是4096,用于衡量人體組織對X射線的吸收率,設定水的吸收率為0Hu,
??CT值越高,影像顯示越白,比如骨頭CT值高,成亮白色,空氣CT值低,成黑色,脊柱顏色亮白,肺中空氣黑色,

??Dicom影像中PixelData存盤的值并不是CT值,CT值需要計算才能獲得,
??CT影像一個像素一般占兩個位元組,其中使用前12個bit存盤像素值,即能表示的資料范圍在2^12=4096,覆寫了CT值范圍,一般醫院影像科看CT影像都是在醫用顯示幕上看,能達到12bit灰階,所以可以完整的顯示所有的像素,一般這種顯示幕價格在數萬元,
??而普通的顯示幕是8bit灰階,顯示范圍在0-255,所以只能顯示部分像素值,需要通過調整窗寬窗位來顯示不同的像素,
??網上很多博客描述CT值計算,需要讀取兩個DICOM Tag資訊,(0028|1052):rescale intercept和(0028|1053):rescale slope.
然后通過公式:
Hu = pixel * slope + intercept
??如果通過DCMTK等框架來實作是沒有問題,框架已經將PixelData中的像素值計算出來,可以直接用來計算CT值,
??但如果自己實作DICOM決議引擎,則PixelData中的像素值需要進行一些轉換才能使用,
CT影像中和CT值計算的Tag:
(0028,0002) Samples per Pixel
??每一個像素的取樣數,一般來說,CT,MR,DR等灰度影像都是1,而彩超等彩色影像都是3,分別表示R, G, B三個顏色通道,
(0028,0100)Bits Allocated
??一個像素的像素值占用了多少位bit,一般是兩個位元組,16bit
(0028,0101)Bits Stored
??一個像素的像素值使用了多少位bit,一般是12bit
(0028,0102)High Bit
?? 最高位序號,它定義了存盤點在分配的記憶體中的排列方式,它的值是最后一個bit的序號,如果第一個bit放在0位,那么最后一個bit為Bits Stored -1
(0028,0103)Pixel Representation
??像素值的資料表示形式,0表示unsigned integer. 無符號整數,直接保存像素值本身,1表示二補數,保存的是像素值的二補數,其實就是有符號整數,此時像素值可正可負,
(0028,1052)Rescale Intercept
??縮放截距
??CT影像的Hu值有正值和負值,而PixelData中資料通常存盤為無符號整數,使用12bit可以存盤0-4095的正值,存盤同樣范圍的包含負值和正值需要占用更多的位元組,為了可以通過PixelData計算出負值Hu值,可以通過數學公式中的斜率和截距來計算,因此,CT DICOM檔案通常具有負截距,線性縮放也適用于這樣的情況,一個像素可能有一個大范圍的值,而存盤的值盡可能少的位元,同時避免量化錯誤,
(0028,1053Rescale Slope
??縮放斜率
通過如下方式方式獲取CT值:
- 通過(0002,0010) Transfer Syntax UID判斷影像是否壓縮格式,如果壓縮呼叫相應的解壓縮演算法解壓
- 通過(0002,0010) Transfer Syntax UID判斷影像是大端還是小端,進行位元組級別的移位,如果是小端則前后位元組整體進行互換,位元組內bit順序不變,如果是大端則不變,
- 通過(0028,0100)Bits Allocated,(0028,0101)Bits Stored,(0028,0102)High Bit對資料進行操作,
比如一般Bits Allocated為16,Bits Stored為12,High Bit為11,表示一個像素占用兩個位元組,其中使用了前12個位元組,則Pixel = Pixel && 0x0FFF, - 通過(0028|1052)rescale intercept和(0028|1053)rescale slope計算CT值Hu = pixel * slope + intercept
??以上步驟計算出 -1024-3071范圍內的CT值,下篇文章會講解如何從12位bit CT值轉換為8bit RGB值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353544.html
標籤:其他
上一篇:Jetson 系列——基于yolov5對火源或者煙霧的檢測,使用tensorrt、c++和int8加速
下一篇:影像的代數運算
