基于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中的MVVM模式原理

    详细聊聊Vue中的MVVM模式原理 MVVM模式概述 MVVM模式是一种软件架构模式,它通过将应用程序分为三个部分来实现软件开发的分层和解耦,包括视图(View)、视图模型(ViewModel)和模型(Model)。其中,视图模型是视图和模型之间的中介层,用于将视图与模型之间的交互隔离开来,从而简化了视图和模型之间的耦合性。 在Vue中,MVVM模式的实现主…

    Vue 2023年5月27日
    00
  • 使用Vue完成一个简单的todolist的方法

    使用Vue完成一个简单的Todolist的方法包括以下步骤: 步骤一:创建Vue项目 使用Vue.js官方提供的命令行工具vue-cli来创建一个新项目。具体方法是在命令行中运行以下命令: vue create my-todolist 输入命令后按照提示进行操作,其中需要选择一些配置选项,例如babel、ESLint等。等待命令执行完成后,使用以下命令进入到…

    Vue 2023年5月28日
    00
  • vue引用js文件的多种方式(推荐)

    当我们使用Vue进行开发时,我们经常需要引入一些第三方库来辅助我们完成开发。这时候我们需要了解几种Vue引用JS文件的方式。 1. 直接使用script标签引入 使用script标签以最原始的方式引入JS文件,这是所有前端开发者都很熟悉的引用方式。在Vue中,我们同样可以使用这种方式。比如我们要引入jQuery库: <!DOCTYPE html>…

    Vue 2023年5月29日
    00
  • Vue中如何使用mock模拟数据

    下面我会为您详细讲解在Vue中如何使用mock模拟数据的完整攻略。 1. 什么是Mock Mock(模拟数据)是指在前端开发中,由于后端接口还未开发完成,前端开发需要提前模拟数据进行开发的一种手段。mock可以在前端使用虚拟数据进行开发,便于前端更好地进行模块开发、调试、测试等。 2. 如何使用mock 2.1 安装mockjs 我们可以使用npm安装moc…

    Vue 2023年5月28日
    00
  • Vue路由传参页面刷新后参数丢失原因和解决办法

    关于Vue路由传参页面刷新后参数丢失的原因和解决办法,我来给你详细阐述一下: 1. 原因 当我们在Vue的单页面应用中进行路由跳转时,可能会需要传递一些参数到目标组件中,而Vue提供了通过路由传参的方式来实现这一功能。但是,当我们刷新目标组件页面时,之前传递的参数会丢失,这是因为路由传参参数默认只存在于内存中,而不会被保存在浏览器的历史记录中。因此,当页面刷…

    Vue 2023年5月27日
    00
  • vue中push()和splice()的使用解析

    Vue中push()和splice()的使用解析 在Vue中,使用push()和splice()可以对数组进行增删改操作。本篇攻略将对这两个方法进行详细解析,并给出至少两个示例来说明使用这两个方法。 push() 的使用解析 push() 方法可以向数组的末尾添加新的元素,并返回数组的新长度。其语法如下: array.push(item1, item2, .…

    Vue 2023年5月28日
    00
  • 使用vue导出excel遇到的坑及解决

    当使用Vue来处理数据并导出Excel时,可能会遇到一些问题。以下是关于“使用Vue导出Excel遇到的坑及解决”的完整攻略,其中包含了解决这些问题的步骤和两个示例。 问题和解决方案 问题1:表格的样式丢失 当将数据导出到Excel时,原本应用的样式可能不会保留。这可能是因为Excel的格式化与HTML和CSS不同。 解决方案 可以使用 xlsx-style…

    Vue 2023年5月27日
    00
  • 详解使用mpvue开发github小程序总结

    详解使用mpvue开发github小程序总结 介绍 本文主要介绍如何使用mpvue开发github小程序,并分享一些遇到的坑和解决方法。 开发环境 在开始本文之前,请确保您已经安装好以下工具:- Node.js(版本 >= 8.0.0)- npm(版本 >= 5.0.0) 安装mpvue 首先,我们需要安装mpvue。在终端输入以下命令: npm…

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