image-js
Version:
Image processing and manipulation in JavaScript
31 lines (27 loc) • 1.09 kB
text/typescript
import type { Match } from './bruteForceMatch.js';
/**
* Use this function to only keep the match from source to destination with
* the smallest distance (score) for each destination keypoint.
* @param matches - Matches from source to destination.
* @returns Only the matches from source to destination with the smallest distance.
*/
export function filterSmallestDistanceMatches(matches: Match[]): Match[] {
const sorted = matches.slice();
sorted.sort((a, b) => a.destinationIndex - b.destinationIndex);
const result: Match[] = [];
let sameDestMatches: Match[] = [];
let currentIndex = sorted[0].destinationIndex;
for (const match of sorted) {
if (match.destinationIndex === currentIndex) {
sameDestMatches.push(match);
} else {
sameDestMatches.sort((a, b) => a.distance - b.distance);
result.push(...sameDestMatches.slice(0, 1));
currentIndex = match.destinationIndex;
sameDestMatches = [match];
}
}
sameDestMatches.sort((a, b) => a.distance - b.distance);
result.push(...sameDestMatches.slice(0, 1));
return result;
}