Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 20x 20x 20x 20x 20x 20x 3x 3x 3x 20x | import { SegmentationRepresentations } from '../../../enums';
import {
SegmentationPublicInput,
Segmentation,
} from '../../../types/SegmentationStateTypes';
import type { ContourSegmentationData } from '../../../types/ContourTypes';
/**
* It takes in a segmentation input and returns a segmentation with default values
* @param segmentationInput - The input to the segmentation.
* @returns A Segmentation object.
* @internal
*/
function normalizeSegmentationInput(
segmentationInput: SegmentationPublicInput
): Segmentation {
const { segmentationId, representation } = segmentationInput;
const isContourRepresentation =
representation.type === SegmentationRepresentations.Contour;
let data = representation.data ? { ...representation.data } : null;
// Contour representation data is defined internally
data = !data && isContourRepresentation ? {} : data;
// Data cannot be undefined for labelmap and surface
Iif (!data) {
throw new Error('Segmentation representation data may not be undefined');
}
if (isContourRepresentation) {
const contourData = <ContourSegmentationData>data;
// geometryIds will be removed in a near future. It still exist in the
// code for compatibility only but it is optional from now on.
contourData.geometryIds = contourData.geometryIds ?? [];
// Make sure annotationUIDsMap is defined because an empty contour is
// created before adding contour annotations to the map. Also it prevents
// breaking legacy code after moving from geometryIds to annotationUIDsMap.
contourData.annotationUIDsMap = contourData.annotationUIDsMap ?? new Map();
}
// Todo: we should be able to let the user pass in non-default values for
// cachedStats, label, activeSegmentIndex, etc.
return {
segmentationId,
cachedStats: {},
segmentLabels: {},
label: null,
segmentsLocked: new Set(),
type: representation.type,
activeSegmentIndex: 1,
representationData: {
[representation.type]: {
...data,
},
},
};
}
export default normalizeSegmentationInput;
|