CrosshairsTool 十字线工具使用篇

1,639 阅读2分钟

CrosshairsTool 十字线工具使用篇

CornerstoneTools 中的 CrosshairsTool 十字线工具是通过冠状面图像的坐标,寻找相对应的横断面切片位置图像的工具。Pacs 系统中相当于定位的功能,由冠状面(冠状位)的图像,定位显示相应的横断面(轴状位)图像。

工具使用过程

一般在用户使用的场景为:设置一行两列的序列布局,左侧显示冠状面图像,右侧显示横断面图像,通过鼠标选取左侧冠状面图像的坐标,右侧自动显示横断面图像。

我们在使用十字线工具前,需要注意的是,需要将整个横断面序列的图像全部 load 完成,因为十字线工具在确定切片时,会查询所有图像的元数据,如果这时对应横断面的图像并未 load 完成,则未生成元数据,将无法定位到最准确的图像。

定义图像同步器

// 新建图像更新同步器
const synchronizer = new cornerstoneTools.Synchronizer(
  "cornerstonenewimage",
  cornerstoneTools.updateImageSynchronizer
);
// 获取已绑定的元素
const coronalElement = document.querySelector(".canvasCoronal");
const axialElement = document.querySelector(".canvasAxial");

// 同步器添加需要同步的元素
synchronizer.add(coronalElement);
synchronizer.add(axialElement);

添加十字线工具与堆栈的状态

// 添加状态管理器
cornerstoneTools.addStackStateManager(axialElement, ["stack", "crosshairs"]);

// 堆栈的状态
const axialStack = {
  // 当前横断面图像序列的索引
  currentImageIdIndex: 0,
  // 横断面图像序列的全部图像id集合
  imageIds: [
    "wadouri:https://example.com/1.dcm",
    "wadouri:https://example.com/2.dcm"
  ]
};

// 此为关键:一定要在使用十字线工具前将全部横断面序列的图像加载完成
axialImageIds.forEach((imageId) => cornerstone.loadAndCacheImage(imageId));

// 添加堆栈状态
cornerstoneTools.addToolState(axialElement, "stack", axialStack);

添加和激活十字线工具

// 添加十字线工具,无 props 配置项
cornerstoneTools.addToolForElement(coronalElement, CrosshairsTool);
// 激活十字线工具
cornerstoneTools.setToolActiveForElement(coronalElement, "Crosshairs", {
  mouseButtonMask: 1,
  synchronizationContext: synchronizer
});

最简单的例子

老规矩,最后放上案例,更直观的看到效果。