image-js
Version:
Image processing and manipulation in JavaScript
65 lines (57 loc) • 1.52 kB
text/typescript
import { match } from 'ts-pattern';
import type { Roi } from './Roi.js';
import type { RoiMapManager } from './RoiMapManager.js';
import { computeRois } from './computeRois.js';
export const RoiKind = {
BLACK: 'black',
WHITE: 'white',
BW: 'bw',
} as const;
export type RoiKind = (typeof RoiKind)[keyof typeof RoiKind];
export interface GetRoisOptions {
/**
* Minimal surface of the ROIs to keep.
* @default `0`
*/
minSurface?: number;
/**
* Maximal surface of the ROIs to keep.
* @default `Number.MAX_SAFE_INTEGER`
*/
maxSurface?: number;
/**
* Kind of ROIs to keep.
* @default `'white'`
*/
kind?: RoiKind;
}
/**
* Return an array of ROIs matching the options.
* @param roiMapManager - The ROI map manager containing the ROIs.
* @param options - Get ROIs options.
* @returns The array of ROIs.
*/
export function getRois(
roiMapManager: RoiMapManager,
options: GetRoisOptions = {},
): Roi[] {
const {
minSurface = 0,
maxSurface = Number.MAX_SAFE_INTEGER,
kind = 'white',
} = options;
if (
roiMapManager.blackRois.length === 0 &&
roiMapManager.whiteRois.length === 0
) {
computeRois(roiMapManager);
}
const rois = match(kind)
.with('black', () => roiMapManager.blackRois)
.with('white', () => roiMapManager.whiteRois)
.with('bw', () => [...roiMapManager.whiteRois, ...roiMapManager.blackRois])
.exhaustive();
return rois.filter(
(roi) => roi.surface >= minSurface && roi.surface <= maxSurface,
);
}