我正在使用 dcmtk 来读取 dicom。在此 dicom 中,BitsAllocation=16,PixelRepresentation=1。这意味着像素数据的类型是有符号的int 16。然后,我使用
e->getSInt16Array(pImg)
来读取DCM_PixelData
,但pImg
是一个空指针。然而,e->getUint16Array(pImg)
给出了一个很好的pImg
,并且在我将pImg
更改为int16后它显示了正确的图像:(signed short)pImg
。
我的问题是:为什么
e->getSint16Array(pImg)
对于 BitsAllocation=16 和 PixelRepresentation=1 失败,但 e->getUint16Array(pImg)
成功?
在 DICOM 中,像素数据 (7fe0,0010) 元素以“OB”(8 位无符号整数)或“OW”(16 位无符号整数)的值表示 (VR) 存储,即 getSint16Array() 不适用。该方法是 DCMTK 的 dcmdata 模块的一部分,该模块不处理像素数据编码的细节,例如符号扩展。
如果您想要对 DICOM 图像进行更复杂的支持,您应该考虑使用 DCMTK 的 dcmimgle/dcmimage 模块。