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值范围根据实际情况自己判定)

如果是连续图片显示, 不推荐这种方式, 因为每张图片的最大值不固定, 导致转换因数发生变化, 显示不连续, 解决方法: 固定转换因数

 

posted on 2023-09-02 20:32  马什么梅  阅读(15)  评论(0编辑  收藏  举报

导航