image-js 0.35.1 → 0.35.3
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/index.d.ts +99 -35
- package/lib/browser/environment.js +0 -6
- package/lib/browser/worker/extend.js +0 -3
- package/lib/browser/worker/process/background.js +0 -12
- package/lib/browser/worker/worker.js +0 -17
- package/lib/image/Image.js +18 -51
- package/lib/image/compute/colorHistogram.js +0 -8
- package/lib/image/compute/countAlphaPixels.js +0 -3
- package/lib/image/compute/extendedPoints.js +2 -7
- package/lib/image/compute/histogram.js +6 -25
- package/lib/image/compute/localMaxima.js +2 -10
- package/lib/image/compute/max.js +0 -5
- package/lib/image/compute/mean.js +0 -4
- package/lib/image/compute/median.js +0 -4
- package/lib/image/compute/min.js +0 -5
- package/lib/image/compute/minimalBoundingRectangle.js +5 -18
- package/lib/image/compute/moment.js +0 -3
- package/lib/image/compute/monotoneChainConvexHull.js +0 -3
- package/lib/image/compute/points.js +0 -3
- package/lib/image/compute/relativePosition.js +2 -8
- package/lib/image/compute/sum.js +0 -5
- package/lib/image/core/bitMethods.js +0 -11
- package/lib/image/core/checkProcessable.js +0 -13
- package/lib/image/core/environment.js +0 -8
- package/lib/image/core/export.js +0 -38
- package/lib/image/core/extend.js +0 -13
- package/lib/image/core/getRGBAData.js +0 -15
- package/lib/image/core/kind.js +4 -28
- package/lib/image/core/kindNames.js +1 -0
- package/lib/image/core/load.js +1 -53
- package/lib/image/core/mediaTypes.js +0 -2
- package/lib/image/core/valueMethods.js +0 -13
- package/lib/image/extend.js +7 -83
- package/lib/image/filter/abs.js +0 -3
- package/lib/image/filter/add.js +2 -8
- package/lib/image/filter/background.js +0 -9
- package/lib/image/filter/blurFilter.js +0 -6
- package/lib/image/filter/divide.js +0 -8
- package/lib/image/filter/flipX.js +0 -5
- package/lib/image/filter/flipY.js +0 -4
- package/lib/image/filter/gaussianFilter.js +0 -5
- package/lib/image/filter/gradientFilter.js +0 -10
- package/lib/image/filter/hypotenuse.js +0 -13
- package/lib/image/filter/invert.js +0 -9
- package/lib/image/filter/level.js +1 -19
- package/lib/image/filter/medianFilter.js +0 -15
- package/lib/image/filter/multiply.js +0 -10
- package/lib/image/filter/scharrFilter.js +0 -4
- package/lib/image/filter/sobelFilter.js +0 -4
- package/lib/image/filter/subtract.js +0 -8
- package/lib/image/filter/subtractImage.js +0 -10
- package/lib/image/internal/checks.js +1 -9
- package/lib/image/internal/clamp.js +0 -1
- package/lib/image/internal/copy.js +0 -2
- package/lib/image/internal/copyAlphaChannel.js +0 -1
- package/lib/image/internal/getImageParameters.js +0 -1
- package/lib/image/internal/getOutputImage.js +1 -13
- package/lib/image/model/model.js +1 -1
- package/lib/image/morphology/blackHat.js +0 -5
- package/lib/image/morphology/close.js +0 -5
- package/lib/image/morphology/dilate.js +0 -40
- package/lib/image/morphology/erode.js +0 -40
- package/lib/image/morphology/morphologicalGradient.js +0 -5
- package/lib/image/morphology/open.js +0 -5
- package/lib/image/morphology/topHat.js +0 -5
- package/lib/image/operator/cannyEdge.js +0 -3
- package/lib/image/operator/convolution.js +9 -34
- package/lib/image/operator/convolutionSeparable.js +0 -10
- package/lib/image/operator/extract.js +4 -13
- package/lib/image/operator/floodFill.js +2 -15
- package/lib/image/operator/getSeparatedKernel.js +0 -2
- package/lib/image/operator/paintLabels.js +8 -19
- package/lib/image/operator/paintMasks.js +2 -12
- package/lib/image/operator/paintPoints.js +0 -9
- package/lib/image/operator/paintPolygon.js +1 -15
- package/lib/image/operator/paintPolygons.js +2 -6
- package/lib/image/operator/paintPolyline.js +0 -7
- package/lib/image/operator/paintPolylines.js +1 -5
- package/lib/image/roi/Roi.js +27 -207
- package/lib/image/roi/RoiLayer.js +1 -22
- package/lib/image/roi/RoiMap.js +5 -38
- package/lib/image/roi/creator/fromMask.js +4 -22
- package/lib/image/roi/creator/fromMaskConnectedComponentLabelingAlgorithm.js +2 -20
- package/lib/image/roi/creator/fromMaxima.js +10 -43
- package/lib/image/roi/creator/fromPoints.js +2 -10
- package/lib/image/roi/creator/fromWaterShed.js +6 -17
- package/lib/image/roi/feretDiameters.js +9 -21
- package/lib/image/roi/manager.js +30 -119
- package/lib/image/roi/util/commonBorderLength.js +5 -16
- package/lib/image/roi/util/mergeRoi.js +2 -21
- package/lib/image/transform/cmyk.js +0 -9
- package/lib/image/transform/colorDepth.js +0 -12
- package/lib/image/transform/crop.js +0 -20
- package/lib/image/transform/cropAlpha.js +0 -11
- package/lib/image/transform/grey.js +0 -16
- package/lib/image/transform/greyAlgorithms.js +1 -24
- package/lib/image/transform/hsl.js +0 -16
- package/lib/image/transform/hsv.js +0 -15
- package/lib/image/transform/insert.js +0 -6
- package/lib/image/transform/mask/huang.js +3 -18
- package/lib/image/transform/mask/intermodes.js +3 -14
- package/lib/image/transform/mask/isodata.js +0 -14
- package/lib/image/transform/mask/li.js +12 -42
- package/lib/image/transform/mask/mask.js +1 -13
- package/lib/image/transform/mask/maxEntropy.js +8 -25
- package/lib/image/transform/mask/mean.js +1 -3
- package/lib/image/transform/mask/minError.js +10 -21
- package/lib/image/transform/mask/minimum.js +0 -20
- package/lib/image/transform/mask/moments.js +4 -17
- package/lib/image/transform/mask/otsu.js +1 -7
- package/lib/image/transform/mask/percentile.js +0 -8
- package/lib/image/transform/mask/renyiEntropy.js +8 -34
- package/lib/image/transform/mask/shanbhag.js +8 -25
- package/lib/image/transform/mask/thresholdAlgorithms.js +1 -17
- package/lib/image/transform/mask/triangle.js +13 -29
- package/lib/image/transform/mask/yen.js +2 -14
- package/lib/image/transform/pad.js +0 -20
- package/lib/image/transform/resize/nearestNeighbor.js +0 -6
- package/lib/image/transform/resize/resize.js +0 -16
- package/lib/image/transform/rgba.js +0 -9
- package/lib/image/transform/rgba8.js +0 -3
- package/lib/image/transform/rotate.js +0 -29
- package/lib/image/transform/rotateFree.js +0 -31
- package/lib/image/transform/warping.js +2 -35
- package/lib/image/utility/combineChannels.js +0 -11
- package/lib/image/utility/getBestMatch.js +2 -13
- package/lib/image/utility/getChannel.js +0 -10
- package/lib/image/utility/getClosestCommonParent.js +6 -23
- package/lib/image/utility/getColumn.js +0 -4
- package/lib/image/utility/getIntersection.js +2 -18
- package/lib/image/utility/getMatrix.js +0 -7
- package/lib/image/utility/getPixelsArray.js +0 -5
- package/lib/image/utility/getPixelsGrid.js +0 -11
- package/lib/image/utility/getRow.js +0 -4
- package/lib/image/utility/getSimilarity.js +3 -17
- package/lib/image/utility/getThreshold.js +0 -4
- package/lib/image/utility/setBorder.js +0 -16
- package/lib/image/utility/setChannel.js +0 -6
- package/lib/image/utility/setMatrix.js +0 -6
- package/lib/image/utility/split.js +2 -15
- package/lib/index.js +0 -12
- package/lib/kernel/kernel.js +0 -3
- package/lib/kernel/laplacianOfGaussian.js +1 -7
- package/lib/node_modules/test/binary.js +0 -3
- package/lib/node_modules/test/oneRoi.js +0 -2
- package/lib/stack/Stack.js +2 -35
- package/lib/stack/compute/histogram.js +0 -4
- package/lib/stack/compute/histograms.js +0 -4
- package/lib/stack/compute/max.js +0 -3
- package/lib/stack/compute/median.js +0 -4
- package/lib/stack/compute/min.js +0 -3
- package/lib/stack/extend.js +1 -11
- package/lib/stack/transform/matchAndCrop.js +6 -19
- package/lib/stack/utility/averageImage.js +0 -9
- package/lib/stack/utility/maxImage.js +0 -7
- package/lib/stack/utility/minImage.js +0 -7
- package/lib/util/Shape.js +3 -40
- package/lib/util/base64.js +3 -14
- package/lib/util/channel.js +1 -35
- package/lib/util/color.js +1 -25
- package/lib/util/converter.js +1 -13
- package/lib/util/deepValue.js +0 -3
- package/lib/util/histogram.js +1 -12
- package/lib/util/kernel.js +2 -12
- package/lib/util/matrix.js +0 -13
- package/lib/util/points.js +12 -35
- package/lib/util/value.js +0 -7
- package/lib/util/zerosMatrix.js +0 -3
- package/package.json +2 -2
- package/src/image/operator/paintLabels.js +6 -6
- package/src/image/operator/paintPolygon.js +1 -1
- package/src/image/operator/paintPolygons.js +2 -2
- package/src/image/operator/paintPolylines.js +1 -1
package/lib/image/core/load.js
CHANGED
|
@@ -4,30 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = load;
|
|
7
|
-
|
|
8
7
|
var _fastJpeg = require("fast-jpeg");
|
|
9
|
-
|
|
10
8
|
var _fastPng = require("fast-png");
|
|
11
|
-
|
|
12
9
|
var _imageType = _interopRequireDefault(require("image-type"));
|
|
13
|
-
|
|
14
10
|
var _jpegJs = require("jpeg-js");
|
|
15
|
-
|
|
16
11
|
var _tiff = require("tiff");
|
|
17
|
-
|
|
18
12
|
var _Stack = _interopRequireDefault(require("../../stack/Stack"));
|
|
19
|
-
|
|
20
13
|
var _base = require("../../util/base64");
|
|
21
|
-
|
|
22
14
|
var _Image = _interopRequireDefault(require("../Image"));
|
|
23
|
-
|
|
24
15
|
var _model = require("../model/model");
|
|
25
|
-
|
|
26
16
|
var _environment = require("./environment");
|
|
27
|
-
|
|
28
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
18
|
const isDataURL = /^data:[a-z]+\/(?:[a-z]+);base64,/;
|
|
19
|
+
|
|
31
20
|
/**
|
|
32
21
|
* Load an image
|
|
33
22
|
* @memberof Image
|
|
@@ -42,7 +31,6 @@ const isDataURL = /^data:[a-z]+\/(?:[a-z]+);base64,/;
|
|
|
42
31
|
* @example
|
|
43
32
|
* const image = await Image.load('https://example.com/image.png');
|
|
44
33
|
*/
|
|
45
|
-
|
|
46
34
|
function load(image, options) {
|
|
47
35
|
if (typeof image === 'string') {
|
|
48
36
|
return loadURL(image, options);
|
|
@@ -54,28 +42,21 @@ function load(image, options) {
|
|
|
54
42
|
throw new Error('argument to "load" must be a string or buffer.');
|
|
55
43
|
}
|
|
56
44
|
}
|
|
57
|
-
|
|
58
45
|
function loadBinary(image, base64Url, ignorePalette) {
|
|
59
46
|
const type = (0, _imageType.default)(image);
|
|
60
|
-
|
|
61
47
|
if (type) {
|
|
62
48
|
switch (type.mime) {
|
|
63
49
|
case 'image/png':
|
|
64
50
|
return loadPNG(image);
|
|
65
|
-
|
|
66
51
|
case 'image/jpeg':
|
|
67
52
|
return loadJPEG(image);
|
|
68
|
-
|
|
69
53
|
case 'image/tiff':
|
|
70
54
|
return loadTIFF(image, ignorePalette);
|
|
71
|
-
|
|
72
55
|
default:
|
|
73
56
|
return loadGeneric(getBase64(type.mime));
|
|
74
57
|
}
|
|
75
58
|
}
|
|
76
|
-
|
|
77
59
|
return loadGeneric(getBase64('application/octet-stream'));
|
|
78
|
-
|
|
79
60
|
function getBase64(type) {
|
|
80
61
|
if (base64Url) {
|
|
81
62
|
return base64Url;
|
|
@@ -84,47 +65,39 @@ function loadBinary(image, base64Url, ignorePalette) {
|
|
|
84
65
|
}
|
|
85
66
|
}
|
|
86
67
|
}
|
|
87
|
-
|
|
88
68
|
function loadURL(url, options) {
|
|
89
69
|
const dataURL = url.slice(0, 64).match(isDataURL);
|
|
90
70
|
let binaryDataP;
|
|
91
|
-
|
|
92
71
|
if (dataURL !== null) {
|
|
93
72
|
binaryDataP = Promise.resolve((0, _base.decode)(url.slice(dataURL[0].length)));
|
|
94
73
|
} else {
|
|
95
74
|
binaryDataP = (0, _environment.fetchBinary)(url, options);
|
|
96
75
|
}
|
|
97
|
-
|
|
98
76
|
return binaryDataP.then(binaryData => {
|
|
99
77
|
const uint8 = new Uint8Array(binaryData);
|
|
100
78
|
return loadBinary(uint8, dataURL ? url : undefined, options && options.ignorePalette);
|
|
101
79
|
});
|
|
102
80
|
}
|
|
103
|
-
|
|
104
81
|
function loadPNG(data) {
|
|
105
82
|
const png = (0, _fastPng.decode)(data);
|
|
106
83
|
let channels = png.channels;
|
|
107
84
|
let components;
|
|
108
85
|
let alpha = 0;
|
|
109
|
-
|
|
110
86
|
if (channels === 2 || channels === 4) {
|
|
111
87
|
components = channels - 1;
|
|
112
88
|
alpha = 1;
|
|
113
89
|
} else {
|
|
114
90
|
components = channels;
|
|
115
91
|
}
|
|
116
|
-
|
|
117
92
|
if (png.palette) {
|
|
118
93
|
return loadPNGFromPalette(png);
|
|
119
94
|
}
|
|
120
|
-
|
|
121
95
|
return new _Image.default(png.width, png.height, png.data, {
|
|
122
96
|
components,
|
|
123
97
|
alpha,
|
|
124
98
|
bitDepth: png.depth
|
|
125
99
|
});
|
|
126
100
|
}
|
|
127
|
-
|
|
128
101
|
function loadPNGFromPalette(png) {
|
|
129
102
|
const pixels = png.width * png.height;
|
|
130
103
|
const channels = png.palette[0].length;
|
|
@@ -134,40 +107,32 @@ function loadPNGFromPalette(png) {
|
|
|
134
107
|
const mask = parseInt('1'.repeat(png.depth), 2);
|
|
135
108
|
const hasAlpha = channels === 4;
|
|
136
109
|
let dataIndex = 0;
|
|
137
|
-
|
|
138
110
|
for (let i = 0; i < pixels; i++) {
|
|
139
111
|
const index = Math.floor(i / factor);
|
|
140
112
|
let value = png.data[index];
|
|
141
|
-
|
|
142
113
|
if (png.depth < 8) {
|
|
143
114
|
value = value >>> png.depth * (pixelsPerByte - 1 - i % pixelsPerByte) & mask;
|
|
144
115
|
}
|
|
145
|
-
|
|
146
116
|
const paletteValue = png.palette[value];
|
|
147
117
|
data[dataIndex++] = paletteValue[0];
|
|
148
118
|
data[dataIndex++] = paletteValue[1];
|
|
149
119
|
data[dataIndex++] = paletteValue[2];
|
|
150
|
-
|
|
151
120
|
if (hasAlpha) {
|
|
152
121
|
data[dataIndex++] = paletteValue[3];
|
|
153
122
|
}
|
|
154
123
|
}
|
|
155
|
-
|
|
156
124
|
return new _Image.default(png.width, png.height, data, {
|
|
157
125
|
components: 3,
|
|
158
126
|
alpha: hasAlpha,
|
|
159
127
|
bitDepth: 8
|
|
160
128
|
});
|
|
161
129
|
}
|
|
162
|
-
|
|
163
130
|
function loadJPEG(data) {
|
|
164
131
|
const decodedExif = (0, _fastJpeg.decode)(data);
|
|
165
132
|
let meta;
|
|
166
|
-
|
|
167
133
|
if (decodedExif.exif) {
|
|
168
134
|
meta = getMetadata(decodedExif.exif);
|
|
169
135
|
}
|
|
170
|
-
|
|
171
136
|
const jpeg = (0, _jpegJs.decode)(data, {
|
|
172
137
|
useTArray: true,
|
|
173
138
|
maxMemoryUsageInMB: 1024
|
|
@@ -175,10 +140,8 @@ function loadJPEG(data) {
|
|
|
175
140
|
let image = new _Image.default(jpeg.width, jpeg.height, jpeg.data, {
|
|
176
141
|
meta
|
|
177
142
|
});
|
|
178
|
-
|
|
179
143
|
if (meta && meta.tiff.tags.Orientation) {
|
|
180
144
|
const orientation = meta.tiff.tags.Orientation;
|
|
181
|
-
|
|
182
145
|
if (orientation > 2) {
|
|
183
146
|
image = image.rotate({
|
|
184
147
|
3: 180,
|
|
@@ -189,18 +152,14 @@ function loadJPEG(data) {
|
|
|
189
152
|
8: 270
|
|
190
153
|
}[orientation]);
|
|
191
154
|
}
|
|
192
|
-
|
|
193
155
|
if ([2, 4, 5, 7].includes(orientation)) {
|
|
194
156
|
image = image.flipX();
|
|
195
157
|
}
|
|
196
158
|
}
|
|
197
|
-
|
|
198
159
|
return image;
|
|
199
160
|
}
|
|
200
|
-
|
|
201
161
|
function loadTIFF(data, ignorePalette) {
|
|
202
162
|
let result = (0, _tiff.decode)(data);
|
|
203
|
-
|
|
204
163
|
if (result.length === 1) {
|
|
205
164
|
return getImageFromIFD(result[0], ignorePalette);
|
|
206
165
|
} else {
|
|
@@ -209,7 +168,6 @@ function loadTIFF(data, ignorePalette) {
|
|
|
209
168
|
}));
|
|
210
169
|
}
|
|
211
170
|
}
|
|
212
|
-
|
|
213
171
|
function getMetadata(image) {
|
|
214
172
|
const metadata = {
|
|
215
173
|
tiff: {
|
|
@@ -217,25 +175,20 @@ function getMetadata(image) {
|
|
|
217
175
|
tags: image.map
|
|
218
176
|
}
|
|
219
177
|
};
|
|
220
|
-
|
|
221
178
|
if (image.exif) {
|
|
222
179
|
metadata.exif = image.exif;
|
|
223
180
|
}
|
|
224
|
-
|
|
225
181
|
if (image.gps) {
|
|
226
182
|
metadata.gps = image.gps;
|
|
227
183
|
}
|
|
228
|
-
|
|
229
184
|
return metadata;
|
|
230
185
|
}
|
|
231
|
-
|
|
232
186
|
function getImageFromIFD(image, ignorePalette) {
|
|
233
187
|
if (!ignorePalette && image.type === 3) {
|
|
234
188
|
// Palette
|
|
235
189
|
const data = new Uint16Array(3 * image.width * image.height);
|
|
236
190
|
const palette = image.palette;
|
|
237
191
|
let ptr = 0;
|
|
238
|
-
|
|
239
192
|
for (let i = 0; i < image.data.length; i++) {
|
|
240
193
|
const index = image.data[i];
|
|
241
194
|
const color = palette[index];
|
|
@@ -243,7 +196,6 @@ function getImageFromIFD(image, ignorePalette) {
|
|
|
243
196
|
data[ptr++] = color[1];
|
|
244
197
|
data[ptr++] = color[2];
|
|
245
198
|
}
|
|
246
|
-
|
|
247
199
|
return new _Image.default(image.width, image.height, data, {
|
|
248
200
|
components: 3,
|
|
249
201
|
alpha: image.alpha,
|
|
@@ -261,12 +213,10 @@ function getImageFromIFD(image, ignorePalette) {
|
|
|
261
213
|
});
|
|
262
214
|
}
|
|
263
215
|
}
|
|
264
|
-
|
|
265
216
|
function loadGeneric(url, options) {
|
|
266
217
|
options = options || {};
|
|
267
218
|
return new Promise(function (resolve, reject) {
|
|
268
219
|
let image = new _environment.DOMImage();
|
|
269
|
-
|
|
270
220
|
image.onload = function () {
|
|
271
221
|
let w = image.width;
|
|
272
222
|
let h = image.height;
|
|
@@ -276,11 +226,9 @@ function loadGeneric(url, options) {
|
|
|
276
226
|
let data = ctx.getImageData(0, 0, w, h).data;
|
|
277
227
|
resolve(new _Image.default(w, h, data, options));
|
|
278
228
|
};
|
|
279
|
-
|
|
280
229
|
image.onerror = function () {
|
|
281
230
|
reject(new Error(`Could not load ${url}`));
|
|
282
231
|
};
|
|
283
|
-
|
|
284
232
|
image.src = url;
|
|
285
233
|
});
|
|
286
234
|
}
|
|
@@ -17,7 +17,6 @@ const valueMethods = {
|
|
|
17
17
|
getValueXY(x, y, channel) {
|
|
18
18
|
return this.data[(y * this.width + x) * this.channels + channel];
|
|
19
19
|
},
|
|
20
|
-
|
|
21
20
|
/**
|
|
22
21
|
* Set the value of specific pixel channel
|
|
23
22
|
* @memberof Image
|
|
@@ -33,7 +32,6 @@ const valueMethods = {
|
|
|
33
32
|
this.computed = null;
|
|
34
33
|
return this;
|
|
35
34
|
},
|
|
36
|
-
|
|
37
35
|
/**
|
|
38
36
|
* Get the value of specific pixel channel
|
|
39
37
|
* @memberof Image
|
|
@@ -45,7 +43,6 @@ const valueMethods = {
|
|
|
45
43
|
getValue(index, channel) {
|
|
46
44
|
return this.data[index * this.channels + channel];
|
|
47
45
|
},
|
|
48
|
-
|
|
49
46
|
/**
|
|
50
47
|
* Set the value of specific pixel channel
|
|
51
48
|
* @memberof Image
|
|
@@ -60,7 +57,6 @@ const valueMethods = {
|
|
|
60
57
|
this.computed = null;
|
|
61
58
|
return this;
|
|
62
59
|
},
|
|
63
|
-
|
|
64
60
|
/**
|
|
65
61
|
* Get the value of an entire pixel
|
|
66
62
|
* @memberof Image
|
|
@@ -72,7 +68,6 @@ const valueMethods = {
|
|
|
72
68
|
getPixelXY(x, y) {
|
|
73
69
|
return this.getPixel(y * this.width + x);
|
|
74
70
|
},
|
|
75
|
-
|
|
76
71
|
/**
|
|
77
72
|
* Set the value of an entire pixel
|
|
78
73
|
* @memberof Image
|
|
@@ -85,7 +80,6 @@ const valueMethods = {
|
|
|
85
80
|
setPixelXY(x, y, value) {
|
|
86
81
|
return this.setPixel(y * this.width + x, value);
|
|
87
82
|
},
|
|
88
|
-
|
|
89
83
|
/**
|
|
90
84
|
* Get the value of an entire pixel
|
|
91
85
|
* @memberof Image
|
|
@@ -96,14 +90,11 @@ const valueMethods = {
|
|
|
96
90
|
getPixel(index) {
|
|
97
91
|
const value = new Array(this.channels);
|
|
98
92
|
const target = index * this.channels;
|
|
99
|
-
|
|
100
93
|
for (let i = 0; i < this.channels; i++) {
|
|
101
94
|
value[i] = this.data[target + i];
|
|
102
95
|
}
|
|
103
|
-
|
|
104
96
|
return value;
|
|
105
97
|
},
|
|
106
|
-
|
|
107
98
|
/**
|
|
108
99
|
* Set the value of an entire pixel
|
|
109
100
|
* @memberof Image
|
|
@@ -114,17 +105,13 @@ const valueMethods = {
|
|
|
114
105
|
*/
|
|
115
106
|
setPixel(index, value) {
|
|
116
107
|
const target = index * this.channels;
|
|
117
|
-
|
|
118
108
|
for (let i = 0; i < value.length; i++) {
|
|
119
109
|
this.data[target + i] = value[i];
|
|
120
110
|
}
|
|
121
|
-
|
|
122
111
|
this.computed = null;
|
|
123
112
|
return this;
|
|
124
113
|
}
|
|
125
|
-
|
|
126
114
|
};
|
|
127
|
-
|
|
128
115
|
function setValueMethods(Image) {
|
|
129
116
|
for (const i in valueMethods) {
|
|
130
117
|
Image.prototype[i] = valueMethods[i];
|
package/lib/image/extend.js
CHANGED
|
@@ -4,178 +4,102 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = extend;
|
|
7
|
-
|
|
8
7
|
var _abs = _interopRequireDefault(require("./filter/abs"));
|
|
9
|
-
|
|
10
8
|
var _invert = _interopRequireDefault(require("./filter/invert"));
|
|
11
|
-
|
|
12
9
|
var _flipX = _interopRequireDefault(require("./filter/flipX"));
|
|
13
|
-
|
|
14
10
|
var _flipY = _interopRequireDefault(require("./filter/flipY"));
|
|
15
|
-
|
|
16
11
|
var _blurFilter = _interopRequireDefault(require("./filter/blurFilter"));
|
|
17
|
-
|
|
18
12
|
var _medianFilter = _interopRequireDefault(require("./filter/medianFilter"));
|
|
19
|
-
|
|
20
13
|
var _gaussianFilter = _interopRequireDefault(require("./filter/gaussianFilter"));
|
|
21
|
-
|
|
22
14
|
var _sobelFilter = _interopRequireDefault(require("./filter/sobelFilter"));
|
|
23
|
-
|
|
24
15
|
var _scharrFilter = _interopRequireDefault(require("./filter/scharrFilter"));
|
|
25
|
-
|
|
26
16
|
var _gradientFilter = _interopRequireDefault(require("./filter/gradientFilter"));
|
|
27
|
-
|
|
28
17
|
var _level = _interopRequireDefault(require("./filter/level"));
|
|
29
|
-
|
|
30
18
|
var _add = _interopRequireDefault(require("./filter/add"));
|
|
31
|
-
|
|
32
19
|
var _subtract = _interopRequireDefault(require("./filter/subtract"));
|
|
33
|
-
|
|
34
20
|
var _subtractImage = _interopRequireDefault(require("./filter/subtractImage"));
|
|
35
|
-
|
|
36
21
|
var _hypotenuse = _interopRequireDefault(require("./filter/hypotenuse"));
|
|
37
|
-
|
|
38
22
|
var _multiply = _interopRequireDefault(require("./filter/multiply"));
|
|
39
|
-
|
|
40
23
|
var _divide = _interopRequireDefault(require("./filter/divide"));
|
|
41
|
-
|
|
42
24
|
var _background = _interopRequireDefault(require("./filter/background"));
|
|
43
|
-
|
|
44
25
|
var _dilate = _interopRequireDefault(require("./morphology/dilate"));
|
|
45
|
-
|
|
46
26
|
var _erode = _interopRequireDefault(require("./morphology/erode"));
|
|
47
|
-
|
|
48
27
|
var _open = _interopRequireDefault(require("./morphology/open"));
|
|
49
|
-
|
|
50
28
|
var _close = _interopRequireDefault(require("./morphology/close"));
|
|
51
|
-
|
|
52
29
|
var _topHat = _interopRequireDefault(require("./morphology/topHat"));
|
|
53
|
-
|
|
54
30
|
var _blackHat = _interopRequireDefault(require("./morphology/blackHat"));
|
|
55
|
-
|
|
56
31
|
var _morphologicalGradient = _interopRequireDefault(require("./morphology/morphologicalGradient"));
|
|
57
|
-
|
|
58
32
|
var _warping = _interopRequireDefault(require("./transform/warping"));
|
|
59
|
-
|
|
60
33
|
var _crop = _interopRequireDefault(require("./transform/crop"));
|
|
61
|
-
|
|
62
34
|
var _cropAlpha = _interopRequireDefault(require("./transform/cropAlpha"));
|
|
63
|
-
|
|
64
35
|
var _resize = _interopRequireDefault(require("./transform/resize/resize"));
|
|
65
|
-
|
|
66
36
|
var _hsv = _interopRequireDefault(require("./transform/hsv"));
|
|
67
|
-
|
|
68
37
|
var _hsl = _interopRequireDefault(require("./transform/hsl"));
|
|
69
|
-
|
|
70
38
|
var _cmyk = _interopRequireDefault(require("./transform/cmyk"));
|
|
71
|
-
|
|
72
39
|
var _rgba = _interopRequireDefault(require("./transform/rgba8"));
|
|
73
|
-
|
|
74
40
|
var _grey = _interopRequireDefault(require("./transform/grey"));
|
|
75
|
-
|
|
76
41
|
var _mask = _interopRequireDefault(require("./transform/mask/mask"));
|
|
77
|
-
|
|
78
42
|
var _pad = _interopRequireDefault(require("./transform/pad"));
|
|
79
|
-
|
|
80
43
|
var _colorDepth = _interopRequireDefault(require("./transform/colorDepth"));
|
|
81
|
-
|
|
82
44
|
var _rotate = require("./transform/rotate");
|
|
83
|
-
|
|
84
45
|
var _insert = _interopRequireDefault(require("./transform/insert"));
|
|
85
|
-
|
|
86
46
|
var _setBorder = _interopRequireDefault(require("./utility/setBorder"));
|
|
87
|
-
|
|
88
47
|
var _split = _interopRequireDefault(require("./utility/split"));
|
|
89
|
-
|
|
90
48
|
var _getChannel = _interopRequireDefault(require("./utility/getChannel"));
|
|
91
|
-
|
|
92
49
|
var _combineChannels = _interopRequireDefault(require("./utility/combineChannels"));
|
|
93
|
-
|
|
94
50
|
var _setChannel = _interopRequireDefault(require("./utility/setChannel"));
|
|
95
|
-
|
|
96
51
|
var _getSimilarity = _interopRequireDefault(require("./utility/getSimilarity"));
|
|
97
|
-
|
|
98
52
|
var _getPixelsGrid = _interopRequireDefault(require("./utility/getPixelsGrid"));
|
|
99
|
-
|
|
100
53
|
var _getBestMatch = _interopRequireDefault(require("./utility/getBestMatch"));
|
|
101
|
-
|
|
102
54
|
var _getRow = _interopRequireDefault(require("./utility/getRow"));
|
|
103
|
-
|
|
104
55
|
var _getColumn = _interopRequireDefault(require("./utility/getColumn"));
|
|
105
|
-
|
|
106
56
|
var _getMatrix = _interopRequireDefault(require("./utility/getMatrix"));
|
|
107
|
-
|
|
108
57
|
var _setMatrix = _interopRequireDefault(require("./utility/setMatrix"));
|
|
109
|
-
|
|
110
58
|
var _getPixelsArray = _interopRequireDefault(require("./utility/getPixelsArray"));
|
|
111
|
-
|
|
112
59
|
var _getIntersection = _interopRequireDefault(require("./utility/getIntersection"));
|
|
113
|
-
|
|
114
60
|
var _getClosestCommonParent = _interopRequireDefault(require("./utility/getClosestCommonParent"));
|
|
115
|
-
|
|
116
61
|
var _getThreshold = _interopRequireDefault(require("./utility/getThreshold"));
|
|
117
|
-
|
|
118
62
|
var _cannyEdge = _interopRequireDefault(require("./operator/cannyEdge"));
|
|
119
|
-
|
|
120
63
|
var _convolution = _interopRequireDefault(require("./operator/convolution"));
|
|
121
|
-
|
|
122
64
|
var _extract = _interopRequireDefault(require("./operator/extract"));
|
|
123
|
-
|
|
124
65
|
var _floodFill = _interopRequireDefault(require("./operator/floodFill"));
|
|
125
|
-
|
|
126
66
|
var _paintLabels = _interopRequireDefault(require("./operator/paintLabels"));
|
|
127
|
-
|
|
128
67
|
var _paintMasks = _interopRequireDefault(require("./operator/paintMasks"));
|
|
129
|
-
|
|
130
68
|
var _paintPoints = _interopRequireDefault(require("./operator/paintPoints"));
|
|
131
|
-
|
|
132
69
|
var _paintPolyline = _interopRequireDefault(require("./operator/paintPolyline"));
|
|
133
|
-
|
|
134
70
|
var _paintPolylines = _interopRequireDefault(require("./operator/paintPolylines"));
|
|
135
|
-
|
|
136
71
|
var _paintPolygon = _interopRequireDefault(require("./operator/paintPolygon"));
|
|
137
|
-
|
|
138
72
|
var _paintPolygons = _interopRequireDefault(require("./operator/paintPolygons"));
|
|
139
|
-
|
|
140
73
|
var _histogram = require("./compute/histogram");
|
|
141
|
-
|
|
142
74
|
var _colorHistogram = _interopRequireDefault(require("./compute/colorHistogram"));
|
|
143
|
-
|
|
144
75
|
var _min = _interopRequireDefault(require("./compute/min"));
|
|
145
|
-
|
|
146
76
|
var _max = _interopRequireDefault(require("./compute/max"));
|
|
147
|
-
|
|
148
77
|
var _sum = _interopRequireDefault(require("./compute/sum"));
|
|
149
|
-
|
|
150
78
|
var _moment = _interopRequireDefault(require("./compute/moment"));
|
|
151
|
-
|
|
152
79
|
var _localMaxima = _interopRequireDefault(require("./compute/localMaxima"));
|
|
153
|
-
|
|
154
80
|
var _mean = _interopRequireDefault(require("./compute/mean"));
|
|
155
|
-
|
|
156
81
|
var _median = _interopRequireDefault(require("./compute/median"));
|
|
157
|
-
|
|
158
82
|
var _points = _interopRequireDefault(require("./compute/points"));
|
|
159
|
-
|
|
160
83
|
var _extendedPoints = _interopRequireDefault(require("./compute/extendedPoints"));
|
|
161
|
-
|
|
162
84
|
var _relativePosition = _interopRequireDefault(require("./compute/relativePosition"));
|
|
163
|
-
|
|
164
85
|
var _countAlphaPixels = _interopRequireDefault(require("./compute/countAlphaPixels"));
|
|
165
|
-
|
|
166
86
|
var _monotoneChainConvexHull = _interopRequireDefault(require("./compute/monotoneChainConvexHull"));
|
|
167
|
-
|
|
168
87
|
var _minimalBoundingRectangle = _interopRequireDefault(require("./compute/minimalBoundingRectangle"));
|
|
169
|
-
|
|
170
88
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
171
|
-
|
|
172
89
|
/* eslint-disable import/order */
|
|
90
|
+
|
|
173
91
|
// filters
|
|
92
|
+
|
|
174
93
|
// morphology transforms
|
|
94
|
+
|
|
175
95
|
// transforms
|
|
96
|
+
|
|
176
97
|
// utility
|
|
98
|
+
|
|
177
99
|
// operators
|
|
100
|
+
|
|
178
101
|
// computers
|
|
102
|
+
|
|
179
103
|
function extend(Image) {
|
|
180
104
|
let inPlace = {
|
|
181
105
|
inPlace: true
|
package/lib/image/filter/abs.js
CHANGED
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = abs;
|
|
7
|
-
|
|
8
7
|
var _getOutputImage = require("../internal/getOutputImage");
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* Calculate the absolute values of an image.
|
|
12
10
|
* Only works on 32-bit images.
|
|
@@ -25,7 +23,6 @@ function abs(options = {}) {
|
|
|
25
23
|
absolute(this, out);
|
|
26
24
|
return out;
|
|
27
25
|
}
|
|
28
|
-
|
|
29
26
|
function absolute(image, out) {
|
|
30
27
|
for (let i = 0; i < image.data.length; i++) {
|
|
31
28
|
out.data[i] = Math.abs(image.data[i]);
|
package/lib/image/filter/add.js
CHANGED
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = add;
|
|
7
|
-
|
|
8
7
|
var _channel = require("../../util/channel");
|
|
9
|
-
|
|
10
8
|
var _value = require("../../util/value");
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* Add a specific integer on the specified points of the specified channels
|
|
14
11
|
* @memberof Image
|
|
@@ -27,12 +24,12 @@ function add(value, options = {}) {
|
|
|
27
24
|
channels = (0, _channel.validateArrayOfChannels)(this, {
|
|
28
25
|
channels: channels
|
|
29
26
|
});
|
|
30
|
-
value = (0, _value.checkNumberArray)(value);
|
|
27
|
+
value = (0, _value.checkNumberArray)(value);
|
|
31
28
|
|
|
29
|
+
// we allow 3 cases, the value may be an array (1D), an image or a single value
|
|
32
30
|
if (!isNaN(value)) {
|
|
33
31
|
for (let j = 0; j < channels.length; j++) {
|
|
34
32
|
let c = channels[j];
|
|
35
|
-
|
|
36
33
|
for (let i = 0; i < this.data.length; i += this.channels) {
|
|
37
34
|
this.data[i + c] = Math.min(this.maxValue, this.data[i + c] + value >> 0);
|
|
38
35
|
}
|
|
@@ -41,15 +38,12 @@ function add(value, options = {}) {
|
|
|
41
38
|
if (this.data.length !== value.length) {
|
|
42
39
|
throw new Error('add: the data size is different');
|
|
43
40
|
}
|
|
44
|
-
|
|
45
41
|
for (let j = 0; j < channels.length; j++) {
|
|
46
42
|
let c = channels[j];
|
|
47
|
-
|
|
48
43
|
for (let i = 0; i < this.data.length; i += this.channels) {
|
|
49
44
|
this.data[i + c] = Math.max(0, Math.min(this.maxValue, this.data[i + c] + value[i + c] >> 0));
|
|
50
45
|
}
|
|
51
46
|
}
|
|
52
47
|
}
|
|
53
|
-
|
|
54
48
|
return this;
|
|
55
49
|
}
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = background;
|
|
7
|
-
|
|
8
7
|
var _mlRegression = require("ml-regression");
|
|
9
|
-
|
|
10
8
|
var _Image = _interopRequireDefault(require("../Image"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
/**
|
|
15
11
|
* @memberof Image
|
|
16
12
|
* @instance
|
|
@@ -22,20 +18,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
22
18
|
function background(coordinates, values, options) {
|
|
23
19
|
const model = new _mlRegression.KernelRidgeRegression(coordinates, values, options);
|
|
24
20
|
const allCoordinates = new Array(this.size);
|
|
25
|
-
|
|
26
21
|
for (let i = 0; i < this.width; i++) {
|
|
27
22
|
for (let j = 0; j < this.height; j++) {
|
|
28
23
|
allCoordinates[j * this.width + i] = [i, j];
|
|
29
24
|
}
|
|
30
25
|
}
|
|
31
|
-
|
|
32
26
|
const result = model.predict(allCoordinates);
|
|
33
|
-
|
|
34
27
|
const background = _Image.default.createFrom(this);
|
|
35
|
-
|
|
36
28
|
for (let i = 0; i < this.size; i++) {
|
|
37
29
|
background.data[i] = Math.min(this.maxValue, Math.max(0, result[i][0]));
|
|
38
30
|
}
|
|
39
|
-
|
|
40
31
|
return background;
|
|
41
32
|
}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = blurFilter;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Blurs the image by averaging the neighboring pixels.
|
|
10
9
|
* @memberof Image
|
|
@@ -17,21 +16,16 @@ function blurFilter(options = {}) {
|
|
|
17
16
|
const {
|
|
18
17
|
radius = 1
|
|
19
18
|
} = options;
|
|
20
|
-
|
|
21
19
|
if (radius < 1) {
|
|
22
20
|
throw new Error('radius must be greater than 1');
|
|
23
21
|
}
|
|
24
|
-
|
|
25
22
|
const n = 2 * radius + 1;
|
|
26
23
|
const kernel = new Array(n);
|
|
27
|
-
|
|
28
24
|
for (let i = 0; i < n; i++) {
|
|
29
25
|
kernel[i] = new Array(n);
|
|
30
|
-
|
|
31
26
|
for (let j = 0; j < n; j++) {
|
|
32
27
|
kernel[i][j] = 1 / (n * n);
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
return this.convolution(kernel);
|
|
37
31
|
}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = divide;
|
|
7
|
-
|
|
8
7
|
var _channel = require("../../util/channel");
|
|
9
|
-
|
|
10
8
|
var _value = require("../../util/value");
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* @memberof Image
|
|
14
11
|
* @instance
|
|
@@ -27,11 +24,9 @@ function divide(value, options = {}) {
|
|
|
27
24
|
channels: channels
|
|
28
25
|
});
|
|
29
26
|
value = (0, _value.checkNumberArray)(value);
|
|
30
|
-
|
|
31
27
|
if (!isNaN(value)) {
|
|
32
28
|
for (let j = 0; j < channels.length; j++) {
|
|
33
29
|
let c = channels[j];
|
|
34
|
-
|
|
35
30
|
for (let i = 0; i < this.data.length; i += this.channels) {
|
|
36
31
|
this.data[i + c] = Math.min(this.maxValue, this.data[i + c] / value >> 0);
|
|
37
32
|
}
|
|
@@ -40,15 +35,12 @@ function divide(value, options = {}) {
|
|
|
40
35
|
if (this.data.length !== value.length) {
|
|
41
36
|
throw new Error('divide: the: the data size is different');
|
|
42
37
|
}
|
|
43
|
-
|
|
44
38
|
for (let j = 0; j < channels.length; j++) {
|
|
45
39
|
let c = channels[j];
|
|
46
|
-
|
|
47
40
|
for (let i = 0; i < this.data.length; i += this.channels) {
|
|
48
41
|
this.data[i + c] = Math.max(0, Math.min(this.maxValue, this.data[i + c] / value[i + c] >> 0));
|
|
49
42
|
}
|
|
50
43
|
}
|
|
51
44
|
}
|
|
52
|
-
|
|
53
45
|
return this;
|
|
54
46
|
}
|