使用CornerstoneJS加载DICOM文件图像(3.X版本)(持续更新)

该文章已生成可运行项目,

一、引用

使用NPM下载包

npm install @cornerstonejs/core
npm install @cornerstonejs/tools
npm install @cornerstonejs/dicom-image-loader
npm install @cornerstonejs/nifti-volume-loader

二、使用

引入关键包

import {
  init as coreInit,
  RenderingEngine,
  Enums,
  volumeLoader,
  setVolumesForViewports,
} from "@cornerstonejs/core";
import { init as dicomImageLoaderInit } from "@cornerstonejs/dicom-image-loader";
import { createImageIdsAndCacheMetaData } from "../../../../utils/demo/helpers";

以下案例引用自官方文档,可直接查看官方文档:官方文档案例

import {
  init as coreInit,
  RenderingEngine,
  Enums,
  volumeLoader,
  setVolumesForViewports,
} from '@cornerstonejs/core';
import { init as dicomImageLoaderInit } from '@cornerstonejs/dicom-image-loader';
import { createImageIdsAndCacheMetaData } from '../../../../utils/demo/helpers';

const { ViewportType } = Enums;

const content = document.getElementById('content');

const viewportGrid = document.createElement('div');
viewportGrid.style.display = 'flex';
viewportGrid.style.flexDirection = 'row';

// element for axial view
const element1 = document.createElement('div');
element1.style.width = '500px';
element1.style.height = '500px';

// element for sagittal view
const element2 = document.createElement('div');
element2.style.width = '500px';
element2.style.height = '500px';

viewportGrid.appendChild(element1);
viewportGrid.appendChild(element2);

content.appendChild(viewportGrid);
// ============================= //

async function run() {
  await coreInit();
  await dicomImageLoaderInit();

  // Get Cornerstone imageIds and fetch metadata into RAM
  const imageIds = await createImageIdsAndCacheMetaData({
    StudyInstanceUID:
      '1.3.6.1.4.1.14519.5.2.1.7009.2403.334240657131972136850343327463',
    SeriesInstanceUID:
      '1.3.6.1.4.1.14519.5.2.1.7009.2403.226151125820845824875394858561',
    wadoRsRoot: 'https://d14fa38qiwhyfd.cloudfront.net/dicomweb',
  });

  // Instantiate a rendering engine
  const renderingEngineId = 'myRenderingEngine';
  const renderingEngine = new RenderingEngine(renderingEngineId);

  const volumeId = 'myVolume';

  // Define a volume in memory
  const volume = await volumeLoader.createAndCacheVolume(volumeId, {
    imageIds,
  });

  const viewportId1 = 'CT_AXIAL';
  const viewportId2 = 'CT_SAGITTAL';

  const viewportInput = [
    {
      viewportId: viewportId1,
      element: element1,
      type: ViewportType.ORTHOGRAPHIC,
      defaultOptions: {
        orientation: Enums.OrientationAxis.AXIAL,
      },
    },
    {
      viewportId: viewportId2,
      element: element2,
      type: ViewportType.ORTHOGRAPHIC,
      defaultOptions: {
        orientation: Enums.OrientationAxis.SAGITTAL,
      },
    },
  ];

  renderingEngine.setViewports(viewportInput);

  volume.load();

  setVolumesForViewports(
    renderingEngine,
    [{ volumeId }],
    [viewportId1, viewportId2]
  );
}

run();

三、解决报错

1、Static class blocks are not enabled. Please add `@babel/plugin-transform-class-static-block` to your configuration.

解决方法:

①下载插件

npm install --save-dev @babel/plugin-transform-class-static-block

②配置文件

 Babel 配置文件中添加这个插件。Babel 的配置文件可以是 .babelrcbabel.config.jsonbabel.config.js 或在 package.json 中的 babel 字段。

对于 .babelrc 文件:
{
  "plugins": ["@babel/plugin-transform-class-static-block"]
}
对于 babel.config.json 文件:
{
  "plugins": ["@babel/plugin-transform-class-static-block"]
}
对于 babel.config.js 文件:
module.exports = {
  plugins: ["@babel/plugin-transform-class-static-block"],
};
对于 package.json 中的配置:
{
  "babel": {
    "plugins": ["@babel/plugin-transform-class-static-block"]
  }
}

