基于cornerstone.js的dicom医学影像查看浏览功能

下面我将为大家分享基于cornerstone.js的dicom医学影像查看浏览功能的完整攻略:

简介

DICOM(Digital Imaging and Communications in Medicine)是医学影像和相关信息的国际标准,它定义了医学影像的格式、传输协议以及元数据等信息,被广泛应用于医学领域。在web应用中,通常需要通过浏览器对DICOM医学影像进行查看、分析和处理。而基于cornerstone.js的DICOM医学影像查看浏览功能,可以实现在web浏览器中快速、稳定地查看、浏览DICOM医学影像。

1. 环境准备

首先,我们需要准备工作环境并安装所需依赖。在此之前,我们需要保证本地已经安装了Node.js和npm。

1.1 安装webpack

使用 npm 可以很容易地安装 webpack

npm install webpack --global

1.2 安装cornerstone.js

npm install cornerstone-core --save

1.3 安装cornerstoneWADOImageLoader

npm install cornerstone-wado-image-loader --save

1.4 安装dicom-parser

npm install dicom-parser --save

1.5 安装dicom-rs

npm install dicom-rs --save

2. 加载DICOM数据

使用cornerstoneWADOImageLoader插件可以通过WADO-URI请求来加载DICOM数据。

const imageId =
  "wadouri:" +
  "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/wado?" +
  "requestType=WADO&" +
  "studyUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.778&" +
  "seriesUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.780&" +
  "objectUID=1.2.840.113619.2.55.3.2601012505.16384.1476881610.75&" +
  "contentType=application/dicom";
const element = document.getElementById('dicomImage');
cornerstone.loadImage(imageId).then((image) => {
  cornerstone.displayImage(element, image);
}).catch((err) => {
  console.log(err);
});

上述代码中,wadouri协议表示使用WADO-URI请求DICOM数据。请求的URL中必须包含studyUID、seriesUID以及objectUID等信息。

3. 显示DICOM数据

通过调用cornerstoneJs的API可以将DICOM数据渲染到页面上。

const element = document.getElementById('dicomImage');

// 设置viewport
const viewport = cornerstone.getDefaultViewportForImage(element, image);
cornerstone.displayImage(element, image, viewport);

// 调整窗宽窗位调节
const ww = 400;
const wc = 100;
cornerstoneTools.setWindowWidth(ww);
cornerstoneTools.setWindowCenter(wc);
const viewport = cornerstone.getViewport(element);
viewport.voi.windowWidth = ww;
viewport.voi.windowCenter = wc;
cornerstone.setViewport(element, viewport);

上述代码中,我们首先获取了用于显示DICOM数据的DOM元素,然后调用了cornerstone的API将DICOM数据显示出来。同时,我们还可以通过cornerstoneTools的API实现窗宽窗位的调节,在调节完毕后需要调用setViewport方法来更新viewport。

示例

示例一

以下是一个使用cornerstone.js加载和显示DICOM数据的示例:

<!doctype html>
<html>
  <head>
    <title>Basic DICOM Viewer</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <div>
      <canvas id="dicomImage"></canvas>
    </div>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/cornerstone-core/dist/cornerstone.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/dicom-parser/dist/dicomParser.js"></script>
  <script>
    const imageId =
      "wadouri:" +
      "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/wado?" +
      "requestType=WADO&" +
      "studyUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.778&" +
      "seriesUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.780&" +
      "objectUID=1.2.840.113619.2.55.3.2601012505.16384.1476881610.75&" +
      "contentType=application/dicom";
    const element = document.getElementById('dicomImage');
    cornerstone.loadImage(imageId).then((image) => {
      cornerstone.displayImage(element, image);
    }).catch((err) => {
      console.log(err);
    });
  </script>
</html>

在上述代码中,我们首先在HTML中定义了一个canvas标签用于显示DICOM数据。接着,在JavaScript中,我们使用cornerstone的API来加载DICOM数据,最后调用cornerstone的API将DICOM数据显示到canvas中。

示例二

以下是一个使用cornerstone.js实现窗宽窗位调节的示例:

<!doctype html>
<html>
  <head>
    <title>Window Width/Center</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <div>
      <canvas id="dicomImage"></canvas>
    </div>
    <div>
      <label for="ww">Window Width</label>
      <input type="text" id="ww">
    </div>
    <div>
      <label for="wc">Window Center</label>
      <input type="text" id="wc">
    </div>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/cornerstone-core/dist/cornerstone.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/dicom-parser/dist/dicomParser.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/cornerstone-tools/dist/cornerstoneTools.js"></script>
  <script>
    const imageId =
      "wadouri:" +
      "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/wado?" +
      "requestType=WADO&" +
      "studyUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.778&" +
      "seriesUID=1.2.840.113619.2.55.3.3876812227.629.1237940570.780&" +
      "objectUID=1.2.840.113619.2.55.3.2601012505.16384.1476881610.75&" +
      "contentType=application/dicom";
    const element = document.getElementById('dicomImage');
    let image;
    cornerstone.loadImage(imageId).then((res) => {
      image = res;
      const viewport = cornerstone.getDefaultViewportForImage(element, image);
      cornerstone.displayImage(element, image, viewport);

      const ww = 400;
      const wc = 100;

      cornerstoneTools.setWindowWidth(ww);
      cornerstoneTools.setWindowCenter(wc);
      const viewport2 = cornerstone.getViewport(element);
      viewport2.voi.windowWidth = ww;
      viewport2.voi.windowCenter = wc;
      cornerstone.setViewport(element, viewport2);

      document.getElementById('ww').addEventListener('change', (event) => {
        const newWW = parseFloat(event.target.value);
        cornerstoneTools.setWindowWidth(newWW);
        const viewport = cornerstone.getViewport(element);
        viewport.voi.windowWidth = newWW;
        cornerstone.setViewport(element, viewport);
      });

      document.getElementById('wc').addEventListener('change', (event) => {
        const newWC = parseFloat(event.target.value);
        cornerstoneTools.setWindowCenter(newWC);
        const viewport = cornerstone.getViewport(element);
        viewport.voi.windowCenter = newWC;
        cornerstone.setViewport(element, viewport);
      });
    }).catch((err) => {
      console.log(err);
    });
  </script>
