为何BitsAllocated=16、PixelRepresentation=1时DCMTK的getSInt16Array调用失败?
问题原因分析
DCMTK的类型校验严格绑定VR值:
DCMTK的getSInt16Array()方法仅处理VR为SS(Signed Short)的DICOM元素,但DICOM标准中PixelData元素的VR固定为OW(Other Word,16位无符号字类型),无论PixelRepresentation是0(无符号)还是1(有符号)。因VR不匹配,调用getSInt16Array()会直接返回空指针。getUint16Array()的兼容性设计:getUint16Array()对应的VR是US(Unsigned Short),而OW的存储格式和US完全一致(均为2字节无符号单元),因此DCMTK允许用getUint16Array()读取PixelData的OW数据,能正常获取有效指针。PixelRepresentation仅为语义标识:
该属性仅在语义层面说明像素数据的解读规则(有符号/无符号),不会改变PixelData本身的VR类型和二进制存储格式。将uint16_t指针强制转换为signed short,只是按照有符号规则解读二进制数据,与实际存储的像素值匹配,因此能显示正确图像。
内容的提问来源于stack exchange,提问作者Qiang Zhang
相关产品推荐
相关产品推荐

