image-js
Version:
Image processing and manipulation in JavaScript
68 lines (61 loc) • 1.66 kB
text/typescript
import type { RoiKind } from '../../getRois.js';
import { hsvToRgb } from '../hsvToRgb.js';
import { rgbToNumber } from '../rgbToNumber.js';
// warning: the values in a uint32 array are flipped!! e.g. [0,0,0,1] becomes 0x01000000
// the bits values are therefore in the following order: ABGR
// index 32768 corresponds to the middle of the array
export interface GetBinaryMapOptions {
/**
* Number of black ROIs.
*/
nbNegative: number;
/**
* Number of white ID ROIs.
*/
nbPositive: number;
/**
* Specify which ROIs to color.
* @default `'bw'`
*/
roiKind?: RoiKind;
/**
* Hue of white ROIs.
* @default `120`
*/
whiteHue?: number;
/**
* Hue of black ROIs.
* @default `0`
*/
blackHue?: number;
}
/**
* Return a map where ROIs are red (negative) or green (positive) depending on the ROI index.
* @param options - Color maps options.
* @returns The colored map.
*/
export function getBinaryMap(options: GetBinaryMapOptions): Uint32Array {
const {
nbNegative,
nbPositive,
whiteHue = 120,
blackHue = 0,
roiKind = 'bw',
} = options;
const colorMap = new Uint32Array(nbNegative + nbPositive + 1);
// negative values
if (roiKind === 'bw' || roiKind === 'black') {
for (let i = -nbNegative; i < 0; i++) {
const hsv = [blackHue, 255, 255];
colorMap[i + nbNegative] = rgbToNumber(hsvToRgb(hsv));
}
}
if (roiKind === 'bw' || roiKind === 'white') {
// positive values
for (let i = 1; i <= nbPositive; i++) {
const hsv = [whiteHue, 255, 255];
colorMap[i + nbNegative] = rgbToNumber(hsvToRgb(hsv));
}
}
return colorMap;
}