簡體   English   中英

當我使用dcmtk時,為什么要從2 ^ 15中減去我的dicom圖像的像素值?

[英]Why should I subtract my pixel values of dicom image from 2^15 when I'm using dcmtk?

我正在使用dcmtk來讀取dicom圖像,我對新樣本有以下屬性:

(0028,0004) Photometric Interpretation: MONOCHROME2
(0028,0010) Rows: 512
(0028,0011) Columns: 512
(0028,0030) Pixel Spacing: 0.4688\0.4688
(0028,0100) Bits Allocated: 16
(0028,0101) Bits Stored: 16
(0028,0102) High Bit: 15
(0028,0103) Pixel Representation: 1
(0028,0106) Smallest Image Pixel Value: 0
(0028,0107) Largest Image Pixel Value: 2732
(0028,1050) Window Center: 1366
(0028,1051) Window Width: 2732

我使用getOutputData(16)來讀取int16_t數據。 令我感到驚訝的是,因為接近-1 *(2 ^ 16)的值是負值,當我將值減去2 ^ 15時,一切似乎都可以,我可以看到圖像! :-(

現在我有兩個問題:

  1. 為什么我要減去2 ^ 15的值,它會好嗎? 圖像上沒有可用的填充值
  2. getOutputData的文檔中,它講的是渲染的像素數據總是無符號的。 當我的圖像數據被簽名時,這意味着什么,因為(0028,0103)屬性對我說了什么? 如果這種方法不正確,那么我可以通過dcmtk獲得真實數據嗎?

關鍵是像素表示 (0028,0106)數據元素。

PixelRepresentation = 0 -> unsigned
PixelRepresentation = 1 -> signed

在您的情況下,您的值為'1',因此您必須讀取並將值解釋為有符號整數。

您可以在此處找到更多信息。

從未使用過dcmtk,但看起來你必須應用模態VOI的斜率/截距參數才能獲得正確的數字。

請參閱重新縮放斜率和重新縮放截距以及DICOM圖像的窗口寬度和中心計算

根據文檔,getOutputData在呈現之前應用表示VOI,因此您始終可以獲得未簽名的數據。 因此,如果要求16位數據,無論數據集中指定的最小值和最大值如何,您都將獲得從0到65535的像素范圍; 這是因為要顯示返回的數據,它不是存儲在圖像中的原始數據。 我認為你應該正確地將值移位8位,或者只是要求8位數據(即使圖像是16位):我認為如果灰度無論如何你的圖形卡都不能處理16位。

DICOM標題表示數據作為有符號值存儲在DICOM文件中,但看起來文檔說getOutputData將其轉換為無符號值。 所以,嘗試將getOutputData的輸出讀取為uint16_t而不是int16_t。

我找到了答案。 它由好的開發人員在這里解釋。 請參閱第2頁。它與DCMTK工具包完全相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM