我正在开发iOS上的医疗应用。 iOS设备仅支持带有GL_LUMINANCE的GL_UNSIGNED_BYTE,或者通常仅支持每个组件8位。现在我有一些灰度图像是16位无符号整数,我想显示它们。我发现我们不能显示16位无符号整数,因此我应该将它们转换为8位无符号整数。但在医疗方面,我不应该丢失数据或者应该减少数据丢失。
现在,我的问题是:如何通过医疗中的合法转换将16位无符号整数转换为8位无符号整数?现在我用最简单的方法来做到这一点。只需将其分为256:-O。其他一些商业软件正在这样做,他们正在使用它们。
提前谢谢。
答案 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'制作图片。