cornerstonejs 有顯示切割範圍功能
https://www.cornerstonejs.org/live-examples/labelmaprendering
但是只有 example
沒有程式可以看
你只能自己看他打包後的程式來拆解...
雖然是真的能用
但確實有點麻煩
這個範例的應用方式為
// 載入需要套件
import {
init as coreInit,
RenderingEngine,
Enums,
volumeLoader,
setVolumesForViewports,
cache,
} from '@cornerstonejs/core';
import {
init as cornerstoneToolsInit,
ToolGroupManager,
WindowLevelTool,
ZoomTool,
Enums as csToolsEnums,
addTool,
StackScrollTool,
PanTool,
segmentation,
// ProbeTool,
// CrosshairsTool,
} from '@cornerstonejs/tools';
// 初始化 segment
// ct_volumeId 要注意-這個跟 volume 綁再一起
var segmentationId = 'MY_SEGMENTATION_ID';
volumeLoader.createAndCacheDerivedLabelmapVolume(ct_volumeId, {
volumeId: segmentationId
});
// 取得一個空的切割範圍
const segmentationVolume = cache.getVolume(segmentationId);
// 取得切割範圍寬度
const { dimensions, voxelManager } = segmentationVolume;
// 這邊計算DEMO的範圍-實際應用要自己設定範圍-可以從座標指定
var innerRadius = dimensions[0] / 8;
var outerRadius = dimensions[0] / 4;
var centerOffset = [0, 0, 0];
var scale = [1, 1, 1];
const center = [
dimensions[0] / 2 + centerOffset[0],
dimensions[1] / 2 + centerOffset[1],
dimensions[2] / 2 + centerOffset[2],
];
let voxelIndex = 0;
// 設定範圍
for (let z = 0; z < dimensions[2]; z++) {
for (let y = 0; y < dimensions[1]; y++) {
for (let x = 0; x < dimensions[0]; x++) {
const distanceFromCenter = Math.sqrt(
(x - center[0]) * scale[0] * ((x - center[0]) * scale[0]) +
(y - center[1]) * scale[1] * ((y - center[1]) * scale[1]) +
(z - center[2]) * scale[2] * ((z - center[2]) * scale[2])
);
if (distanceFromCenter < innerRadius) {
// 範圍是從這邊設定的 所以傳進來的應該是範圍的座標
voxelManager.setAtIndex(voxelIndex, 1);
} else if (distanceFromCenter < outerRadius) {
voxelManager.setAtIndex(voxelIndex, 2);
}
voxelIndex++;
}
}
}
const values = voxelManager.getCompleteScalarDataArray();
// values 是分類數組-範圍要由 voxelManager.setAtIndex 決定
const scalarArray = vtkDataArray.newInstance({
name: `Pixels`,
values,
});
segmentationVolume.imageData.getPointData().setScalars(scalarArray);
// 加入切割範圍
segmentation.addSegmentations([
{
segmentationId,
representation: {
type: csToolsEnums.SegmentationRepresentations.Labelmap,
data: {
volumeId: segmentationId
}
}
}
]);
var segmentationRepresentation = {
segmentationId
};
// 加入到 view port
segmentation.addLabelmapRepresentationToViewportMap({
[viewportId_axial]: [
segmentationRepresentation
],
[viewportId_sagittal]: [
segmentationRepresentation
],
[viewportId_coronal]: [
segmentationRepresentation
]
});
覺得 cornerstonejs 確實很好用
功能完整
但就是沒有文檔
只能靠自己解析除錯
確實不容易


留言板
歡迎留下建議與分享!希望一起交流!感恩!