image-js 1.0.0 → 1.1.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 +866 -198
- 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 +866 -198
- 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 +2 -3
- package/lib/Mask.d.ts +1 -1
- package/lib/Mask.js +1 -1
- package/lib/featureMatching/matching/filterEuclideanDistance.d.ts.map +1 -1
- package/lib/featureMatching/matching/filterEuclideanDistance.js +6 -7
- package/lib/featureMatching/matching/filterEuclideanDistance.js.map +1 -1
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.d.ts.map +1 -1
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.js +6 -3
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.js.map +1 -1
- package/lib/featureMatching/utils/sortByDistance.d.ts.map +1 -1
- package/lib/featureMatching/utils/sortByDistance.js +3 -1
- package/lib/featureMatching/utils/sortByDistance.js.map +1 -1
- package/lib/featureMatching/utils/sortBySourceDest.d.ts.map +1 -1
- package/lib/featureMatching/utils/sortBySourceDest.js +6 -2
- package/lib/featureMatching/utils/sortBySourceDest.js.map +1 -1
- package/lib/load/decode.d.ts.map +1 -1
- package/lib/load/decode.js +2 -0
- package/lib/load/decode.js.map +1 -1
- package/lib/load/decodeBmp.d.ts +8 -0
- package/lib/load/decodeBmp.d.ts.map +1 -0
- package/lib/load/decodeBmp.js +36 -0
- package/lib/load/decodeBmp.js.map +1 -0
- package/lib/load/decodePng.d.ts.map +1 -1
- package/lib/load/decodePng.js +29 -5
- package/lib/load/decodePng.js.map +1 -1
- package/lib/load/decodeTiff.d.ts.map +1 -1
- package/lib/load/decodeTiff.js +44 -21
- package/lib/load/decodeTiff.js.map +1 -1
- package/lib/maskAnalysis/utils/getMbrAngle.d.ts.map +1 -1
- package/lib/maskAnalysis/utils/getMbrAngle.js +2 -1
- package/lib/maskAnalysis/utils/getMbrAngle.js.map +1 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.d.ts.map +1 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.js +2 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.js.map +1 -1
- package/lib/save/encodeBmp.d.ts +4 -4
- package/lib/save/encodeBmp.d.ts.map +1 -1
- package/lib/save/encodeBmp.js +22 -14
- package/lib/save/encodeBmp.js.map +1 -1
- package/lib/stack/load/decodeApng.d.ts +8 -0
- package/lib/stack/load/decodeApng.d.ts.map +1 -0
- package/lib/stack/load/decodeApng.js +60 -0
- package/lib/stack/load/decodeApng.js.map +1 -0
- package/lib/stack/load/decodeStack.d.ts.map +1 -1
- package/lib/stack/load/decodeStack.js +2 -0
- package/lib/stack/load/decodeStack.js.map +1 -1
- package/lib/utils/geometry/points.d.ts.map +1 -1
- package/lib/utils/geometry/points.js +3 -1
- package/lib/utils/geometry/points.js.map +1 -1
- package/lib/utils/geometry/removeClosePoints.d.ts.map +1 -1
- package/lib/utils/geometry/removeClosePoints.js +2 -1
- package/lib/utils/geometry/removeClosePoints.js.map +1 -1
- package/package.json +27 -27
- package/src/Mask.ts +1 -1
- package/src/featureMatching/matching/filterEuclideanDistance.ts +6 -13
- package/src/featureMatching/matching/filterSmallestDistanceMatches.ts +6 -9
- package/src/featureMatching/utils/sortByDistance.ts +3 -1
- package/src/featureMatching/utils/sortBySourceDest.ts +6 -2
- package/src/load/decode.ts +2 -1
- package/src/load/decodeBmp.ts +37 -0
- package/src/load/decodePng.ts +39 -7
- package/src/load/decodeTiff.ts +53 -22
- package/src/maskAnalysis/utils/getMbrAngle.ts +2 -1
- package/src/maskAnalysis/utils/monotoneChainConvexHull.ts +2 -1
- package/src/save/encodeBmp.ts +22 -15
- package/src/stack/load/decodeApng.ts +71 -0
- package/src/stack/load/decodeStack.ts +2 -0
- package/src/utils/geometry/points.ts +3 -1
- package/src/utils/geometry/removeClosePoints.ts +2 -1
package/dist-types/image-js.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { BitDepth as BitDepth_2 } from 'fast-png';
|
|
2
2
|
import { decode as decode_2 } from 'tiff';
|
|
3
|
-
import { Image as Image_3 } from '../Image.ts';
|
|
4
3
|
import type { PngEncoderOptions } from 'fast-png';
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -1279,7 +1278,7 @@ export declare interface FeretDiameter {
|
|
|
1279
1278
|
* @param dataUrl - Image URL.
|
|
1280
1279
|
* @returns decoded image data.
|
|
1281
1280
|
*/
|
|
1282
|
-
export declare function fetchURL(dataUrl: string): Promise<
|
|
1281
|
+
export declare function fetchURL(dataUrl: string): Promise<Image_2>;
|
|
1283
1282
|
|
|
1284
1283
|
/**
|
|
1285
1284
|
* Apply a flip filter to an image.
|
|
@@ -2715,7 +2714,7 @@ export declare class Mask {
|
|
|
2715
2714
|
setBitByIndex(index: number, value: BitValue): void;
|
|
2716
2715
|
/**
|
|
2717
2716
|
* Get the number of pixels that do not have the value 0.
|
|
2718
|
-
* @returns
|
|
2717
|
+
* @returns The number of non-zero pixels.
|
|
2719
2718
|
*/
|
|
2720
2719
|
getNbNonZeroPixels(): number;
|
|
2721
2720
|
/**
|
package/lib/Mask.d.ts
CHANGED
|
@@ -156,7 +156,7 @@ export declare class Mask {
|
|
|
156
156
|
setBitByIndex(index: number, value: BitValue): void;
|
|
157
157
|
/**
|
|
158
158
|
* Get the number of pixels that do not have the value 0.
|
|
159
|
-
* @returns
|
|
159
|
+
* @returns The number of non-zero pixels.
|
|
160
160
|
*/
|
|
161
161
|
getNbNonZeroPixels(): number;
|
|
162
162
|
/**
|
package/lib/Mask.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterEuclideanDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EAAE,EAChB,eAAe,EAAE,YAAY,EAAE,EAC/B,oBAAoB,EAAE,YAAY,EAAE,EACpC,OAAO,GAAE,qCAA0C,GAClD,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"filterEuclideanDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EAAE,EAChB,eAAe,EAAE,YAAY,EAAE,EAC/B,oBAAoB,EAAE,YAAY,EAAE,EACpC,OAAO,GAAE,qCAA0C,GAClD,KAAK,EAAE,CAoCT"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export function filterEuclideanDistance(matches, sourceKeypoints, destinationKeypoints, options = {}) {
|
|
11
11
|
const { origin = { column: 0, row: 0 } } = options;
|
|
12
|
-
const sorted = matches.
|
|
12
|
+
const sorted = matches.slice();
|
|
13
|
+
sorted.sort((a, b) => a.destinationIndex - b.destinationIndex);
|
|
13
14
|
const result = [];
|
|
14
15
|
let sameDestMatches = [];
|
|
15
16
|
let currentIndex = sorted[0].destinationIndex;
|
|
@@ -18,16 +19,14 @@ export function filterEuclideanDistance(matches, sourceKeypoints, destinationKey
|
|
|
18
19
|
sameDestMatches.push(match);
|
|
19
20
|
}
|
|
20
21
|
else {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
.slice(0, 1));
|
|
22
|
+
sameDestMatches.sort((a, b) => distanceSquared(a) - distanceSquared(b));
|
|
23
|
+
result.push(...sameDestMatches.slice(0, 1));
|
|
24
24
|
currentIndex = match.destinationIndex;
|
|
25
25
|
sameDestMatches = [match];
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
.slice(0, 1));
|
|
28
|
+
sameDestMatches.sort((a, b) => distanceSquared(a) - distanceSquared(b));
|
|
29
|
+
result.push(...sameDestMatches.slice(0, 1));
|
|
31
30
|
return result;
|
|
32
31
|
function distanceSquared(match) {
|
|
33
32
|
return ((sourceKeypoints[match.sourceIndex].origin.row -
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterEuclideanDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,eAA+B,EAC/B,oBAAoC,EACpC,UAAiD,EAAE;IAEnD,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"filterEuclideanDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,eAA+B,EAC/B,oBAAoC,EACpC,UAAiD,EAAE;IAEnD,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5C,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;IAEd,SAAS,eAAe,CAAC,KAAY;QACnC,OAAO,CACL,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG;YAC5C,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACtD,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YACH,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC/C,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC1D,MAAM,CAAC,MAAM,CAAC;gBACd,CAAC,CACJ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterSmallestDistanceMatches.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"filterSmallestDistanceMatches.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAqBvE"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* @returns Only the matches from source to destination with the smallest distance.
|
|
6
6
|
*/
|
|
7
7
|
export function filterSmallestDistanceMatches(matches) {
|
|
8
|
-
const sorted = matches.
|
|
8
|
+
const sorted = matches.slice();
|
|
9
|
+
sorted.sort((a, b) => a.destinationIndex - b.destinationIndex);
|
|
9
10
|
const result = [];
|
|
10
11
|
let sameDestMatches = [];
|
|
11
12
|
let currentIndex = sorted[0].destinationIndex;
|
|
@@ -14,12 +15,14 @@ export function filterSmallestDistanceMatches(matches) {
|
|
|
14
15
|
sameDestMatches.push(match);
|
|
15
16
|
}
|
|
16
17
|
else {
|
|
17
|
-
|
|
18
|
+
sameDestMatches.sort((a, b) => a.distance - b.distance);
|
|
19
|
+
result.push(...sameDestMatches.slice(0, 1));
|
|
18
20
|
currentIndex = match.destinationIndex;
|
|
19
21
|
sameDestMatches = [match];
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
sameDestMatches.sort((a, b) => a.distance - b.distance);
|
|
25
|
+
result.push(...sameDestMatches.slice(0, 1));
|
|
23
26
|
return result;
|
|
24
27
|
}
|
|
25
28
|
//# sourceMappingURL=filterSmallestDistanceMatches.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterSmallestDistanceMatches.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"filterSmallestDistanceMatches.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5C,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortByDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sortByDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAMxD"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* @returns Sorted copy of the array of matches.
|
|
5
5
|
*/
|
|
6
6
|
export function sortByDistance(matches) {
|
|
7
|
-
|
|
7
|
+
const sorted = matches.slice();
|
|
8
|
+
sorted.sort((match1, match2) => {
|
|
8
9
|
return match1.distance - match2.distance;
|
|
9
10
|
});
|
|
11
|
+
return sorted;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=sortByDistance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortByDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,
|
|
1
|
+
{"version":3,"file":"sortByDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortBySourceDest.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sortBySourceDest.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQ1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQ1D"}
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
* @returns Sorted copy of the array of matches.
|
|
5
5
|
*/
|
|
6
6
|
export function sortBySourceDest(matches) {
|
|
7
|
-
|
|
7
|
+
const sorted = matches.slice();
|
|
8
|
+
sorted.sort((match1, match2) => {
|
|
8
9
|
if (match1.sourceIndex < match2.sourceIndex)
|
|
9
10
|
return -1;
|
|
10
11
|
if (match1.sourceIndex > match2.sourceIndex)
|
|
11
12
|
return 1;
|
|
12
13
|
return match1.destinationIndex - match2.destinationIndex;
|
|
13
14
|
});
|
|
15
|
+
return sorted;
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Sort array of matches by destination index and then source index.
|
|
@@ -18,12 +20,14 @@ export function sortBySourceDest(matches) {
|
|
|
18
20
|
* @returns Sorted copy of the array of matches.
|
|
19
21
|
*/
|
|
20
22
|
export function sortByDestSource(matches) {
|
|
21
|
-
|
|
23
|
+
const sorted = matches.slice();
|
|
24
|
+
sorted.sort((match1, match2) => {
|
|
22
25
|
if (match1.destinationIndex < match2.destinationIndex)
|
|
23
26
|
return -1;
|
|
24
27
|
if (match1.destinationIndex > match2.destinationIndex)
|
|
25
28
|
return 1;
|
|
26
29
|
return match1.sourceIndex - match2.sourceIndex;
|
|
27
30
|
});
|
|
31
|
+
return sorted;
|
|
28
32
|
}
|
|
29
33
|
//# sourceMappingURL=sortBySourceDest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortBySourceDest.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,
|
|
1
|
+
{"version":3,"file":"sortBySourceDest.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/lib/load/decode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAenD"}
|
package/lib/load/decode.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import imageType from 'image-type';
|
|
2
2
|
import { match } from 'ts-pattern';
|
|
3
|
+
import { decodeBmp } from "./decodeBmp.js";
|
|
3
4
|
import { decodeJpeg } from './decodeJpeg.js';
|
|
4
5
|
import { decodePng } from './decodePng.js';
|
|
5
6
|
import { decodeTiff } from './decodeTiff.js';
|
|
@@ -16,6 +17,7 @@ export function decode(data) {
|
|
|
16
17
|
.with({ mime: 'image/png' }, () => decodePng(typedArray))
|
|
17
18
|
.with({ mime: 'image/jpeg' }, () => decodeJpeg(typedArray))
|
|
18
19
|
.with({ mime: 'image/tiff' }, () => decodeTiff(typedArray))
|
|
20
|
+
.with({ mime: 'image/bmp' }, () => decodeBmp(typedArray))
|
|
19
21
|
.otherwise(() => {
|
|
20
22
|
throw new RangeError(`invalid data format: ${type?.mime}`);
|
|
21
23
|
});
|
package/lib/load/decode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAqB;IAC1C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACxD,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACxD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,UAAU,CAAC,wBAAwB,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Image } from '../Image.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Decode a BMP. See the fast-bmp npm module.
|
|
4
|
+
* @param data - The data to decode.
|
|
5
|
+
* @returns The decoded image or mask.
|
|
6
|
+
*/
|
|
7
|
+
export declare function decodeBmp(data: Uint8Array): Image;
|
|
8
|
+
//# sourceMappingURL=decodeBmp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeBmp.d.ts","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAyBjD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { decode } from 'fast-bmp';
|
|
2
|
+
import { Image } from "../Image.js";
|
|
3
|
+
import { Mask } from "../Mask.js";
|
|
4
|
+
/**
|
|
5
|
+
* Decode a BMP. See the fast-bmp npm module.
|
|
6
|
+
* @param data - The data to decode.
|
|
7
|
+
* @returns The decoded image or mask.
|
|
8
|
+
*/
|
|
9
|
+
export function decodeBmp(data) {
|
|
10
|
+
const decodedData = decode(data);
|
|
11
|
+
if (decodedData.bitsPerPixel === 1) {
|
|
12
|
+
const mask = new Mask(decodedData.width, decodedData.height, {
|
|
13
|
+
data: decodedData.data,
|
|
14
|
+
});
|
|
15
|
+
return mask.convertColor('GREY');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
let colorModel;
|
|
19
|
+
switch (decodedData.channels) {
|
|
20
|
+
case 1:
|
|
21
|
+
colorModel = 'GREY';
|
|
22
|
+
break;
|
|
23
|
+
case 3:
|
|
24
|
+
colorModel = 'RGB';
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
colorModel = 'RGBA';
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
return new Image(decodedData.width, decodedData.height, {
|
|
31
|
+
colorModel,
|
|
32
|
+
data: decodedData.data,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=decodeBmp.js.map
|
|
@@ -0,0 +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;AAGlC;;;;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;SACrC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAoCnD"}
|
package/lib/load/decodePng.js
CHANGED
|
@@ -9,10 +9,16 @@ import { assert } from '../utils/validators/assert.js';
|
|
|
9
9
|
export function decodePng(buffer) {
|
|
10
10
|
const png = decode(buffer);
|
|
11
11
|
let colorModel;
|
|
12
|
-
const bitDepth = png.depth
|
|
12
|
+
const bitDepth = png.depth;
|
|
13
13
|
if (png.palette) {
|
|
14
14
|
return loadPalettePng(png);
|
|
15
15
|
}
|
|
16
|
+
if (bitDepth === 1) {
|
|
17
|
+
return new Image(png.width, png.height, {
|
|
18
|
+
data: decodeBinary(png),
|
|
19
|
+
colorModel: 'GREY',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
16
22
|
switch (png.channels) {
|
|
17
23
|
case 1:
|
|
18
24
|
colorModel = 'GREY';
|
|
@@ -43,7 +49,7 @@ export function decodePng(buffer) {
|
|
|
43
49
|
function loadPalettePng(png) {
|
|
44
50
|
assert(png.palette);
|
|
45
51
|
const pixels = png.width * png.height;
|
|
46
|
-
const data = new Uint8Array(pixels *
|
|
52
|
+
const data = new Uint8Array(pixels * png.palette[0].length);
|
|
47
53
|
const pixelsPerByte = 8 / png.depth;
|
|
48
54
|
const factor = png.depth < 8 ? pixelsPerByte : 1;
|
|
49
55
|
const mask = Number.parseInt('1'.repeat(png.depth), 2);
|
|
@@ -57,12 +63,30 @@ function loadPalettePng(png) {
|
|
|
57
63
|
mask;
|
|
58
64
|
}
|
|
59
65
|
const paletteValue = png.palette[value];
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
for (const paletteChannel of paletteValue) {
|
|
67
|
+
data[dataIndex++] = paletteChannel;
|
|
68
|
+
}
|
|
63
69
|
}
|
|
64
70
|
return new Image(png.width, png.height, {
|
|
65
71
|
data,
|
|
72
|
+
colorModel: png.palette[0].length === 4 ? 'RGBA' : 'RGB',
|
|
66
73
|
});
|
|
67
74
|
}
|
|
75
|
+
function decodeBinary(png) {
|
|
76
|
+
const totalPixels = png.width * png.height;
|
|
77
|
+
const result = new Uint8Array(totalPixels);
|
|
78
|
+
const pngData = png.data;
|
|
79
|
+
const padding = png.width % 8;
|
|
80
|
+
const bytesPerLine = Math.ceil(png.width / 8);
|
|
81
|
+
let pixelIndex = 0;
|
|
82
|
+
for (let byteIndex = 0; byteIndex < pngData.length && pixelIndex < totalPixels; byteIndex++) {
|
|
83
|
+
const byte = pngData[byteIndex];
|
|
84
|
+
const limit = byteIndex % bytesPerLine === 0 ? 8 - padding : 0;
|
|
85
|
+
for (let bitIndex = 7; bitIndex >= limit && pixelIndex < totalPixels; bitIndex--) {
|
|
86
|
+
const bit = (byte >> bitIndex) & 1;
|
|
87
|
+
result[pixelIndex++] = bit * 255;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
68
92
|
//# sourceMappingURL=decodePng.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,UAA2B,CAAC;IAChC,MAAM,QAAQ,GAAa,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAqEnD"}
|
package/lib/load/decodeTiff.js
CHANGED
|
@@ -7,9 +7,8 @@ import { getMetadata } from './getMetadata.js';
|
|
|
7
7
|
* @returns The decoded image.
|
|
8
8
|
*/
|
|
9
9
|
export function decodeTiff(buffer) {
|
|
10
|
-
const result = decode(buffer);
|
|
10
|
+
const result = decode(buffer, { pages: [0] });
|
|
11
11
|
return getImageFromIFD(result[0]);
|
|
12
|
-
// TODO: optimize not to decode whole file
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* Create image from a single IFD.
|
|
@@ -17,39 +16,63 @@ export function decodeTiff(buffer) {
|
|
|
17
16
|
* @returns The decoded image.
|
|
18
17
|
*/
|
|
19
18
|
export function getImageFromIFD(ifd) {
|
|
19
|
+
if (ifd.data instanceof Float32Array || ifd.data instanceof Float64Array) {
|
|
20
|
+
throw new Error('Float TIFF data is not supported.');
|
|
21
|
+
}
|
|
20
22
|
if (ifd.type === 3) {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
+
const hasAlpha = ifd.samplesPerPixel === 2;
|
|
24
|
+
const pixelLength = hasAlpha ? 4 : 3;
|
|
25
|
+
const data = new Uint16Array(pixelLength * ifd.width * ifd.height);
|
|
23
26
|
const palette = ifd.palette;
|
|
24
27
|
let ptr = 0;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if (hasAlpha) {
|
|
29
|
+
for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
|
|
30
|
+
const color = palette[ifd.data[index]];
|
|
31
|
+
data[ptr++] = color[0];
|
|
32
|
+
data[ptr++] = color[1];
|
|
33
|
+
data[ptr++] = color[2];
|
|
34
|
+
// To ensure that the value is 16 bits.
|
|
35
|
+
data[ptr++] = Math.round((ifd.data[index + 1] / 2 ** ifd.bitsPerSample) * 65535);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
|
|
40
|
+
const color = palette[ifd.data[index]];
|
|
41
|
+
data[ptr++] = color[0];
|
|
42
|
+
data[ptr++] = color[1];
|
|
43
|
+
data[ptr++] = color[2];
|
|
44
|
+
}
|
|
30
45
|
}
|
|
31
46
|
return new Image(ifd.width, ifd.height, {
|
|
32
47
|
data,
|
|
33
|
-
|
|
34
|
-
colorModel: ifd.alpha ? 'RGBA' : 'RGB',
|
|
35
|
-
// TODO: handle other bit depths
|
|
48
|
+
colorModel: hasAlpha ? 'RGBA' : 'RGB',
|
|
36
49
|
bitDepth: 16,
|
|
37
50
|
meta: getMetadata(ifd),
|
|
38
51
|
});
|
|
39
52
|
}
|
|
53
|
+
else if (ifd.type === 1 || ifd.type === 0) {
|
|
54
|
+
if (ifd.bitsPerSample !== 1) {
|
|
55
|
+
return new Image(ifd.width, ifd.height, {
|
|
56
|
+
data: ifd.data,
|
|
57
|
+
bitDepth: ifd.bitsPerSample,
|
|
58
|
+
colorModel: ifd.alpha ? 'GREYA' : 'GREY',
|
|
59
|
+
meta: getMetadata(ifd),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return new Image(ifd.width, ifd.height, {
|
|
64
|
+
data: ifd.data.map((pixel) => pixel * 255),
|
|
65
|
+
bitDepth: 8,
|
|
66
|
+
colorModel: 'GREY',
|
|
67
|
+
meta: getMetadata(ifd),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
40
71
|
else {
|
|
41
72
|
return new Image(ifd.width, ifd.height, {
|
|
42
|
-
// TODO: handle float data
|
|
43
|
-
// @ts-expect-error float data not handled yet
|
|
44
73
|
data: ifd.data,
|
|
45
74
|
bitDepth: ifd.bitsPerSample,
|
|
46
|
-
colorModel: ifd.
|
|
47
|
-
? ifd.alpha
|
|
48
|
-
? 'RGBA'
|
|
49
|
-
: 'RGB'
|
|
50
|
-
: ifd.alpha
|
|
51
|
-
? 'GREYA'
|
|
52
|
-
: 'GREY',
|
|
75
|
+
colorModel: ifd.alpha ? 'RGBA' : 'RGB',
|
|
53
76
|
meta: getMetadata(ifd),
|
|
54
77
|
});
|
|
55
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CAUzD"}
|
|
@@ -8,7 +8,8 @@ const topFirst = (mbrPoint1, mbrPoint2) => mbrPoint1.row >= mbrPoint2.row ? -1 :
|
|
|
8
8
|
* @returns The angle in degrees.
|
|
9
9
|
*/
|
|
10
10
|
export function getMbrAngle(mbr) {
|
|
11
|
-
const sorted = mbr.slice()
|
|
11
|
+
const sorted = mbr.slice();
|
|
12
|
+
sorted.sort(leftFirst);
|
|
12
13
|
const left = sorted.slice(0, 2);
|
|
13
14
|
const right = sorted.slice(2, 4);
|
|
14
15
|
left.sort(topFirst);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,CA6BT"}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
export function monotoneChainConvexHull(points, options = {}) {
|
|
9
9
|
const { sorted = false } = options;
|
|
10
10
|
if (!sorted) {
|
|
11
|
-
points = points.slice()
|
|
11
|
+
points = points.slice();
|
|
12
|
+
points.sort(byXThenY);
|
|
12
13
|
}
|
|
13
14
|
const n = points.length;
|
|
14
15
|
const result = new Array(n * 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,EAAE,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS;IACzC,OAAO,CACL,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAa,EAAE,MAAa;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wBAAwB"}
|
package/lib/save/encodeBmp.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Mask } from '../Mask.js';
|
|
1
|
+
import { Image } from '../Image.js';
|
|
2
|
+
import type { Mask } from '../Mask.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a BMP buffer from a mask.
|
|
5
|
-
* @param
|
|
5
|
+
* @param image - The mask instance.
|
|
6
6
|
* @returns The buffer.
|
|
7
7
|
*/
|
|
8
|
-
export declare function encodeBmp(
|
|
8
|
+
export declare function encodeBmp(image: Image | Mask): Uint8Array<ArrayBufferLike>;
|
|
9
9
|
//# sourceMappingURL=encodeBmp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,+BAoB5C"}
|
package/lib/save/encodeBmp.js
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import * as bmp from 'fast-bmp';
|
|
2
|
-
import {
|
|
2
|
+
import { Image } from '../Image.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a BMP buffer from a mask.
|
|
5
|
-
* @param
|
|
5
|
+
* @param image - The mask instance.
|
|
6
6
|
* @returns The buffer.
|
|
7
7
|
*/
|
|
8
|
-
export function encodeBmp(
|
|
9
|
-
if (
|
|
10
|
-
|
|
8
|
+
export function encodeBmp(image) {
|
|
9
|
+
if (image instanceof Image) {
|
|
10
|
+
return bmp.encode({
|
|
11
|
+
width: image.width,
|
|
12
|
+
height: image.height,
|
|
13
|
+
components: image.components,
|
|
14
|
+
bitsPerPixel: image.channels * image.bitDepth,
|
|
15
|
+
channels: image.channels,
|
|
16
|
+
data: image.getRawImage().data,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
return bmp.encode({
|
|
21
|
+
width: image.width,
|
|
22
|
+
height: image.height,
|
|
23
|
+
components: 1,
|
|
24
|
+
bitsPerPixel: 1,
|
|
25
|
+
channels: 1,
|
|
26
|
+
data: image.getRawImage().data,
|
|
27
|
+
});
|
|
11
28
|
}
|
|
12
|
-
const imageData = mask.getRawImage();
|
|
13
|
-
return bmp.encode({
|
|
14
|
-
width: imageData.width,
|
|
15
|
-
height: imageData.height,
|
|
16
|
-
components: 1,
|
|
17
|
-
bitsPerPixel: 1,
|
|
18
|
-
channels: 1,
|
|
19
|
-
data: imageData.data,
|
|
20
|
-
});
|
|
21
29
|
}
|
|
22
30
|
//# sourceMappingURL=encodeBmp.js.map
|