medical imaging raw (float type) to dicom (unshort type)
最近开发医疗影像相关,设备输出的float类型的原图,目前支持转换的软件很少,xmedcon支持转换,查阅文档 https://xmedcon.sourceforge.io/Docs/Quantitation 有格式转换的说明
仿射变换和线性变换,到目前为止,只有DICOM支持这种仿射变换,因此我们优先考虑线性版本。
线性变换很简单
要求:转换因数*原图最小值 >= 转换类型的最小值
转换公式为:
因数 = 类型值最大值 / 原图最大值;
转换后图片值 = 因数 * 原图值;
举个例子 ( C# )
string path = @"C:\Users\Administrator\Desktop\xmimage_x_x"; byte[] readByte = System.IO.File.ReadAllBytes(path);
float[] pixels = new float[readByte.Length / 4]; Buffer.BlockCopy(readByte, 0, pixels, 0, readByte.Length);
float factor = ushort.MaxValue / pixels.Max(); ushort[] ushorts = new ushort[pixels.Length]; for (int i = 0; i < pixels.Length; i++) { ushorts[i] = (ushort)((pixels[i] < 0 ? 0 : pixels[i] * factor)); }
实际范围的最小值为零,所以满足要求。(float值范围根据实际情况自己判定)
如果是连续图片显示, 不推荐这种方式, 因为每张图片的最大值不固定, 导致转换因数发生变化, 显示不连续, 解决方法: 固定转换因数