image-js 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/image-js.esm.js +7150 -6268
- package/dist/image-js.esm.js.map +1 -1
- package/dist/image-js.esm.min.js +2 -2
- package/dist/image-js.esm.min.js.map +1 -1
- package/dist/image-js.umd.js +8349 -7464
- package/dist/image-js.umd.js.map +1 -1
- package/dist/image-js.umd.min.js +2 -2
- package/dist/image-js.umd.min.js.map +1 -1
- package/dist-types/image-js.d.ts +42 -7
- package/lib/Stack.d.ts +1 -2
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/align/affineTransfrom/getAffineTransform.d.ts +1 -2
- package/lib/align/affineTransfrom/getAffineTransform.d.ts.map +1 -1
- package/lib/align/affineTransfrom/getAffineTransform.js +4 -1
- package/lib/align/affineTransfrom/getAffineTransform.js.map +1 -1
- package/lib/featureMatching/keypoints/getEigenvaluesForScore.d.ts +2 -2
- package/lib/featureMatching/keypoints/getEigenvaluesForScore.d.ts.map +1 -1
- package/lib/featureMatching/keypoints/getEigenvaluesForScore.js +27 -22
- package/lib/featureMatching/keypoints/getEigenvaluesForScore.js.map +1 -1
- package/lib/featureMatching/keypoints/getFastKeypoints.d.ts +4 -0
- package/lib/featureMatching/keypoints/getFastKeypoints.d.ts.map +1 -1
- package/lib/featureMatching/keypoints/getFastKeypoints.js +20 -5
- package/lib/featureMatching/keypoints/getFastKeypoints.js.map +1 -1
- package/lib/featureMatching/keypoints/getHarrisScore.js +1 -1
- package/lib/featureMatching/keypoints/getHarrisScore.js.map +1 -1
- package/lib/featureMatching/keypoints/getShiTomasiScore.d.ts +1 -2
- package/lib/featureMatching/keypoints/getShiTomasiScore.d.ts.map +1 -1
- package/lib/featureMatching/keypoints/getShiTomasiScore.js +1 -1
- package/lib/featureMatching/keypoints/getShiTomasiScore.js.map +1 -1
- package/lib/featureMatching/visualize/drawKeypoints.d.ts +2 -1
- package/lib/featureMatching/visualize/drawKeypoints.d.ts.map +1 -1
- package/lib/featureMatching/visualize/drawKeypoints.js +13 -0
- package/lib/featureMatching/visualize/drawKeypoints.js.map +1 -1
- package/lib/load/decodeBmp.d.ts.map +1 -1
- package/lib/load/decodeBmp.js +17 -0
- package/lib/load/decodeBmp.js.map +1 -1
- package/lib/maskAnalysis/getContourMoore.d.ts.map +1 -1
- package/lib/maskAnalysis/getContourMoore.js +6 -4
- package/lib/maskAnalysis/getContourMoore.js.map +1 -1
- package/lib/maskAnalysis/getConvexityDefects.d.ts +17 -0
- package/lib/maskAnalysis/getConvexityDefects.d.ts.map +1 -0
- package/lib/maskAnalysis/getConvexityDefects.js +75 -0
- package/lib/maskAnalysis/getConvexityDefects.js.map +1 -0
- package/lib/maskAnalysis/getExternalContour.d.ts +1 -1
- package/lib/maskAnalysis/getExternalContour.d.ts.map +1 -1
- package/lib/maskAnalysis/index.d.ts +1 -0
- package/lib/maskAnalysis/index.d.ts.map +1 -1
- package/lib/maskAnalysis/index.js +1 -0
- package/lib/maskAnalysis/index.js.map +1 -1
- package/lib/roi/getExternalContour.d.ts +1 -1
- package/lib/roi/getExternalContour.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Stack.ts +1 -3
- package/src/align/affineTransfrom/getAffineTransform.ts +5 -3
- package/src/featureMatching/keypoints/getEigenvaluesForScore.ts +29 -27
- package/src/featureMatching/keypoints/getFastKeypoints.ts +23 -5
- package/src/featureMatching/keypoints/getHarrisScore.ts +1 -1
- package/src/featureMatching/keypoints/getShiTomasiScore.ts +2 -3
- package/src/featureMatching/visualize/drawKeypoints.ts +20 -3
- package/src/load/decodeBmp.ts +22 -0
- package/src/maskAnalysis/getContourMoore.ts +6 -6
- package/src/maskAnalysis/getConvexityDefects.ts +105 -0
- package/src/maskAnalysis/index.ts +1 -0
package/dist-types/image-js.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { BitDepth as BitDepth_2 } from 'fast-png';
|
|
2
1
|
import { decode as decode_2 } from 'tiff';
|
|
3
2
|
import type { PngEncoderOptions } from 'fast-png';
|
|
4
3
|
|
|
@@ -424,6 +423,14 @@ export declare interface ConvexHull {
|
|
|
424
423
|
surface: number;
|
|
425
424
|
}
|
|
426
425
|
|
|
426
|
+
export declare interface ConvexityDefectsOptions {
|
|
427
|
+
/**
|
|
428
|
+
* Depth threshold to remove smaller convexity defaults.
|
|
429
|
+
* @default 0
|
|
430
|
+
*/
|
|
431
|
+
depthThreshold?: number;
|
|
432
|
+
}
|
|
433
|
+
|
|
427
434
|
export declare interface ConvolutionOptions {
|
|
428
435
|
/**
|
|
429
436
|
* Specify how the borders should be handled.
|
|
@@ -776,7 +783,7 @@ export declare interface DrawKeypointsOptions {
|
|
|
776
783
|
/**
|
|
777
784
|
* Options for the coloring of the keypoints depending on their score (useful if showScore = true).
|
|
778
785
|
*/
|
|
779
|
-
showScoreOptions?: GetColorsOptions;
|
|
786
|
+
showScoreOptions?: GetColorsOptions & DrawTextOptions;
|
|
780
787
|
}
|
|
781
788
|
|
|
782
789
|
/**
|
|
@@ -1065,6 +1072,23 @@ export declare interface DrawRectangleOptions<OutType> {
|
|
|
1065
1072
|
out?: OutType;
|
|
1066
1073
|
}
|
|
1067
1074
|
|
|
1075
|
+
declare interface DrawTextOptions {
|
|
1076
|
+
/**
|
|
1077
|
+
* General size and type of font.
|
|
1078
|
+
* Used as the default when font is not specified in individual text labels.
|
|
1079
|
+
*/
|
|
1080
|
+
font?: string;
|
|
1081
|
+
/**
|
|
1082
|
+
* General font color.
|
|
1083
|
+
* Used as the default when fontColor is not specified in individual text labels.
|
|
1084
|
+
*/
|
|
1085
|
+
fontColor?: number[];
|
|
1086
|
+
/**
|
|
1087
|
+
* Image to which the resulting image has to be put.
|
|
1088
|
+
*/
|
|
1089
|
+
out?: Image_2;
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1068
1092
|
export declare interface Ellipse {
|
|
1069
1093
|
center: {
|
|
1070
1094
|
column: number;
|
|
@@ -1444,9 +1468,8 @@ export declare interface GetAffineTransformOptions {
|
|
|
1444
1468
|
debug?: boolean;
|
|
1445
1469
|
/**
|
|
1446
1470
|
* Path of the debug image.
|
|
1447
|
-
* @default `${import.meta.dirname}/montage.png`
|
|
1448
1471
|
*/
|
|
1449
|
-
debugImagePath?: string;
|
|
1472
|
+
debugImagePath?: string | URL;
|
|
1450
1473
|
}
|
|
1451
1474
|
|
|
1452
1475
|
export declare interface GetAffineTransformResult {
|
|
@@ -1563,6 +1586,15 @@ export declare interface GetColorsOptions {
|
|
|
1563
1586
|
minValueFactor?: number;
|
|
1564
1587
|
}
|
|
1565
1588
|
|
|
1589
|
+
/**
|
|
1590
|
+
* Find border points that are farthest from its convex hull lines. Inspired by openCV's convexityDefects.
|
|
1591
|
+
* @param borderPoints - Mask's border points.
|
|
1592
|
+
* @param hullPoints - Mask's convex hull points.
|
|
1593
|
+
* @param options - Convexity defects options.
|
|
1594
|
+
* @returns Array of convexity defects.
|
|
1595
|
+
*/
|
|
1596
|
+
export declare function getConvexityDefects(borderPoints: Point[], hullPoints: Point[], options?: ConvexityDefectsOptions): Point[];
|
|
1597
|
+
|
|
1566
1598
|
/**
|
|
1567
1599
|
* Get the crosscheck matches from the source and destination descriptors.
|
|
1568
1600
|
* @param source - Source descriptors.
|
|
@@ -1622,6 +1654,10 @@ export declare interface GetFastKeypointsOptions extends IsFastKeypointOptions {
|
|
|
1622
1654
|
* @default `'FAST'`
|
|
1623
1655
|
*/
|
|
1624
1656
|
scoreAlgorithm?: 'HARRIS' | 'FAST' | 'TOMASI';
|
|
1657
|
+
/**
|
|
1658
|
+
* Value between 0 and 1 that signifies a percentage from maximum score found in the image. Points can be filtered based on this relative maximum score.
|
|
1659
|
+
*/
|
|
1660
|
+
qualityThreshold?: number;
|
|
1625
1661
|
/**
|
|
1626
1662
|
* Options for the Harris score computation.
|
|
1627
1663
|
*/
|
|
@@ -1814,11 +1850,10 @@ export declare interface GetRoisOptions {
|
|
|
1814
1850
|
export declare function getShiTomasiScore(image: Image_2, origin: Point, options?: GetShiTomasiScoreOptions): number;
|
|
1815
1851
|
|
|
1816
1852
|
export declare interface GetShiTomasiScoreOptions {
|
|
1817
|
-
qualityLevel?: number;
|
|
1818
1853
|
/**
|
|
1819
1854
|
* Size of the window to compute the Harris score.
|
|
1820
1855
|
* Should be an odd number so that the window can be centered on the corner.
|
|
1821
|
-
* @default `
|
|
1856
|
+
* @default `5`
|
|
1822
1857
|
*/
|
|
1823
1858
|
windowSize?: number;
|
|
1824
1859
|
}
|
|
@@ -3925,7 +3960,7 @@ export declare class Stack {
|
|
|
3925
3960
|
/**
|
|
3926
3961
|
* The bit depth of the images.
|
|
3927
3962
|
*/
|
|
3928
|
-
readonly bitDepth:
|
|
3963
|
+
readonly bitDepth: BitDepth;
|
|
3929
3964
|
/**
|
|
3930
3965
|
* Whether all the images of the stack have the same dimensions.
|
|
3931
3966
|
*/
|
package/lib/Stack.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { BitDepth } from '
|
|
2
|
-
import type { Image } from './Image.js';
|
|
1
|
+
import type { BitDepth, Image } from './Image.js';
|
|
3
2
|
import type { HistogramOptions } from './compute/index.js';
|
|
4
3
|
import type { ImageColorModel } from './utils/constants/colorModels.js';
|
|
5
4
|
export declare class Stack {
|
package/lib/Stack.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../src/Stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../src/Stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAa3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,qBAAa,KAAK;IAChB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,SAAgB,UAAU,EAAE,eAAe,CAAC;IAC5C;;OAEG;IACH,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC;;OAEG;IACH,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC;;OAEG;IACH,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;gBACgB,MAAM,EAAE,KAAK,EAAE;IAWjC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC;IAM7C;;;OAGG;IACI,KAAK,IAAI,KAAK;IAIrB;;;OAGG;IACI,SAAS,IAAI,KAAK,EAAE;IAI3B;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IAIrC;;;;;;;OAOG;IACI,QAAQ,CACb,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM;IAIT;;;;;;OAMG;IACI,eAAe,CACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM;IAIT;;;;OAIG;IACI,QAAQ,IAAI,KAAK;IAIxB;;;;OAIG;IACI,QAAQ,IAAI,KAAK;IAIxB;;;;OAIG;IACI,WAAW,IAAI,KAAK;IAI3B;;;;OAIG;IACI,SAAS,IAAI,KAAK;IAIzB;;;;OAIG;IACI,GAAG,IAAI,KAAK;IAInB;;;;OAIG;IACI,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,WAAW;IAG7D;;;OAGG;IAGH;;;;OAIG;IACI,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK;IAIpD;;;;OAIG;IACI,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK;CAG1D"}
|
package/lib/Stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../src/Stack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../src/Stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,9 +38,8 @@ export interface GetAffineTransformOptions {
|
|
|
38
38
|
debug?: boolean;
|
|
39
39
|
/**
|
|
40
40
|
* Path of the debug image.
|
|
41
|
-
* @default `${import.meta.dirname}/montage.png`
|
|
42
41
|
*/
|
|
43
|
-
debugImagePath?: string;
|
|
42
|
+
debugImagePath?: string | URL;
|
|
44
43
|
}
|
|
45
44
|
export interface AffineTransform {
|
|
46
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAffineTransform.d.ts","sourceRoot":"","sources":["../../../src/align/affineTransfrom/getAffineTransform.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAU5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAWrD,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB
|
|
1
|
+
{"version":3,"file":"getAffineTransform.d.ts","sourceRoot":"","sources":["../../../src/align/affineTransfrom/getAffineTransform.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAU5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAWrD,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE;QACL;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC;QAClB;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;QAClB;;WAEG;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;WAEG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B;;WAEG;QACH,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,KAAK,EAClB,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA4L1B"}
|
|
@@ -20,7 +20,7 @@ import { getSourceWithoutMargins } from './utils/getSourceWithoutMargins.js';
|
|
|
20
20
|
* @returns The affine transformation from source to destination image.
|
|
21
21
|
*/
|
|
22
22
|
export function getAffineTransform(source, destination, options = {}) {
|
|
23
|
-
const { centroidPatchDiameter = 31, bestKeypointRadius = 5, enhanceContrast = true, crosscheck = true, destinationOrigin = { column: 0, row: 0 }, maxRansacNbIterations, debug = false, debugImagePath
|
|
23
|
+
const { centroidPatchDiameter = 31, bestKeypointRadius = 5, enhanceContrast = true, crosscheck = true, destinationOrigin = { column: 0, row: 0 }, maxRansacNbIterations, debug = false, debugImagePath, } = options;
|
|
24
24
|
if (source.colorModel !== ImageColorModel.GREY) {
|
|
25
25
|
source = source.grey();
|
|
26
26
|
}
|
|
@@ -98,6 +98,9 @@ export function getAffineTransform(source, destination, options = {}) {
|
|
|
98
98
|
}
|
|
99
99
|
// create debug image
|
|
100
100
|
if (debug) {
|
|
101
|
+
if (!debugImagePath) {
|
|
102
|
+
throw new RangeError('Debug image file path is not specified.');
|
|
103
|
+
}
|
|
101
104
|
const montage = new Montage(source, destination, {
|
|
102
105
|
disposition: MontageDisposition.VERTICAL,
|
|
103
106
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAffineTransform.js","sourceRoot":"","sources":["../../../src/align/affineTransfrom/getAffineTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AAEzE,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAC;AAEpG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"getAffineTransform.js","sourceRoot":"","sources":["../../../src/align/affineTransfrom/getAffineTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AAEzE,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAC;AAEpG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAyF7E;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAa,EACb,WAAkB,EAClB,UAAqC,EAAE;IAEvC,MAAM,EACJ,qBAAqB,GAAG,EAAE,EAC1B,kBAAkB,GAAG,CAAC,EACtB,eAAe,GAAG,IAAI,EACtB,UAAU,GAAG,IAAI,EACjB,iBAAiB,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EACzC,qBAAqB,EACrB,KAAK,GAAG,KAAK,EACb,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,IAAI,MAAM,CAAC,UAAU,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;QACpD,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,0BAA0B;IAC1B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,mBAAmB,GAAG,uBAAuB,CACjD,MAAM,EACN,WAAW,EACX,iBAAiB,CAClB,CAAC;QAEF,MAAM,eAAe,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC;YACX,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,GAAG,EAAE,MAAM;SACZ,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QACpD,WAAW,CAAC,KAAK,CAAC;YAChB,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE;QACnC,qBAAqB;QACrB,aAAa,EAAE,kBAAkB;KAClC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,EAAE;QAC7C,qBAAqB;QACrB,aAAa,EAAE,kBAAkB;KAClC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;IACvD,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC;IAEjE,4CAA4C;IAC5C,IAAI,OAAO,GAAY,EAAE,CAAC;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,oBAAoB,CAC5B,WAAW,CAAC,WAAW,EACvB,gBAAgB,CAAC,WAAW,CAC7B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,kBAAkB,CAC1B,WAAW,CAAC,WAAW,EACvB,gBAAgB,CAAC,WAAW,CAC7B,CAAC;QAEF,OAAO,GAAG,uBAAuB,CAC/B,OAAO,EACP,WAAW,CAAC,SAAS,EACrB,gBAAgB,CAAC,SAAS,EAC1B,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAC9B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,GAAY,EAAE,CAAC;IAC/B,IAAI,iBAAiB,GAAY,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,iBAAiB,CAAC,IAAI,CACpB,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAC1D,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;IACpC,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,OAAO,GAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE;YAC3D,gBAAgB,EAAE,oBAAoB;YACtC,aAAa,EAAE,0BAA0B;YACzC,WAAW,EAAE,iBAAiB;YAC9B,eAAe,EAAE,qBAAqB;SACvC,CAAC,CAAC;QACH,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAC;QAE/C,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QAC/B,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QAE3B,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACxC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,YAAY,GAAG,YAAY,CAAC;QAC5B,iBAAiB,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE;YAC/C,WAAW,EAAE,kBAAkB,CAAC,QAAQ;SACzC,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,CACjB,OAAO,EACP,WAAW,CAAC,SAAS,EACrB,gBAAgB,CAAC,SAAS,EAC1B,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;QAEF,MAAM,aAAa,GAAY,EAAE,CAAC;QAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,WAAW,CACjB,aAAa,EACb,WAAW,CAAC,SAAS,EACrB,gBAAgB,CAAC,SAAS,EAC1B,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAC7B,CAAC;QAEF,MAAM,wBAAwB,GAAG;YAC/B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAClB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,CAAC;SACd,CAAC;QAEF,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QACvE,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE;YAChD,MAAM,EAAE,OAAO,CAAC,iBAAiB;YACjC,GAAG,wBAAwB;SAC5B,CAAC,CAAC;QAEH,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,wBAAwB,CAC9C,YAAY,EACZ,iBAAiB,CAClB,CAAC;IAEF,OAAO;QACL,SAAS,EAAE;YACT,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,KAAK,EAAE,eAAe,CAAC,KAAK;YAC5B,WAAW,EAAE;gBACX,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;gBACjD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;aAC/C;SACF;QACD,KAAK,EAAE;YACL,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,SAAS;YACT,kBAAkB;YAClB,iBAAiB;YACjB,sBAAsB;SACvB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,8 +4,8 @@ import type { Point } from '../../index_full.ts';
|
|
|
4
4
|
* A function that calculates eigenvalues to calculate feature score for Harris and Shi-Tomasi algorithms.
|
|
5
5
|
* @param image - Image take data from.
|
|
6
6
|
* @param origin - Center of the window, where the corner should be.
|
|
7
|
-
* @param
|
|
7
|
+
* @param cropSize - Size of the window, where data should be scanned.
|
|
8
8
|
* @returns Array of two eigenvalues.
|
|
9
9
|
*/
|
|
10
|
-
export declare function getEigenvaluesForScore(image: Image, origin: Point,
|
|
10
|
+
export declare function getEigenvaluesForScore(image: Image, origin: Point, cropSize?: number): number[];
|
|
11
11
|
//# sourceMappingURL=getEigenvaluesForScore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEigenvaluesForScore.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getEigenvaluesForScore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getEigenvaluesForScore.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getEigenvaluesForScore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,QAAQ,SAAI,YAyCb"}
|
|
@@ -1,39 +1,44 @@
|
|
|
1
|
-
import { EigenvalueDecomposition, Matrix
|
|
1
|
+
import { EigenvalueDecomposition, Matrix } from 'ml-matrix';
|
|
2
|
+
import { rawDirectConvolution } from "../../filters/convolution.js";
|
|
2
3
|
import { SOBEL_X, SOBEL_Y } from '../../utils/constants/kernels.js';
|
|
3
4
|
/**
|
|
4
5
|
* A function that calculates eigenvalues to calculate feature score for Harris and Shi-Tomasi algorithms.
|
|
5
6
|
* @param image - Image take data from.
|
|
6
7
|
* @param origin - Center of the window, where the corner should be.
|
|
7
|
-
* @param
|
|
8
|
+
* @param cropSize - Size of the window, where data should be scanned.
|
|
8
9
|
* @returns Array of two eigenvalues.
|
|
9
10
|
*/
|
|
10
|
-
export function getEigenvaluesForScore(image, origin,
|
|
11
|
-
if (!(
|
|
11
|
+
export function getEigenvaluesForScore(image, origin, cropSize = 5) {
|
|
12
|
+
if (!(cropSize % 2)) {
|
|
12
13
|
throw new TypeError('windowSize must be an odd integer');
|
|
13
14
|
}
|
|
15
|
+
const kernelRadius = (SOBEL_X.length - 1) / 2;
|
|
16
|
+
const windowRadius = (cropSize - 1) / 2;
|
|
17
|
+
const padded = cropSize + 2 * kernelRadius;
|
|
14
18
|
const cropOrigin = {
|
|
15
|
-
row: origin.row -
|
|
16
|
-
column: origin.column -
|
|
19
|
+
row: origin.row - windowRadius - kernelRadius,
|
|
20
|
+
column: origin.column - windowRadius - kernelRadius,
|
|
17
21
|
};
|
|
18
22
|
const window = image.crop({
|
|
19
23
|
origin: cropOrigin,
|
|
20
|
-
width:
|
|
21
|
-
height:
|
|
24
|
+
width: padded,
|
|
25
|
+
height: padded,
|
|
22
26
|
});
|
|
23
|
-
const xDerivative = window
|
|
24
|
-
const yDerivative = window
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
const xDerivative = rawDirectConvolution(window, SOBEL_X);
|
|
28
|
+
const yDerivative = rawDirectConvolution(window, SOBEL_Y);
|
|
29
|
+
let xxSum = 0;
|
|
30
|
+
let xySum = 0;
|
|
31
|
+
let yySum = 0;
|
|
32
|
+
for (let i = kernelRadius; i < window.height - kernelRadius; i++) {
|
|
33
|
+
for (let j = kernelRadius; j < window.width - kernelRadius; j++) {
|
|
34
|
+
const idx = i * window.width + j;
|
|
35
|
+
const gx = xDerivative[idx];
|
|
36
|
+
const gy = yDerivative[idx];
|
|
37
|
+
xxSum += gx * gx;
|
|
38
|
+
xySum += gx * gy;
|
|
39
|
+
yySum += gy * gy;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
37
42
|
const structureTensor = new Matrix([
|
|
38
43
|
[xxSum, xySum],
|
|
39
44
|
[xySum, yySum],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEigenvaluesForScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getEigenvaluesForScore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"getEigenvaluesForScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getEigenvaluesForScore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAG5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACpE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAY,EACZ,MAAa,EACb,QAAQ,GAAG,CAAC;IAEZ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC;IAC3C,MAAM,UAAU,GAAG;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,YAAY,GAAG,YAAY;QAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY;KACpD,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5B,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC;QACjC,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,uBAAuB,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC;AACtE,CAAC"}
|
|
@@ -26,6 +26,10 @@ export interface GetFastKeypointsOptions extends IsFastKeypointOptions {
|
|
|
26
26
|
* @default `'FAST'`
|
|
27
27
|
*/
|
|
28
28
|
scoreAlgorithm?: 'HARRIS' | 'FAST' | 'TOMASI';
|
|
29
|
+
/**
|
|
30
|
+
* Value between 0 and 1 that signifies a percentage from maximum score found in the image. Points can be filtered based on this relative maximum score.
|
|
31
|
+
*/
|
|
32
|
+
qualityThreshold?: number;
|
|
29
33
|
/**
|
|
30
34
|
* Options for the Harris score computation.
|
|
31
35
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFastKeypoints.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getFastKeypoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAQrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,qBAAqB,GAAG,wBAAwB,CAAC;CACjE;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACpC,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"getFastKeypoints.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getFastKeypoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAQrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,qBAAqB,GAAG,wBAAwB,CAAC;CACjE;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACpC,YAAY,EAAE,CAyGhB"}
|
|
@@ -17,9 +17,10 @@ import { isFastKeypoint } from './isFastKeypoint.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export function getFastKeypoints(image, options = {}) {
|
|
19
19
|
const { fastRadius = 3, scoreAlgorithm = 'FAST', scoreOptions } = options;
|
|
20
|
+
const windowSize = scoreOptions?.windowSize ?? 7;
|
|
20
21
|
const circlePoints = getCirclePoints(fastRadius);
|
|
21
22
|
const compassPoints = getCompassPoints(fastRadius);
|
|
22
|
-
const { maxNbFeatures = 500, nbContiguousPixels = (3 / 4) * circlePoints.length, threshold = 20, nonMaxSuppression = true, } = options;
|
|
23
|
+
const { maxNbFeatures = 500, nbContiguousPixels = (3 / 4) * circlePoints.length, threshold = 20, nonMaxSuppression = true, qualityThreshold = 0, } = options;
|
|
23
24
|
checkProcessable(image, {
|
|
24
25
|
channels: [1],
|
|
25
26
|
alpha: false,
|
|
@@ -38,10 +39,11 @@ export function getFastKeypoints(image, options = {}) {
|
|
|
38
39
|
.with('FAST', () => fastScore)
|
|
39
40
|
.with('TOMASI', () => tomasiScore)
|
|
40
41
|
.exhaustive();
|
|
42
|
+
const padding = scoreAlgorithm === 'FAST' ? 0 : (windowSize + 1) / 2;
|
|
41
43
|
const allKeypoints = [];
|
|
42
44
|
const scoreArray = new Float64Array(image.size).fill(Number.NEGATIVE_INFINITY);
|
|
43
|
-
for (let row =
|
|
44
|
-
for (let column =
|
|
45
|
+
for (let row = padding; row < image.height - padding; row++) {
|
|
46
|
+
for (let column = padding; column < image.width - padding; column++) {
|
|
45
47
|
const corner = { row, column };
|
|
46
48
|
if (isFastKeypoint(corner, image, circlePoints, compassPoints, {
|
|
47
49
|
nbContiguousPixels,
|
|
@@ -72,7 +74,20 @@ export function getFastKeypoints(image, options = {}) {
|
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
let maxScore = -Infinity;
|
|
78
|
+
for (const k of keypoints) {
|
|
79
|
+
if (k.score > maxScore)
|
|
80
|
+
maxScore = k.score;
|
|
81
|
+
}
|
|
82
|
+
const filtered = [];
|
|
83
|
+
// threshold by default negative infinity
|
|
84
|
+
const filterThreshold = qualityThreshold * maxScore;
|
|
85
|
+
for (const k of keypoints) {
|
|
86
|
+
if (k.score >= filterThreshold) {
|
|
87
|
+
k.score /= maxScore;
|
|
88
|
+
filtered.push(k);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return filtered.toSorted((a, b) => b.score - a.score).slice(0, maxNbFeatures);
|
|
77
92
|
}
|
|
78
93
|
//# sourceMappingURL=getFastKeypoints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFastKeypoints.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getFastKeypoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,gBAAgB,MAAM,4CAA4C,CAAC;AAG1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"getFastKeypoints.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getFastKeypoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { getEigenvaluesForScore } from './getEigenvaluesForScore.js';
|
|
|
15
15
|
* @returns The Harris score.
|
|
16
16
|
*/
|
|
17
17
|
export function getHarrisScore(image, origin, options = {}) {
|
|
18
|
-
const { harrisConstant = 0.04, windowSize } = options;
|
|
18
|
+
const { harrisConstant = 0.04, windowSize = 5 } = options;
|
|
19
19
|
const eigenValues = getEigenvaluesForScore(image, origin, windowSize);
|
|
20
20
|
return (eigenValues[0] * eigenValues[1] -
|
|
21
21
|
harrisConstant * (eigenValues[0] + eigenValues[1]) ** 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getHarrisScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getHarrisScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAY,EACZ,MAAa,EACb,UAAiC,EAAE;IAEnC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"getHarrisScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getHarrisScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAY,EACZ,MAAa,EACb,UAAiC,EAAE;IAEnC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO,CACL,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC/B,cAAc,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CACxD,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { Image } from '../../Image.ts';
|
|
2
2
|
import type { Point } from '../../index_full.ts';
|
|
3
3
|
export interface GetShiTomasiScoreOptions {
|
|
4
|
-
qualityLevel?: number;
|
|
5
4
|
/**
|
|
6
5
|
* Size of the window to compute the Harris score.
|
|
7
6
|
* Should be an odd number so that the window can be centered on the corner.
|
|
8
|
-
* @default `
|
|
7
|
+
* @default `5`
|
|
9
8
|
*/
|
|
10
9
|
windowSize?: number;
|
|
11
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getShiTomasiScore.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getShiTomasiScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,MAAM,WAAW,wBAAwB;IACvC
|
|
1
|
+
{"version":3,"file":"getShiTomasiScore.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getShiTomasiScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAKR"}
|
|
@@ -11,7 +11,7 @@ import { getEigenvaluesForScore } from './getEigenvaluesForScore.js';
|
|
|
11
11
|
* @returns The Shi-Tomasi score.
|
|
12
12
|
*/
|
|
13
13
|
export function getShiTomasiScore(image, origin, options = {}) {
|
|
14
|
-
const { windowSize =
|
|
14
|
+
const { windowSize = 5 } = options;
|
|
15
15
|
const eigenValues = getEigenvaluesForScore(image, origin, windowSize);
|
|
16
16
|
return Math.min(eigenValues[0], eigenValues[1]);
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getShiTomasiScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getShiTomasiScore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"getShiTomasiScore.js","sourceRoot":"","sources":["../../../src/featureMatching/keypoints/getShiTomasiScore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAWrE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAY,EACZ,MAAa,EACb,UAAoC,EAAE;IAEtC,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAEnC,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Image } from '../../Image.js';
|
|
2
2
|
import type { Point } from '../../geometry/index.js';
|
|
3
|
+
import type { DrawTextOptions } from '../../index_full.ts';
|
|
3
4
|
import type { GetColorsOptions } from '../featureMatching.types.js';
|
|
4
5
|
import type { FastKeypoint } from '../keypoints/getFastKeypoints.js';
|
|
5
6
|
import type { OrientedFastKeypoint } from '../keypoints/getOrientedFastKeypoints.js';
|
|
@@ -41,7 +42,7 @@ export interface DrawKeypointsOptions {
|
|
|
41
42
|
/**
|
|
42
43
|
* Options for the coloring of the keypoints depending on their score (useful if showScore = true).
|
|
43
44
|
*/
|
|
44
|
-
showScoreOptions?: GetColorsOptions;
|
|
45
|
+
showScoreOptions?: GetColorsOptions & DrawTextOptions;
|
|
45
46
|
}
|
|
46
47
|
export interface DrawOrientedKeypointsOptions extends DrawKeypointsOptions {
|
|
47
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawKeypoints.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/visualize/drawKeypoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"drawKeypoints.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/visualize/drawKeypoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAIrF,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IAEH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAAC;CACvD;AAED,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,KAAK,CAAC;AACT,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,oBAAoB,EAAE,EACjC,OAAO,CAAC,EAAE,4BAA4B,GACrC,KAAK,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { drawText } from "../../index_full.js";
|
|
1
2
|
import { sum } from '../../utils/geometry/points.js';
|
|
2
3
|
import { getOutputImage } from '../../utils/getOutputImage.js';
|
|
3
4
|
import { getColors } from '../utils/getColors.js';
|
|
@@ -13,6 +14,8 @@ export function drawKeypoints(image, keypoints, options = {}) {
|
|
|
13
14
|
const { markerSize = 10, fill = false, showScore = false, origin = { row: 0, column: 0 }, showScoreOptions, } = options;
|
|
14
15
|
let { maxNbKeypoints = keypoints.length } = options;
|
|
15
16
|
const { strokeColor = [255, 0, 0] } = options;
|
|
17
|
+
const fontColor = showScoreOptions?.fontColor ?? [0, 0, 255];
|
|
18
|
+
const font = showScoreOptions?.font ?? '20px Helvetica';
|
|
16
19
|
if (maxNbKeypoints > keypoints.length) {
|
|
17
20
|
maxNbKeypoints = keypoints.length;
|
|
18
21
|
}
|
|
@@ -50,6 +53,16 @@ export function drawKeypoints(image, keypoints, options = {}) {
|
|
|
50
53
|
});
|
|
51
54
|
}
|
|
52
55
|
}
|
|
56
|
+
if (showScore) {
|
|
57
|
+
drawText(newImage, keypoints.map((k) => ({
|
|
58
|
+
content: (k.score * 100).toFixed(2),
|
|
59
|
+
position: sum(k.origin, origin),
|
|
60
|
+
font,
|
|
61
|
+
fontColor: [...fontColor, 255],
|
|
62
|
+
})), {
|
|
63
|
+
out: newImage,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
53
66
|
return newImage;
|
|
54
67
|
}
|
|
55
68
|
function isOrientedFastKeypoint(kpt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawKeypoints.js","sourceRoot":"","sources":["../../../src/featureMatching/visualize/drawKeypoints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drawKeypoints.js","sourceRoot":"","sources":["../../../src/featureMatching/visualize/drawKeypoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeBmp.d.ts","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"decodeBmp.d.ts","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CA0BjD"}
|
package/lib/load/decodeBmp.js
CHANGED
|
@@ -30,7 +30,24 @@ export function decodeBmp(data) {
|
|
|
30
30
|
return new Image(decodedData.width, decodedData.height, {
|
|
31
31
|
colorModel,
|
|
32
32
|
data: decodedData.data,
|
|
33
|
+
resolution: getBmpResolution(decodedData),
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets image's resolution from its parsed data. BMP stores resolution in
|
|
39
|
+
* pixels per meter.
|
|
40
|
+
* @param bmp - Parsed BMP image.
|
|
41
|
+
* @returns Object with resolution data if it is defined.
|
|
42
|
+
*/
|
|
43
|
+
function getBmpResolution(bmp) {
|
|
44
|
+
if (!bmp.xPixelsPerMeter || !bmp.yPixelsPerMeter) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
x: bmp.xPixelsPerMeter,
|
|
49
|
+
y: bmp.yPixelsPerMeter,
|
|
50
|
+
unit: 'meter',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
36
53
|
//# sourceMappingURL=decodeBmp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeBmp.js","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"decodeBmp.js","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOlC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,WAAW,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YAC3D,IAAI,EAAE,WAAW,CAAC,IAAkB;SACrC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,IAAI,UAA2B,CAAC;QAChC,QAAQ,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC;gBACJ,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,CAAC;gBACJ,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR;gBACE,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;QACV,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YACtD,UAAU;YACV,IAAI,EAAE,WAAW,CAAC,IAAkB;YACpC,UAAU,EAAE,gBAAgB,CAAC,WAAW,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAe;IACvC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,eAAe;QACtB,CAAC,EAAE,GAAG,CAAC,eAAe;QACtB,IAAI,EAAE,OAAO;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getContourMoore.d.ts","sourceRoot":"","sources":["../../src/maskAnalysis/getContourMoore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getContourMoore.d.ts","sourceRoot":"","sources":["../../src/maskAnalysis/getContourMoore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAqCzD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAuDnD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import assert from
|
|
1
|
+
import { assert } from "../utils/validators/assert.js";
|
|
2
2
|
import { getBitSafe, getCoordsFromIndex, } from "./utils/getExternalContourUtils.js";
|
|
3
3
|
/**
|
|
4
4
|
* Possible directions.
|
|
@@ -37,8 +37,10 @@ export function getContourMoore(mask) {
|
|
|
37
37
|
const [row, col] = getCoordsFromIndex(index, mask.width);
|
|
38
38
|
const startingPoint = { column: col, row };
|
|
39
39
|
let currentPoint = startingPoint;
|
|
40
|
-
visited[index]
|
|
41
|
-
|
|
40
|
+
if (!visited[index]) {
|
|
41
|
+
visited[index] = 1;
|
|
42
|
+
contour.push(currentPoint);
|
|
43
|
+
}
|
|
42
44
|
const firstNext = findNextPoint(mask, currentPoint, { column: col - 1, row });
|
|
43
45
|
if (!firstNext) {
|
|
44
46
|
return contour;
|
|
@@ -53,7 +55,7 @@ export function getContourMoore(mask) {
|
|
|
53
55
|
contour.push(currentPoint);
|
|
54
56
|
}
|
|
55
57
|
const next = findNextPoint(mask, currentPoint, backtrackPoint);
|
|
56
|
-
assert
|
|
58
|
+
assert(next, 'Next border point is undefined.');
|
|
57
59
|
backtrackPoint = next.prevPoint;
|
|
58
60
|
currentPoint = next.currPoint;
|
|
59
61
|
if (currentPoint.column === startingPoint.column &&
|