【从0上手cornerstone3D】如何加载nifti格式的文件

在线演示

支持加载的文件格式

  • .nii

  • .nii.gz

代码实现

js 复制代码
npm install @cornerstonejs/nifti-volume-loader
js 复制代码
// ------------- 核心代码 Start-------------------
// 注册一个nifti格式的加载器
volumeLoader.registerVolumeLoader(
  "nifti",
  cornerstoneNiftiImageVolumeLoader
);

const niftiURL =
  "https://ohif-assets.s3.us-east-2.amazonaws.com/nifti/MRHead.nii.gz";

// 在定义volumeId时使用 nifti 前缀,便于识别使用的加载器种类
const volumeId = "nifti:" + niftiURL;
await volumeLoader.createAndCacheVolume(volumeId);
// ------------- 核心代码 End-------------------

const renderingEngine = new RenderingEngine(this.renderingEngineId);
// 在渲染引擎中创建并加载视图,使视图与HTML元素绑定
const viewportId1 = "CT_AXIAL";
const viewportId2 = "CT_SAGITTAL";
const viewportId3 = "CT_CORONAL";
const viewportInputArray = [
  {
    viewportId: viewportId1,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element1"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.AXIAL,
    },
  },
  {
    viewportId: viewportId2,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element2"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.SAGITTAL,
    },
  },
  {
    viewportId: viewportId3,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element3"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.CORONAL,
    },
  },
];
renderingEngine.setViewports(viewportInputArray);

// 在视图上设置Volume
await setVolumesForViewports(
  renderingEngine,
  [
    {
      volumeId: volumeId,
    },
  ],
  [viewportId1, viewportId2, viewportId3]
);

// 渲染图像
renderingEngine.renderViewports([viewportId1, viewportId2, viewportId3]);

问题解决

  1. 非安全上下文下,提示 SharedArrayBuffer is not defined 的问题
  • 原因:非安全模式下,SharedArrayBuffer的构造函数为隐藏的,所以在类型判断时,由于SharedArrayBuffer未声明而被使用导致ReferenceError

  • 临时解决:手动声明一个SharedArrayBuffer跳过检测

JavaScript 复制代码
window.SharedArrayBuffer = ArrayBuffer

拓展

NIfTI文件

NIfTI(Neuroimaging Informatics Technology Initiative)格式是一种广泛使用的数据格式,主要用于存储和交换神经影像学数据,尤其是在功能磁共振成像(fMRI)、结构 MRI 和 DTI(扩散张量成像)等领域。这种格式由 NIfTI 组织开发,旨在简化神经影像数据的使用和交换。

NIfTI 文件的主要特点:

支持 3D 和 4D 数据

NIfTI 文件能够存储三维影像数据(如单个时间点的 MRI 扫描)以及四维数据(如随时间变化的系列扫描)

包含数据和头信息:

每个 NIfTI 文件不仅包含影像像素或体素的原始数据,还包含了描述这些数据的元数据(头信息)。这些信息包括维度、空间定位、数据类型、单位(如毫米和秒)等。

两种文件格式:

单文件(.nii)格式,将数据和头信息存储在一个文件中。

双文件(.hdr 和 .img)格式,分别存储头信息和数据。

支持数据压缩:

NIfTI 文件可以被压缩以减少空间,通常以 .nii.gz 的格式出现。

灵活性和兼容性:

NIfTI 格式旨在兼容旧的 ANALYZE 7.5 格式,同时增加新的功能。它被设计为足够灵活,以适应不断发展的医学影像技术。

相关推荐
excel3 分钟前
理解 JavaScript 中的 for...in 与 for...of 的区别
前端
前端小巷子33 分钟前
Webpack 5模块联邦
前端·javascript·面试
玲小珑36 分钟前
Next.js 教程系列(十九)图像优化:next/image 与高级技巧
前端·next.js
晓得迷路了37 分钟前
栗子前端技术周刊第 91 期 - 新版 React Compiler 文档、2025 HTML 状态调查、Bun v1.2.19...
前端·javascript·react.js
江城开朗的豌豆43 分钟前
Vue和React中的key:为什么列表渲染必须加这玩意儿?
前端·vue.js·面试
江城开朗的豌豆1 小时前
前端路由傻傻分不清?route和router的区别,看完这篇别再搞混了!
前端·javascript·vue.js
pengzhuofan1 小时前
Web开发系列-第0章 Web介绍
前端
小鱼人爱编程1 小时前
Java基石--反射让你直捣黄龙
前端·spring boot·后端
JosieBook2 小时前
【web应用】如何进行前后端调试Debug? + 前端JavaScript调试Debug?
前端·chrome·debug
LBJ辉3 小时前
2. Webpack 高级配置
前端·javascript·webpack