分割
在 Cornerstone3DTools 中,我们把分割与分割表示形式这两个概念解耦了。
也就是说,从同一份分割可以创建出多种分割表示形式。例如,
可以从一份分割数据创建出三维标签图的分割表示形式,
也可以从同一份分割数据创建出轮廓的分割表示形式(暂未支持)。
这样我们就把分割的呈现层面与其底层数据解耦开了。

类似的关系结构也被一些主流医学影像软件采用,例如 3D Slicer 配合 polymorph segmentation。
API
与分割相关的函数和类都在 segmentation 模块中。
import { segmentation } from '@cornerstonejs/tools';
// 分割状态,持有全部分割及其工具组专属的表示形式
segmentation.state.XYZ;
// 活动分割相关方法(set / get)
segmentation.activeSegmentation.XYZ;
// 针对某个分段索引的加锁(set / get)
segmentation.locking.XYZ;
// 分段索引的操作(set / get)
segmentations.segmentIndex.XYZ;
下面逐一深入这些方法。
活动分割
每个视口可以同时显示多个分割表示形式,但每个视口只能有一个活动分割——分割工具只会修改它。2.x 起活动分割是按视口划分的,同一份分割可以在一个视口中活动、在另一个视口中非活动。本文给出获取与设置活动分割的 API。
样式配置
2.x 起分割配置通过统一的样式体系管理,用一个 specifier 对象把样式应用到不同粒度上——全局、按表示形式类型、按视口、按分割、按分段。本文说明各类表示形式的样式字段、getStyle 与 setStyle 的用法、非活动分割的渲染开关、颜色管理 API,以及样式的优先级顺序。
轮廓表示形式
轮廓分割表示形式由若干轮廓集构成,每个轮廓集代表一个解剖结构,其下再包含多条轮廓、每条轮廓包含若干三维坐标点。本文说明这一层级结构,并给出用 geometryLoader 加载轮廓集并注册为分割表示形式的完整代码。
自定义光标形状与填充策略
通过 BrushStrategy 的回调把自定义笔刷光标与填充谓词配对起来,让光标形状与实际写入标签图的体素完全一致。本文讲解从 hover 到填充的完整生命周期、计算世界坐标几何、渲染 SVG 光标、构建配套填充策略、接入 BrushTool,以及保持两者一致的实践要点。
分段加锁
可以给分割中的特定分段加锁,防止它被任何工具修改,从而保护已完成的分割成果。本文说明加锁的效果、2.x 中更新后的 locking API、完整用法示例,以及与 1.x 相比的改动点。
平面填充迭代
圆形、球形和矩形笔刷填充如何改用共享的体素板迭代器枚举体素,而不再遍历轴对齐的三维包围盒。本文说明填充契约、包围盒遍历在斜切平面上失效的原因、视图板层厚度控制什么、厚层填充的面积语义,以及笔画重采样与轮廓转标签图的处理。
保存与替换
分割、结构集(RTSTRUCT)和测量报告(SR)作为派生 DICOM 对象存储时,既可以另起一个新序列,也可以成为既有序列的下一个修订版。本文说明 predecessorImageId 选项带来的差异、PredecessorSequence 提供的三项信息、阅片器凭什么显示修订版,以及前驱不可用时的行为。
分段索引
用分割工具绘制时,可以指定使用哪个分段索引(segment index),从而让工具作用到特定分段上。本文给出获取和设置活动分段索引的 API。
分割工具
Cornerstone3DTools 提供一组用于修改分割的工具,包括笔刷工具、矩形剪刀、圆形剪刀、球形剪刀,以及基于阈值的矩形 ROI 工具。所有分割工具都能在轴位、冠状位、矢状位三种三维视图中编辑分割。
状态
SegmentationState 保存库中全部分割与分割表示形式的当前状态。2.x 起分割与其表示形式解耦,并从「按工具组划分」改为「按视口划分」。本文说明 colorLUT、分割对象的完整字段、把分割加入状态的方式,以及为视口添加各类表示形式的方法。