如何在设备上合法显示DICOM 16位无符号整数是否支持8位无符号整数?
我正在iOS上开发一个医疗应用程序。 iOS设备只支持GL_UNSIGNED_BYTE和GL_LUMINANCE,或者通常只支持每个组件8位。 现在我有一些灰度图像是16位无符号整数,我想显示它们。 我发现我们不能显示16位无符号整数,所以我应该将它们转换为8位无符号整数。 但是在医疗方面,我不应该丢失数据或者应该有最小的数据丢失。
现在,我的问题是:如何通过在医疗合法转换16位无符号整数转换为8位无符号整数? 现在我用最简单的方法来做到这一点。 把它分成256:-O。 一些其他的商业软件正在这样做,他们正在使用的行动。
先谢谢你。
您必须转换这些值以显示它们应用的窗口级别 。
灰度Dicom图像通常有两个包含值WC(窗口中心,数据元素:0028,1050)和WL(窗口级别,数据元素:0028,1051)的数据元素(Dicom字段)。 这些值定义了显示图像中包含的信息所必需的线性方程式。
你可以在这里find关于Window Level的更详细的描述。
我通过将每个像素除以一个值(matrix中的最大值或最亮/ 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”来制作图片。