DCMTK读取pixelBuffer或图像属性行,列将返回0

问题描述

我成功编译了DCMTK,并在macOS 10.15的Xcode项目中使用了它。我可以读取/解压缩JPEG图像,但是无法读取一些DICOM文件

使用DicomImage *di = new DicomImage(dfile,xfer,CIF_UsePartialAccesstoPixelData,1);返回零图像。读取dataset->findAndGetUint16(DCM_Rows,rows)返回0(对于行或列),读取像素数据返回0 ....

使用dcmdump检查文件可返回正确的数据:

# Dicom-File-Format

# Dicom-Meta-information-Header
# Used TransferSyntax: UnkNown Transfer Syntax

# Dicom-Data-Set
# Used TransferSyntax: Little Endian Implicit
(0008,0008) CS [DERIVED\PRIMARY\OTHER]                  #  22,3 ImageType
(0008,0014) UI [1.2.840.113701.4.1.6653]                #  24,1 InstanceCreatorUID
(0008,0016) UI =MRImageStorage                          #  26,1 SOPClassUID
(0008,0018) UI [1.2.840.113701.4.1.6653.3.264.4.9.6.0]  #  38,1 SOPInstanceUID
---
(0008,0070) LO [Toshiba]                                #   8,1 Manufacturer
(0008,0080) LO [TOSHIBA Nasu Works. Bay-6653.]          #  30,1 CompanyName
(0008,1010) SH [FLEXART]                                #   8,1 StationName
---
(0008,1090) LO [MRT150]                                 #   6,1 ManufacturerModelName
(0010,0010) PN [GGGGGG^WWWWW]                           #  12,1 ComponentName
(0010,0020) LO [TMS04]                                  #   6,1 ComponentIDNumber
(0010,0030) DA [19000100]                               #   8,1 ComponentManufacturingDate
(0010,0032) TM [000000]                                 #   6,1 PatientBirthTime
(0010,0040) CS [F]                                      #   2,1 PatientSex
(0010,1030) DS [79.000000]                              #  10,1 PatientWeight
---
(0020,0052) UI [1.2.840.113701.4.1.1.1]                 #  22,1 FrameOfReferenceUID
(0020,4000) LT (no value available)                     #   0,0 ImageComments
(0028,0002) US 1                                        #   2,1 SamplesPerPixel
(0028,0004) CS [MONOCHROME2]                            #  12,1 PhotometricInterpretation
(0028,0010) US 512                                      #   2,1 Rows
(0028,0011) US 512                                      #   2,1 Columns
(0028,0030) DS [0.000312\0.000312]                      #  18,2 PixelSpacing
(0028,0100) US 16                                       #   2,1 BitsAllocated
(0028,0101) US 16                                       #   2,1 Bitsstored
(0028,0102) US 15                                       #   2,1 HighBit
(0028,0103) US 0                                        #   2,1 PixelRepresentation
(0028,0106) US 3                                        #   2,1 SmallestimagePixelValue
(0028,0107) US 1030                                     #   2,1 LargestimagePixelValue
(7fe0,0010) OW 8064\8064\8064\8064\8064\8064\8064\8064\8064\8064\8064\8064\8064... # 524288,1 PixelData

我试图强制数据集使用EXS_LittleEndianExplicit作为dataset->chooseRepresentation(EXS_LittleEndianExplicit,NULL).bad(),但是它返回true(不成功)。

我不知道有什么问题。所有DCMTK库和应用程序似乎都已正确编译,我的代码是用Objective-C ++编写的,因此我可以毫无问题地调用DCMTK函数。我希望我不需要编写自定义解析器。我尝试在Osiri,Miele,Horos ..中打开文件。所有导入并正确显示图像。

我真的很感谢任何想法...谢谢。

解决方法

如果压缩处理不起作用,则DCMTK会出现典型错误:

  1. 忘记使用JPEG支持进行编译(这是您可以在CMake中设置的选项
  2. 忘记初始化编解码器

通过以下方式简单地初始化编解码器

DJDecoderRegistration::registerCodecs(); 
DJEncoderRegistration::registerCodecs();

...但是请看一下这些方法的参数,这些参数可能与默认设置不同。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...