![](/img/trans.png)
[英]How can I create a DICOM file from a existing opencv Mat image using dcmtk?
[英]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時,一切似乎都可以,我可以看到圖像! :-(
現在我有兩個問題:
關鍵是像素表示 (0028,0106)數據元素。
PixelRepresentation = 0 -> unsigned
PixelRepresentation = 1 -> signed
在您的情況下,您的值為'1',因此您必須讀取並將值解釋為有符號整數。
您可以在此處找到更多信息。
從未使用過dcmtk,但看起來你必須應用模態VOI的斜率/截距參數才能獲得正確的數字。
根據文檔,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.