image-js
Version:
Image processing and manipulation in JavaScript
38 lines (34 loc) • 1.23 kB
text/typescript
import type { Image } from '../../Image.js';
import type { Point } from '../../geometry/index.js';
/**
* Compute the score of a keypoint using the function described in the FAST article.
* DOI: https://doi.org/10.1007/11744023_34.
* @param image - Image to process.
* @param origin - Keypoint coordinates.
* @param threshold - FAST threshold.
* @param circlePoints - Coordinates of the points on the circle.
* @returns Score of the corner.
*/
export function getFastScore(
image: Image,
origin: Point,
threshold: number,
circlePoints: Point[],
): number {
const currentIntensity = image.getValueByPoint(origin, 0);
let brighterSum = 0;
let darkerSum = 0;
for (const point of circlePoints) {
const pointIntensity = image.getValue(
origin.column + point.column,
origin.row + point.row,
0,
);
if (pointIntensity >= currentIntensity + threshold) {
brighterSum += Math.abs(pointIntensity - currentIntensity) - threshold; // circle point is lighter
} else if (pointIntensity <= currentIntensity - threshold) {
darkerSum += Math.abs(currentIntensity - pointIntensity) - threshold; // circle point is darker
}
}
return Math.max(brighterSum, darkerSum);
}