image-js
Version:
Image processing and manipulation in JavaScript
30 lines (27 loc) • 924 B
text/typescript
import type { Mask } from '../Mask.js';
import {
getPolygonArea,
getPolygonPerimeter,
} from '../utils/geometry/polygons.js';
import type { ConvexHull } from './maskAnalysis.types.js';
import { getExtendedBorderPoints } from './utils/getExtendedBorderPoints.js';
import { monotoneChainConvexHull as mcch } from './utils/monotoneChainConvexHull.js';
/**
* Get the vertices of the convex Hull polygon of a mask.
* @param mask - Mask to process.
* @returns Array of the vertices of the convex Hull in clockwise order.
*/
export function getConvexHull(mask: Mask): ConvexHull {
const borderPoints = getExtendedBorderPoints(mask);
if (borderPoints.length === 0) {
return {
points: [],
surface: 0,
perimeter: 0,
};
}
const points = mcch(borderPoints);
const perimeter = getPolygonPerimeter(points);
const surface = getPolygonArea(points);
return { points, perimeter, surface };
}