2、Module not found: Error: Can't resolve 'fs' in 'E:\xxx\xxx\node_modules\@cornerstonejs\codec-charls\dist'

解决方法:

①下载安装包:

npm install @cornerstonejs/codec-charls
npm install node-polyfill-webpack-plugin --save-dev

②修改配置文件:

Vue项目的特殊配置‌:

const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
module.exports = {
  configureWebpack: {
    plugins: [new NodePolyfillPlugin()]
  }
}

这种方法适用于Vue CLI创建的项目。

处理process未定义问题‌:

如果出现process is not defined错误,需要额外配置:

plugins: [
  new webpack.ProvidePlugin({
    process: 'process/browser'
  })
]

并安装process包:

npm install process

React项目通过craco配置‌:

在craco.config.js中添加:

const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
module.exports = {
  webpack: {
    plugins: [new NodePolyfillPlugin()]
  }
}

这种方式适用于使用create-react-app创建的项目。

3、Module not found: Error: Can't resolve '../utils/demo/helpers' in 'E:\xxxx\cornerstone-demo\src\components'

解决方法:

下载官方代码,然后在代码文件夹中找到 cornerstone3D-main\utils\demo,将该文件夹下的helper文件夹整个复制到自己的项目中即可。

4、引用后会出现各种模块缺失,依照缺失提示下载模块即可

npm install dicomweb-client
npm install dcmjs
npm install @cornerstonejs/calculate-suv
npm install @cornerstonejs/streaming-image-volume-loader

若有转换报错,则继续安装:

npm install --save-dev @babel/core @babel/cli @babel/preset-env

本文章已经生成可运行项目
在当今的医疗影像领域,数字医学影像(DICOM文件的处理和浏览是至关重要的。cornerstone3D是一个开源的JavaScript库,它能够在Web应用程序中渲染医学影像。本文档详细介绍了一个基于cornerstone3D开发DICOM影像浏览器的源码,旨在向开发者展示如何使用vue3框架,结合cornerstone3D库,创建出功能完善的医疗影像浏览工具。 从源码中的.gitignore文件可以看出,这个项目可能会忽略掉node_modules文件夹和其他一些常见的临时文件,这表明开发使用了npm或yarn这类包管理工具来管理项目依赖,并且使用git作为版本控制工具。 接下来,index.html文件通常是整个Web应用的入口文件,它可能包含基础的HTML结构,并通过引入其他JavaScript和CSS文件来构建应用的用户界面。由于涉及到vue3,我们可以推断这个文件可能使用了Vue3框架来创建单页应用程序(SPA)。 httpdir.js文件可能是一个用于处理HTTP请求的JavaScript文件,它可能包含了一些用于从服务器获取DICOM文件或者其他资源的函数和逻辑。由于涉及到网络请求,这可能利用了fetch API或者axios这类HTTP客户端库。 vite.config.js文件表明这个项目使用了Vite作为构建工具,Vite是一个现代的Web开发构建工具,它能够提供快速的开发服务器启动和热更新功能。该配置文件可能包含了项目的配置信息,如入口文件、构建输出目录、开发服务器设置等。 package-lock.json和package.json文件的存在表明项目使用了npm作为包管理工具。package.json文件中记录了项目的名称、版本、依赖信息和脚本命令,而package-lock.json文件用于确保依赖的版本一致性,避免因版本变动带来的潜在问题。 README.md文件通常是项目的文档,它会包含如何安装项目、如何运行项目以及项目的基本功能介绍。开发者可以通过该文件快速了解项目,并开始自己的工作。 版权申明.md文件则包含了项目的版权信息和使用协议,这通常涉及到软件许可、作者权利声明以及相关的法律条文。 .prettierrc文件是Prettier的配置文件,Prettier是一个流行的代码格式化工具,它可以自动格式化代码以确保代码风格的一致性。通过这个配置文件开发者可以定义自己的代码风格规则。 这个源码项目是一个基于vue3和cornerstone3D开发DICOM影像浏览器,它集成了现代Web开发的常用技术和库,包括Vite构建工具、npm包管理器、HTTP客户端库和代码格式化工具Prettier。项目提供了完整的配置和文档,能够帮助开发者快速搭建起一个专业的医疗影像浏览环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值