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 確實很好用
功能完整
但就是沒有文檔
只能靠自己解析除錯
確實不容易
留言板
歡迎留下建議與分享!希望一起交流!感恩!