Cornerstone3D中获取Dicom文件CT值的实践方案

前置概念

CT值是什么

CT扫描图像中组织密度的数值

如何产生的

  • CT扫描通过使用X射线在不同方向上进行大量的测量

  • 然后计算出组织对X射线的吸收程度,从而生成具有不同灰度级别的图像

  • CT值是在DICOM文件中存储和传输这些信息的一种方式。

关键概念

  1. Hounsfield单位(Hounsfield Units,HU): CT值通常以Hounsfield单位表示,以荷斯菲尔德(Hounsfield)的名字命名。Hounsfield单位定义了CT值的标度,使得水的CT值为0,空气为-1000,骨骼结构为正值。这种标度使医生和放射技师能够在图像中识别和区分不同类型的组织。

  2. 组织密度和CT值关系: CT值是与扫描的组织密度直接相关的。例如,骨头和金属等致密组织在CT图像中通常具有较高的CT值,而气体和脂肪等较为松散的组织则具有较低的CT值。

  3. CT值的范围: CT值的范围可以很广泛,通常从-1000到+1000 HU。负值表示低密度或气体,0表示水的密度,正值表示高密度或致密物质。

  4. 影响CT值的因素: CT值受多种因素的影响,包括X射线的能量、扫描协议、患者体质等。不同的CT扫描参数和设置可能导致相同类型的组织在不同图像中具有不同的CT值。

点CT值计算方式

需求描述

在鼠标移动的过程中获取到鼠标对应点的CT值

实现逻辑

Cornerstone3D中获取Dicom文件CT值的实践方案_第1张图片

实现

document.getElementById(`demo`).addEventListener('mousemove', (event) => { this.listenerMouseMove });
listenerMouseMove(event) {
    const element = document.getElementById('demo');
    const rect = element.getBoundingClientRect();

    const canvasPos = [
      Math.floor(event.clientX - rect.left),
      Math.floor(event.clientY - rect.top),
    ];

    // 前提是renderingEngine已初始化,已渲染Volume
    const worldPos = renderingEngine.getViewport(viewportId).canvasToWorld(canvasPos);
    getCTValue(cache.getVolume(volumeId), worldPos);
},
      
function getCTValue(volume, worldPos) {
    if (!volume || !worldPos) {
      return null;
    }

    const { dimensions, scalarData, imageData } = volume;
    const index = imageData.worldToIndex(worldPos);

    index[0] = Math.floor(index[0]);
    index[1] = Math.floor(index[1]);
    index[2] = Math.floor(index[2]);

    if (!csUtils.indexWithinDimensions(index, dimensions)) {
      return null;
    }

    const yMultiple = dimensions[0];
    const zMultiple = dimensions[0] * dimensions[1];
    return scalarData[index[2] * zMultiple + index[1] * yMultiple + index[0]]; // 返回对应的CT值
  },

扩展

imageData(vtk)

ImageData

Volume中的dimensions属性

  1. 空间维度
  • Columns(列数): 表示图像数据的列数,即图像的宽度。

  • Rows(行数): 表示图像数据的行数,即图像的高度。

  • Frames(帧数): 对于体数据(3D 数据),表示数据集中的帧数。对于普通的二维图像,帧数通常为 1

  1. 体素维度
  • Pixel Spacing(像素间距): 表示相邻像素在物理空间中的距离,通常以毫米为单位。

  • Slice Thickness(切片厚度): 对于 3D 数据,表示相邻切片的距离

  1. 时间维度
  • Temporal Positions(时间位置): 表示图像序列中每一帧的时间位置。

Volume中的scalarData

是图像或体数据中的标量数值,定义了 DICOM 文件中图像或体数据的强度和密度等物理含义

你可能感兴趣的:(CornerStone3D,cornerstone3D,医学影像,javascript)