You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cornerstone3D加载DCM文件出现‘no pixel data’错误的原因及解决

解决Cornerstone3D加载本地DICOM文件时的"no pixel data in NATURALIZED"错误

问题描述

通过<input type="file">选择本地DICOM文件,使用Cornerstone3D和@cornerstonejs/dicom-image-loader渲染时,调用viewport.setStack([imageId])抛出以下错误:

Error: loadImageFromNaturalizedMetadata: no pixel data in NATURALIZED for imageId dicomfile:0

控制台日志显示加载流程中无法获取像素数据,且确认该DCM文件可在其他Viewer正常渲染。

环境版本:

  • @cornerstonejs/core: 5.0.8
  • @cornerstonejs/dicom-image-loader: 5.0.8
  • vite: 8.0.12

错误原因

  • 异步处理漏洞:viewport.setStack是异步Promise操作,原代码未用await等待完成,且try/catch无法捕获Promise内部异常,导致渲染提前执行,同时错误无法被捕获。
  • DICOM Loader配置不全:初始化时未指定web worker路径,导致无法启动DICOM解析worker,无法提取像素数据。
  • Vite依赖优化配置不当:排除了@cornerstonejs/dicom-image-loader的优化,可能导致依赖加载异常。

解决方案

1. 修正异步处理逻辑

使用await等待setStack完成,确保图像加载后再执行渲染,同时正确捕获异步错误:

input.addEventListener('change', async (event) => {
  const file = event.target.files[0];
  console.log('this is the dcm file', file);
  const imageId = cornerstoneDICOMImageLoader.wadouri.fileManager.add(file);
  console.log('Loading imageId:', imageId);
  try {
    await viewport.setStack([imageId]);
    viewport.render();
    console.log('Render complete');
  } catch (err) {
    console.error('Failed to load DICOM image:', err);
  }
});

2. 完善DICOM Image Loader初始化

添加web worker路径配置,确保Cornerstone能加载解析DICOM的worker脚本:

import { init as coreInit } from '@cornerstonejs/core';
import { init as dicomImageLoaderInit } from '@cornerstonejs/dicom-image-loader';
import { RenderingEngine, Enums } from '@cornerstonejs/core';
import * as cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';

coreInit();
// 初始化时指定worker脚本路径
dicomImageLoaderInit({
  maxWebWorkers: 1,
  webWorkerPath: new URL(
    '@cornerstonejs/dicom-image-loader/dist/dicomImageLoaderWorker.js',
    import.meta.url
  ).href,
});

3. 调整Vite配置优化依赖处理

移除@cornerstonejs/dicom-image-loader的排除项,添加ES模块别名,确保依赖正确加载:

import { defineConfig } from 'vite';
import { viteCommonjs } from '@originjs/vite-plugin-commonjs';

export default defineConfig({
  plugins: [viteCommonjs()],
  optimizeDeps: {
    include: ['dicom-parser'],
  },
  resolve: {
    alias: {
      '@cornerstonejs/dicom-image-loader': '@cornerstonejs/dicom-image-loader/dist/esm',
    },
  },
});

4. 确保DOM元素初始化时机正确

使用requestAnimationFrame延迟初始化渲染引擎,确保DOM元素已挂载到页面:

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

requestAnimationFrame(() => {
  const element = document.createElement('div');
  element.style.width = '700px';
  element.style.height = '700px';
  content.appendChild(element);

  const renderingEngine = new RenderingEngine('myRenderingEngine');
  const viewportId = 'CT_AXIAL_STACK';

  renderingEngine.enableElement({
    viewportId,
    type: Enums.ViewportType.STACK,
    element,
  });

  const viewport = renderingEngine.getViewport(viewportId);

  const input = document.getElementById('dicom');

  input.addEventListener('change', async (event) => {
    // 上述修正后的处理逻辑
  });
});

内容的提问来源于stack exchange,提问作者Yousef Tag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:25:00