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

yizhihongxing

下面我将为大家分享基于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单个组件实现无限层级多选菜单功能

    下面我将详细讲解“vue单个组件实现无限层级多选菜单功能”的完整攻略。 目录 前置知识 实现步骤 创建Menu.vue组件 编写Menu.vue组件模板 编写Menu.vue组件脚本 在App.vue中使用Menu.vue组件 示例说明 示例1:只有两级菜单 示例2:有三级菜单 前置知识 熟练掌握Vue.js框架的使用 对Vue组件的概念有基本了解 实现步骤…

    Vue 2023年5月27日
    00
  • 详解Vue与VueComponent的关系

    详解 Vue 与 Vue Component 的关系 Vue 是一款流行的前端框架,使用 Vue 可以方便地实现动态数据绑定、组件化以及声明式渲染等功能。而 Vue Component 则是 Vue 框架中组件的概念。本文将详细讲解 Vue 和 Vue Component 的关系,并通过两条示例说明。 Vue 和 Vue Component 的关系 Vue …

    Vue 2023年5月27日
    00
  • Vue双向绑定原理及实现方法

    Vue双向绑定原理及实现方法 1. 什么是Vue双向绑定 双向绑定是Vue框架重要的特点之一,意味着当数据发生改变时,视图会随之发生变化,同时视图的修改也会同步到数据中。这种机制使得开发者只需要关注逻辑的实现而不用担心数据如何与视图同步,便于提高开发效率和减少出错概率。 2. 双向绑定原理 Vue中的双向绑定原理主要是通过以下几个步骤实现的: 数据劫持 首先…

    Vue 2023年5月28日
    00
  • vue 移动端注入骨架屏的配置方法

    下面我会详细讲解在 Vue 移动端项目中如何注入骨架屏。 什么是骨架屏? 骨架屏是一种用于提高移动端用户体验的技术,它是在页面内容还未加载完成时展示的一种占位元素,可以提高用户对页面加载进度的感知。骨架屏通常采用灰色填充块线条等元素,展示页面结构和布局,让用户感知到页面正在加载内容。 注入骨架屏的配置方法 在 Vue 移动端项目中,可以使用 vue-skel…

    Vue 2023年5月28日
    00
  • Vue过滤器,生命周期函数和vue-resource简单介绍

    一、Vue过滤器 Vue过滤器是对要显示的数据进行加工处理后再呈现给用户的功能。它通过在插值表达式中使用管道字符“|”来实现,如下面的示例: <p>{{ message | capitalize }}</p> 在上述示例中,“capitalize”是一个自定义的过滤器名称,它会将message的值转化为所有单词首字母大写的形式。定义这…

    Vue 2023年5月28日
    00
  • vue使用axios导出后台返回的文件流为excel表格详解

    下面是详细讲解“vue使用axios导出后台返回的文件流为excel表格”的攻略。 1. 准备工作 首先,我们需要准备一些工作。这些工作包括: 安装vue和axios库 安装js-xlsx库(用于处理excel文件) 后台返回的文件流是excel格式 后台需要返回file流类型,不能直接返回json 2. 导出excel表格 前端代码示例: <temp…

    Vue 2023年5月27日
    00
  • Vue.js中class与style的增强绑定实现方法

    Vue.js中class与style的增强绑定实现方法有以下几种方式: 1. 对象语法 对象语法是Vue.js中一个常用的class及style的绑定方式,可以通过传入一个对象的方式来动态的限制元素的class或style属性。 添加class 在Vue.js中,我们可以通过v-bind:class或简写为:class来绑定元素的class属性。下面的代码演…

    Vue 2023年5月27日
    00
  • Vue起步(无cli)的啊教程详解

    Vue起步(无cli)的啊教程详解 简介 在本教程中,我们将介绍如何使用Vue.js创建基本项目,而无需使用Vue CLI(命令行界面)。我们将通过以下步骤完成: 在HTML页面中添加Vue.js作为script标记 创建Vue实例,其中包含我们要渲染的数据 添加Vue指令和绑定元素 创建和使用Vue组件 步骤 添加Vue.js到HTML页面 首先,在HTM…

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