2016-01-28 60 views
4

自從幾天以來,我正在使用DICOM文件,使用FO-DICOM。瞭解DICOM圖像中的BPP

我爲我的測試使用了一組dicom文件,並且我一直在打印「Photometric Interpretation」和「Sample Per Pixel」值,以便更好地瞭解我是哪種圖像與...合作。

結果是「MONOCHROME2」用於光度測量解釋,「1」用於每像素採樣。

我通過閱讀該標準的第3部分了解到,MONOCHROME2代表灰度級,從黑色開始代表最小值。

但是每個像素的採樣是什麼樣的?我認爲這是代表每像素字節(而不是比特)的數量(這將是邏輯有每像素8 爲灰色權的規模有多大?)

但在這裏我的問題是,實際上,我的圖像似乎有32 bpp。 我正在處理512 * 512像素的圖像,並將它們轉換爲字節數組。所以我期待512 * 512 = 262144字節的數組。 但我得到了1048630字節的數組(有點超過4 * 262144)

有人有解釋嗎?

編輯:

這裏的是我的一些DATAS的:

PhotometricInterpretation=MONOCHROME2 
SamplePerPixel=1 
BitsAllocated=16 
BitsStored=12 
HighBit=11 
PixelRepresentation=0 
NumberOfFrames=0 
+0

關於樣本數據:使用16位對齊編碼的無符號12位數據,低12位是像素值。 0是黑色,4096是白色。如果它是一個CT,我認爲它具有接近-1000的RescaleSlope屬性,它將像素值映射到hounsfield單位。當行數= Cols = 512時,像素數據必須爲0.5 MB(512 * 512 * 2個字節),否則數據集編碼不正確。 NumberOfFrames = 0肯定是編碼錯誤。 –

+0

...假設數據集是未壓縮的 –

+0

謝謝,我會操縱這些數據來訓練自己,也許以後會回來,如果還有些東西不明確:) – Charrette

回答

5

屬性(0028,0002)SamplesPerPixel僅指彩色圖像,並告訴你這是目前在飛機數量圖像(例如3爲RGB),所以你有每個像素8位(我將在下面重新討論BPP)。只要你有PhotometricInterpretation = MONOCHROME1或MONOCHROME2,你可以預期SamplesPerPixel是1,沒有別的。

什麼你必須要考慮到爲每像素的位數:

BitsAllocated (0028,0100) 
BitsStored (0028,0101) 
HighBit (0028,0102) 

這些告訴你有多少位被用於編碼像素值(BitsAllocated),並且這些位真正含有的灰度信息(BitsStored,HighBit)。 HighBit是基於零的,通常但不一定是= BitsStored-1

一個例子來說明這一點:對於CT圖像,在以-1000到+3000範圍的hounsfield單位表示灰度值是非常常見的。這些是由其中存儲有與一個2字節的對準12位,所以表示

BitsAllocated (0028,0100) = 16 
BitsStored (0028,0101) = 12 
HighBit (0028,0102) = 11 

另一自由度是PixelRepresentation它告訴你如果像素數據進行編碼的無符號(0)或在二進制補(1 )。我已經看到了CT圖像,但是對於CT以外的圖像類型,標記像素數據是非常不尋常的。

在你的例子中,我會假定位分配== 32或(不太可能),你有一個包含多個圖像('幀')的數據集,所以NumberOfFrames (0028,0008)> 1.如果幀數不存在,你可以安全地假定只有一個幀。

我在這裏過分簡化了一些,特別是關於彩色圖像,但我認爲這足夠複雜了;-)。基本上,DICOM提供任何可想象的自由度來對像素數據進行編碼並在頭中描述編碼。

我想我建議你在最近的帖子中看看DCMTK。 DicomImage類具有一個很好的界面(getInterData()),它關心所有這些東西,並以標準格式提供從DICOM文件中讀取的像素數據。

[編輯]:隨意發佈DICOM轉儲的數據集在這裏,我會看看它,並告訴你如何解釋像素數據。

+0

謝謝你的回答,我仍然試圖使用fo-dicom,稍後我會看看DCMTK,現在我試圖瞭解它是如何工作的!我編輯了我的帖子 – Charrette

+0

不想讓你使用DCMTK,但我不知道FO-DICOM –

+0

如果每像素採樣數(0028:0002)的值大於1(3爲RGB圖像),平面配置( 0028:0006)具有值0意味着逐個像素(RBG,RGB,RGB),而1意味着逐個平面(紅色平面,綠色平面和紅色平面)。 –