【从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 格式,同时增加新的功能。它被设计为足够灵活,以适应不断发展的医学影像技术。

相关推荐
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz20 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
从前慢丶20 小时前
前端交互规范(Web 端)
前端
CHU72903520 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing21 小时前
Page-agent MCP结构
前端·人工智能
王霸天21 小时前
💥别再抄网上的Scale缩放代码了!50行源码教你写一个永不翻车的大屏适配
前端·vue.js·数据可视化
小领航21 小时前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
@大迁世界21 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript
PieroPc21 小时前
一个功能强大的 Web 端标签设计和打印工具,支持服务器端直接打印到局域网打印机。Fastapi + html
前端·html·fastapi
悟空瞎说21 小时前
深入 Vue3 响应式:为什么有的要加.value,有的不用?从设计到源码彻底讲透
前端·vue.js