医疗DICOM LUT应用

对于灰度图像,默认情况下fo-dicom在使用DicomImage.RenderImage. 默认情况下,渲染选项标识是否应使用Monochrome1或Monochrome2颜色表显示颜色。要覆盖此配色方案,可以使用以下解决方法。

fo-dicom 2.0.0 及更高版本
该Color32[]属性GrayscaleColorMap已添加到fo-dicom 2.0 版中的DicomImage类中。默认情况下,颜色贴图是根据相关数据集(单色 1 或 2)的光度学解释选择的,但可以在渲染图像之前将其设置为任何 256 项数组。Color32

应用任意颜色贴图然后渲染图像的示例:

var di = new DicomImage(dicomFileName);
di.GrayscaleColorMap = ColorTable.LoadLUT(lutFileName);
var image = di.RenderImage();


fo-dicom 1.1.0 及更早版本
如果您想绕过该DicomImage方法并应用用户定义的 LUT,您可以定义一个ImageGraphic对象并调用该ImageGraphic.RenderImage(ILUT)方法。然而,重要的是要注意数据集信息,例如存储的位、重新调整截距和斜率、窗口中心和宽度、LUT 形状等,不会自动考虑在内。这些组件必须手动合并到复合 LUT 中。

默认情况下,灰度图像通过Monochrome1或Monochrome2颜色表呈现:

医疗DICOM LUT应用_第1张图片

要在渲染时覆盖此选择,例如使用通过ColorTable.LoadLUT或通过组合 256 个项目Color32数组从文件加载的颜色表,可以应用以下帮助器方法来创建同时考虑数据集中指定的图像属性的 LUT:

public static ILUT CreateFromDataset(DicomDataset dataset, Color32[] colorTable)
{
  var options = GrayscaleRenderOptions.FromDataset(dataset);

  var composite = new CompositeLUT();
  OutputLUT output;

  if (options.RescaleIntercept != 0.0 || options.RescaleSlope != 1.0)
  {
    composite.Add(new ModalityLUT(options));
  }

  composite.Add(VOILUT.Create(options));
  composite.Add(
    output =
    new OutputLUT(colorTable ?? (options.Monochrome1 ? ColorTable.Monochrome1 : ColorTable.Monochrome2)));

  if (options.Invert)
  {
    composite.Add(new InvertLUT(output.MinimumOutputValue, output.MaximumOutputValue));
  }

  return new PrecalculatedLUT(composite, options.BitDepth.MinimumValue, options.BitDepth.MaximumValue);
}


使用非单色颜色表(例如“green-fire-blue”配色方案)创建复合 LUT 并通过该ImageGraphic.RenderImage(ILUT)方法渲染相同的图像将产生以下结果:

医疗DICOM LUT应用_第2张图片

参考github:LUT应用


 

你可能感兴趣的:(WPF)