Describe Your Question
I perform segmentation using brush and save the segmentation mask in database. When I reload Xray, I want to reapply the segmentation. I add it to segmentation state but it does not render on screen even after after re-rendering the viewport.
What steps can we follow to reproduce the bug?
- I get segmentation mask, so I re-create a labelmap image for it like this
const labelmapImageId = `labelmap:${sourceImageId}:${Date.now()}`;
const pixelData = new Uint8Array(metadata.pixelData);
const hasNonZeroPixels = pixelData.some((pixel) => pixel !== 0);
Logger.debug("Pixel data stats:", {
hasNonZeroPixels,
pixelDataLength: pixelData.length,
dimensions: metadata.dimensions,
});
if (hasNonZeroPixels) {
imageLoader.registerImageLoader("labelmap", (imageId) => {
const imageLoadObject = {
promise: undefined,
cancelFn: undefined,
decacheData: undefined,
};
const image = {
imageId: labelmapImageId,
minPixelValue: 0,
maxPixelValue: 1,
slope: 1.0,
intercept: 0,
windowCenter: 0.5,
windowWidth: 1,
getPixelData: () => pixelData,
rows: metadata.dimensions.height,
columns: metadata.dimensions.width,
height: metadata.dimensions.height,
width: metadata.dimensions.width,
color: false,
columnPixelSpacing: sourceImage.columnPixelSpacing || 1,
rowPixelSpacing: sourceImage.rowPixelSpacing || 1,
sizeInBytes: pixelData.length,
};
imageLoadObject.promise = Promise.resolve(image);
return imageLoadObject;
});
const labelmapImageNow =
await imageLoader.loadAndCacheImage(labelmapImageId);
await segmentation.addSegmentations([
{
segmentationId,
representation: {
type: csToolsEnums.SegmentationRepresentations.Labelmap,
data: {
imageIds: [labelmapImageId],
referencedImageIds: [sourceImageId],
},
},
},
]);
// Add the segmentation representation to the viewport
await segmentation.addSegmentationRepresentations(
viewportId,
[
{
segmentationId,
type: csToolsEnums.SegmentationRepresentations.Labelmap,
},
],
);
const viewport = renderingEngineRef.current.getViewport(viewportId);
await viewport.render();
If I look at segmentation state, it is intact. If I look at labelmap image, it is also loaded and cached and has non zero pixels. Still I don’t see segmentation mask on my screen.
I would highly appreciate any support on how to debug this further.