如何在设备上合法显示DICOM 16无符号整数是否支持8位无符号整数?

时间:2013-05-06 14:40:02

标签: ios opengl-es dicom grayscale

我正在开发iOS上的医疗应用。 iOS设备仅支持带有GL_LUMINANCE的GL_UNSIGNED_BYTE,或者通常仅支持每个组件8位。现在我有一些灰度图像是16位无符号整数,我想显示它们。我发现我们不能显示16位无符号整数,因此我应该将它们转换为8位无符号整数。但在医疗方面,我不应该丢失数据或者应该减少数据丢失。

现在,我的问题是:如何通过医疗中的合法转换将16位无符号整数转换为8位无符号整数?现在我用最简单的方法来做到这一点。只需将其分为256:-O。其他一些商业软件正在这样做,他们正在使用它们。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

必须转换这些值,以便显示应用窗口级别

灰度Dicom图像通常有两个数据元素(Dicom字段),其中包含值WC(窗口中心,数据元素:0028,1050)和WL(窗口级别,数据元素:0028,1051)。这些值定义了显示图像中包含的信息所必需的线性方程。

您可以找到有关窗口级here概念的更详细说明。

答案 1 :(得分:1)

我通过将每个像素除以一个值(矩阵中的最大值或最亮/ 256)来尝试它,然后每个像素变为8位值。当我应用https://www.dabsoft.ch/dicom/3/C.11.2.1.2/中提到的伪方程时,它给出了相同的结果。

const void *bytes = [data bytes];
NSMutableData* ary = [[NSMutableData alloc] init];  
int maxValue = 4087/256; //its a dummy value, use your max value in image instead of 4087
for (NSUInteger i = 0; i < [data length]; i += sizeof(int16_t)) {
    UInt16 elem = OSReadLittleInt16(bytes, i);

    UInt8 temp = round(elem/maxValue);

    [ary appendBytes:&temp length:sizeof(UInt8)];

}

使用'ary'制作图片。