All files / tools/src/utilities/segmentation/growCut floodFillIntensityRangeTypes.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

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 63 64 65 66 67 68 69                                                                                                                                         
import type { Types } from '@cornerstonejs/core';
import type { ViewportVoiMappingForTool } from './getViewportVoiMappingForVolume';
 
export type FloodFillIntensityRangeDiagnostics = {
  neighborhoodMean: number;
  neighborhoodStdDev: number;
  clickedVoxelValue: number;
  positiveStdDevMultiplier: number;
  neighborhoodRadius: number;
  strategy?: string;
  strategyMode?: 'triClass' | 'exactRange';
  mappedBand?: { min: number; max: number };
  canvasSampleCount?: number;
  /** True when luma-derived raw band missed the seed; interval was recentred on the voxel scalar. */
  canvasDiskBandCenteredOnSeed?: boolean;
  /** Canvas disk samples excluded dominant 0s (letterbox / unused canvas). */
  canvasDiskLetterboxTrimmed?: boolean;
  /** Populated by the adaptive (config-less) region strategy. */
  adaptive?: {
    /** Chosen threshold depth in display-byte units (0..255). */
    toleranceBytes: number;
    /** In-plane region size (pixels) at the chosen tolerance. */
    regionSizePx: number;
    /** In-plane region footprint (mm²) at the chosen tolerance. */
    regionAreaMm2?: number;
    /** Window-perimeter median display byte used as background estimate. */
    backgroundByte: number;
    /** Seed reference display byte (3x3 median at the snapped seed). */
    seedByte: number;
    /** +1 = region brighter than surroundings, -1 = darker. */
    polarity?: number;
    /** True when the seed moved off the clicked pixel onto higher contrast. */
    seedSnapped: boolean;
    /** Analysis window size (in-plane pixels). */
    windowSize: [number, number];
    /** Region growth change points: [toleranceLevel, regionSizePx]. */
    growthCurve?: Array<[number, number]>;
    /** Tolerance level at which the region exceeded the size cap (-1 if never). */
    explosionLevel?: number;
    /** Tolerance level at which the region first touched the window border (-1 if never). */
    borderTouchLevel?: number;
  };
};
 
export type FloodFillIntensityRangeResult = {
  min: number;
  max: number;
  ijkStart: Types.Point3;
  diagnostics: FloodFillIntensityRangeDiagnostics;
};
 
export type FloodFillIntensityRangeOptions = {
  positiveStdDevMultiplier?: number;
  initialNeighborhoodRadius?: number;
  /** When set, neighborhood stats use mapped intensities and band is inversed to raw. */
  voiMapping?: ViewportVoiMappingForTool | null;
  viewport?: Types.IViewport;
  element?: HTMLDivElement;
  referencedVolumeId?: string;
  canvasPoint?: { x: number; y: number };
  canvasDiskRadiusPx?: number;
};
 
export type GetFloodFillIntensityRange = (
  referencedVolume: Types.IImageVolume,
  worldPosition: Types.Point3,
  options?: FloodFillIntensityRangeOptions
) => FloodFillIntensityRangeResult | null;