</html>

在上述示例中,我们不仅展示了如何加载DICOM数据并显示到canvas中,而且展示了如何实现窗宽窗位的调节功能。QWidget类的两个API方法setWindowWidth、setWindowCenter用于设置窗宽(窗口宽度)及窗位(窗口中心)。为实现窗宽窗位的调节功能,我们需要在keypress或input事件内调用这两个API方法,同时需要更新viewport。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于cornerstone.js的dicom医学影像查看浏览功能 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue中的Object.defineProperty全面理解

    Vue中的Object.defineProperty全面理解 Object.defineProperty是ES5语法中用于定义对象属性上的方法。Vue.js中的数据绑定功能就是基于此实现的。本文将深入讲解Object.defineProperty的相关知识点,旨在帮助读者了解Vue.js底层的实现原理。 Object.defineProperty的基本使用 …

    Vue 2023年5月28日
    00
  • vue.js事件处理器是什么

    Vue.js 是一个流行的前端框架,具有响应式数据绑定、组件化等特性。在 Vue.js 中,事件处理器是指通过 v-on 指令绑定的方法。以下是详细讲解: 什么是 Vue.js 事件处理器? 在 Vue.js 中,v-on 指令被用于监听 DOM 事件,并在事件触发时执行相应的方法,这些方法就是事件处理器。v-on 指令有简写形式 @,例如 @click=”…

    Vue 2023年5月27日
    00
  • 如何利用 vue实现鼠标悬停时显示元素或文本

    实现鼠标悬停时显示元素或文本的功能,可以使用 Vue 组件中的 v-on: 指令和 v-bind: 指令。具体步骤如下: 1. 为需要绑定悬停事件的元素添加绑定 在 Vue 模板中,我们可以为需要绑定悬停事件的元素添加 v-on: 指令,以监听鼠标悬停事件。通常情况下,我们将 v-on: 指令绑定 mouseover 事件。例如: <template&…

    Vue 2023年5月27日
    00
  • vue计算属性及使用详解

    Vue计算属性及使用详解 在Vue中,有一种非常有用的概念:计算属性。在本篇文章中,我将详细解释Vue计算属性的概念及其使用方法,并给出一些示例说明。 什么是Vue计算属性? 计算属性本质上是一个函数,它可以监听Vue实例中的数据变化,并根据数据的变化返回一个新的计算结果。我们使用计算属性来简化Vue模板中复杂的计算逻辑,提高代码的可读性和可维护性。 计算属…

    Vue 2023年5月28日
    00
  • antd vue 表格rowSelection选择框功能的使用方式

    关于“antd vue 表格rowSelection选择框功能的使用方式”,以下是详细的攻略: 1. 引入antd vue表格和rowSelection 首先,我们需要在代码中引入antd vue表格和rowSelection选择框,具体方法如下: <template> <a-table :columns="columns&quo…

    Vue 2023年5月29日
    00
  • layui实际项目使用过程中遇到的兼容性问题及解决

    我为您详细分享一下“layui实际项目使用过程中遇到的兼容性问题及解决”的完整攻略。 一、问题背景 Layui是一款轻量级的前端UI框架,可用于快速构建具有良好交互体验的前端页面,功能模块化、易于扩展。然而,在实际项目中,我们在使用Layui时,往往会遇到一些兼容性问题。 二、兼容性问题及解决方法 在实际项目中,Layui兼容性问题大致可分为两类:浏览器兼容…

    Vue 2023年5月28日
    00
  • vue如何实现Json格式数据展示

    要展示Json格式数据,我们可以使用Vue框架的v-for指令。v-for指令可以循环遍历数组或对象中的元素,根据元素的个数生成相应的DOM节点。 下面是一个简单的示例,以渲染包含一些数据的表格为例: <table> <thead> <tr> <th>Name</th> <th>Emai…

    Vue 2023年5月27日
    00
  • vue3渲染函数(h函数)的变更剖析

    文本格式规范: 标题1 标题2 标题3 列表1 列表2 代码块: //这里写代码 在Vue3中,渲染函数(h函数)的变更是非常重要的一个特性,可以让我们更加方便、灵活地构建组件和页面。下面对这个变更做出详细说明。 Vue3中h函数变更的重要性 在Vue2中,当我们需要编写组件的渲染函数时,需要手写模板。虽然利用Vue模板的语法可以让编写模板变得更加便捷,但还…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部