核心概念介绍
本节介绍 Cornerstone3D(@cornerstonejs/core)中的核心概念。
Cornerstone3D 不只是一个「渲染」库,它还负责:
- 影像的渲染(GPU 与 CPU 两种方式)
- 数据与元数据的缓存
- 为影像 / 体数据加载器 API 提供框架
- 提供元数据 API 支持
本节的目的是对 Cornerstone3D 的核心概念做一个整体梳理。
缓存
缓存(Cache)API 负责跟踪已创建的体数据、管理内存占用,并在分配数据将超出应用设定上限时提醒宿主应用。本文说明影像易失区与体数据非易失区的划分、isCacheable 等工具函数,以及 2.x 起改为「一切以影像为单位缓存」所带来的六项优化。
通用视口
7 个项目
几何加载器
几何加载器(Geometry Loader)用于从文件或 URL 加载并缓存三维几何数据(如网格)。本文说明如何用 registerGeometryLoader 注册加载器、cornerstoneMeshLoader 的用法,以及它支持的 PLY、OBJ、STL、VTP 网格格式与 MTL、JPG、PNG 材质格式。
影像 ID(ImageId)
ImageId 是一个用于唯一标识单张影像的 URL,Cornerstone 依据其 URL scheme 决定调用哪个影像加载器。本文说明 ImageId 的格式,并给出 WADO-URI、WADO-RS 等不同加载器下 imageId 的实际例子。
影像加载器
影像加载器(ImageLoader)是一个接收 imageId、返回影像对象的 JavaScript 函数。本文说明加载器的完整工作流、如何用 registerImageLoader 注册自定义加载器,以及 DICOM、Web 图片、NIfTI 三类官方加载器的用途与初始化方式。
影像对象
影像对象(Image Object)是 Cornerstone 中表示单张医学影像的核心数据结构,包含像素数据、窗宽窗位、像素间距、PET 的 SUV 缩放等信息。本文给出 IImage 接口的完整字段,并说明加载器为何返回影像加载对象而不是单纯的 Promise。
元数据提供者
元数据提供者(Metadata Provider)是一个函数,充当访问影像相关非像素元数据的接口。本文说明它的函数签名、元数据类型的开放性、多个提供者之间的优先级机制,以及标定像素间距、计算型元数据与 metaData 辅助方法。
渲染引擎
渲染引擎(RenderingEngine)负责创建视口、把视口关联到页面上的 HTML 元素,并借助离屏 WebGL 画布把数据渲染出来。本文说明屏上与离屏渲染的差异、共享体数据 mapper、TiledRenderingEngine 与 ContextPoolRenderingEngine 两种实现的取舍与配置,以及创建视口的两种方式。
请求池管理器
请求池管理器把影像的获取与解码拆分为 imageRetrievalPoolManager 和 imageLoadPoolManager 两个独立队列,各自可配置最大并发数并异步执行,避免解码耗时阻塞新的获取请求。本文说明两个队列的配置、在自定义加载器中的用法,以及请求重排序。
堆栈视口
堆栈视口(Stack Viewport)是用于渲染和浏览二维影像堆栈的专用视口,支持滚动切片、平移缩放,以及对单张影像的独立调节。官方该页尚在撰写中,本页给出可用的替代阅读入口。
视图引用与显示状态
视图引用(ViewReference)指定视口显示的是哪张影像,显示状态(ViewPresentation)指定它如何呈现。两者配合可以把视图在视口之间转移、或记录下来稍后恢复。本文说明 referencedImageId 与参考坐标系两套信息、堆栈与体数据视口各自产出的引用,以及导航到标注、挑选最合适视口、视口缩放三个实用范例。
视口
视口(Viewport)可以理解为一台从特定视角观察影像的相机、一块显示该相机输出的画布,以及一组从影像数据到可视数据的变换。本文介绍堆栈视口、体数据视口、3D 视口、视频视口与全片影像视口的适用场景,以及用 displayArea 设置初始缩放与平移的方法。
体数据加载器
体数据加载器接收 volumeId 及加载所需信息,返回一个解析为体数据的 Promise。体数据可以由一组二维影像构成,也可以来自单个三维数组对象(如 NIfTI)。本文说明如何用 registerVolumeLoader 注册加载器,并解析默认的流式体数据加载器实现。
体数据视口
体数据视口(Volume Viewport)是用于渲染体数据的专用视口,具备多平面重建(MPR)能力,支持对三维医学影像数据集做正交与斜切重建。官方该页尚在撰写中,本页给出可用的替代阅读入口。
体数据
体数据(Volume)是一个在空间中具有物理尺寸和方位的三维数据数组,由参考坐标系、体素间距、体素维度、原点和方向向量共同确定其坐标系。本文给出 IImageVolume 接口的完整字段,并说明为何用 VoxelManager 取代了原先的 scalarData。
体素管理器
体素管理器(VoxelManager)取代了直接访问 scalarData 的做法,为体素数据提供精确的读写接口而不生成大型数组。本文列出 getAtIndex、setAtIJK、forEach 等完整 API,给出从 scalarData 迁移过来的前后对照代码,以及内存与性能方面的最佳实践。
Web Worker
Cornerstone3D 基于 comlink 封装的 Web Worker API,把计算密集任务放到后台线程执行。本文说明 WebWorkerManager 的 registerWorker、executeTask、回调传递与 terminate 用法,以及请求分组优先级与空闲自动终止配置。