image-js 0.35.2 → 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 +2 -9
- 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 +2 -13
- package/lib/image/operator/paintMasks.js +2 -12
- package/lib/image/operator/paintPoints.js +0 -9
- package/lib/image/operator/paintPolygon.js +0 -14
- package/lib/image/operator/paintPolygons.js +0 -4
- package/lib/image/operator/paintPolyline.js +0 -7
- package/lib/image/operator/paintPolylines.js +0 -4
- 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 +1 -1
|
@@ -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
|
}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = flipX;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Flip an image horizontally.
|
|
10
9
|
* @memberof Image
|
|
@@ -15,14 +14,11 @@ function flipX() {
|
|
|
15
14
|
this.checkProcessable('flipX', {
|
|
16
15
|
bitDepth: [8, 16]
|
|
17
16
|
});
|
|
18
|
-
|
|
19
17
|
for (let i = 0; i < this.height; i++) {
|
|
20
18
|
let offsetY = i * this.width * this.channels;
|
|
21
|
-
|
|
22
19
|
for (let j = 0; j < Math.floor(this.width / 2); j++) {
|
|
23
20
|
let posCurrent = j * this.channels + offsetY;
|
|
24
21
|
let posOpposite = (this.width - j - 1) * this.channels + offsetY;
|
|
25
|
-
|
|
26
22
|
for (let k = 0; k < this.channels; k++) {
|
|
27
23
|
let tmp = this.data[posCurrent + k];
|
|
28
24
|
this.data[posCurrent + k] = this.data[posOpposite + k];
|
|
@@ -30,6 +26,5 @@ function flipX() {
|
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
return this;
|
|
35
30
|
}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = flipY;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Flip an image vertically. The image
|
|
10
9
|
* @memberof Image
|
|
@@ -15,12 +14,10 @@ function flipY() {
|
|
|
15
14
|
this.checkProcessable('flipY', {
|
|
16
15
|
bitDepth: [8, 16]
|
|
17
16
|
});
|
|
18
|
-
|
|
19
17
|
for (let i = 0; i < Math.floor(this.height / 2); i++) {
|
|
20
18
|
for (let j = 0; j < this.width; j++) {
|
|
21
19
|
let posCurrent = j * this.channels + i * this.width * this.channels;
|
|
22
20
|
let posOpposite = j * this.channels + (this.height - 1 - i) * this.channels * this.width;
|
|
23
|
-
|
|
24
21
|
for (let k = 0; k < this.channels; k++) {
|
|
25
22
|
let tmp = this.data[posCurrent + k];
|
|
26
23
|
this.data[posCurrent + k] = this.data[posOpposite + k];
|
|
@@ -28,6 +25,5 @@ function flipY() {
|
|
|
28
25
|
}
|
|
29
26
|
}
|
|
30
27
|
}
|
|
31
|
-
|
|
32
28
|
return this;
|
|
33
29
|
}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = gaussianFilter;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Apply a gaussian filter to the image.
|
|
10
9
|
* @memberof Image
|
|
@@ -33,24 +32,20 @@ function gaussianFilter(options = {}) {
|
|
|
33
32
|
algorithm: 'separable'
|
|
34
33
|
});
|
|
35
34
|
}
|
|
36
|
-
|
|
37
35
|
function getKernel(radius, sigma) {
|
|
38
36
|
const n = radius * 2 + 1;
|
|
39
37
|
const kernel = new Array(n);
|
|
40
38
|
const sigmaX = sigma ? sigma : ((n - 1) * 0.5 - 1) * 0.3 + 0.8;
|
|
41
39
|
const scale2X = -0.5 / (sigmaX * sigmaX);
|
|
42
40
|
let sum = 0;
|
|
43
|
-
|
|
44
41
|
for (let i = 0; i < n; i++) {
|
|
45
42
|
const x = i - radius;
|
|
46
43
|
const t = Math.exp(scale2X * x * x);
|
|
47
44
|
kernel[i] = t;
|
|
48
45
|
sum += t;
|
|
49
46
|
}
|
|
50
|
-
|
|
51
47
|
for (let i = 0; i < n; i++) {
|
|
52
48
|
kernel[i] /= sum;
|
|
53
49
|
}
|
|
54
|
-
|
|
55
50
|
return kernel;
|
|
56
51
|
}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = gradientFilter;
|
|
7
|
-
|
|
8
7
|
var _convolution = _interopRequireDefault(require("../operator/convolution"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* Direction of a gradient filter
|
|
14
11
|
* @typedef {('x'|'y'|'xy')} GradientDirection
|
|
@@ -38,7 +35,6 @@ function gradientFilter(options = {}) {
|
|
|
38
35
|
this.checkProcessable('gradientFilter', {
|
|
39
36
|
bitDepth: [8, 16]
|
|
40
37
|
});
|
|
41
|
-
|
|
42
38
|
switch (direction) {
|
|
43
39
|
case 'x':
|
|
44
40
|
if (!kernelX) throw new Error('kernelX option is missing');
|
|
@@ -47,7 +43,6 @@ function gradientFilter(options = {}) {
|
|
|
47
43
|
border: border,
|
|
48
44
|
bitDepth
|
|
49
45
|
});
|
|
50
|
-
|
|
51
46
|
case 'y':
|
|
52
47
|
if (!kernelY) throw new Error('kernelY option is missing');
|
|
53
48
|
return _convolution.default.call(this, kernelY, {
|
|
@@ -55,30 +50,25 @@ function gradientFilter(options = {}) {
|
|
|
55
50
|
border: border,
|
|
56
51
|
bitDepth
|
|
57
52
|
});
|
|
58
|
-
|
|
59
53
|
case 'xy':
|
|
60
54
|
{
|
|
61
55
|
if (!kernelX) throw new Error('kernelX option is missing');
|
|
62
56
|
if (!kernelY) throw new Error('kernelY option is missing');
|
|
63
|
-
|
|
64
57
|
const gX = _convolution.default.call(this, kernelX, {
|
|
65
58
|
channels: channels,
|
|
66
59
|
border: border,
|
|
67
60
|
bitDepth: 32
|
|
68
61
|
});
|
|
69
|
-
|
|
70
62
|
const gY = _convolution.default.call(this, kernelY, {
|
|
71
63
|
channels: channels,
|
|
72
64
|
border: border,
|
|
73
65
|
bitDepth: 32
|
|
74
66
|
});
|
|
75
|
-
|
|
76
67
|
return gX.hypotenuse(gY, {
|
|
77
68
|
bitDepth,
|
|
78
69
|
channels: channels
|
|
79
70
|
});
|
|
80
71
|
}
|
|
81
|
-
|
|
82
72
|
default:
|
|
83
73
|
throw new Error(`Unknown parameter direction: ${direction}`);
|
|
84
74
|
}
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = hypotenuse;
|
|
7
|
-
|
|
8
7
|
var _channel = require("../../util/channel");
|
|
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
|
* Calculate a new image that is the hypotenuse between the current image and the otherImage.
|
|
16
12
|
* @memberof Image
|
|
@@ -29,34 +25,26 @@ function hypotenuse(otherImage, options = {}) {
|
|
|
29
25
|
this.checkProcessable('hypotenuse', {
|
|
30
26
|
bitDepth: [8, 16, 32]
|
|
31
27
|
});
|
|
32
|
-
|
|
33
28
|
if (this.width !== otherImage.width || this.height !== otherImage.height) {
|
|
34
29
|
throw new Error('hypotenuse: both images must have the same size');
|
|
35
30
|
}
|
|
36
|
-
|
|
37
31
|
if (this.alpha !== otherImage.alpha || this.bitDepth !== otherImage.bitDepth) {
|
|
38
32
|
throw new Error('hypotenuse: both images must have the same alpha and bitDepth');
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
if (this.channels !== otherImage.channels) {
|
|
42
35
|
throw new Error('hypotenuse: both images must have the same number of channels');
|
|
43
36
|
}
|
|
44
|
-
|
|
45
37
|
let newImage = _Image.default.createFrom(this, {
|
|
46
38
|
bitDepth: bitDepth
|
|
47
39
|
});
|
|
48
|
-
|
|
49
40
|
channels = (0, _channel.validateArrayOfChannels)(this, {
|
|
50
41
|
channels: channels
|
|
51
42
|
});
|
|
52
43
|
let clamped = newImage.isClamped;
|
|
53
|
-
|
|
54
44
|
for (let j = 0; j < channels.length; j++) {
|
|
55
45
|
let c = channels[j];
|
|
56
|
-
|
|
57
46
|
for (let i = c; i < this.data.length; i += this.channels) {
|
|
58
47
|
let value = Math.hypot(this.data[i], otherImage.data[i]);
|
|
59
|
-
|
|
60
48
|
if (clamped) {
|
|
61
49
|
// we calculate the clamped result
|
|
62
50
|
newImage.data[i] = Math.min(Math.max(Math.round(value), 0), newImage.maxValue);
|
|
@@ -65,6 +53,5 @@ function hypotenuse(otherImage, options = {}) {
|
|
|
65
53
|
}
|
|
66
54
|
}
|
|
67
55
|
}
|
|
68
|
-
|
|
69
56
|
return newImage;
|
|
70
57
|
}
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = invert;
|
|
7
|
-
|
|
8
7
|
var _copyAlphaChannel = _interopRequireDefault(require("../internal/copyAlphaChannel"));
|
|
9
|
-
|
|
10
8
|
var _getOutputImage = require("../internal/getOutputImage");
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
/**
|
|
15
11
|
* Invert the colors of an image
|
|
16
12
|
* @memberof Image
|
|
@@ -25,26 +21,21 @@ function invert(options = {}) {
|
|
|
25
21
|
bitDepth: [1, 8, 16]
|
|
26
22
|
});
|
|
27
23
|
const out = (0, _getOutputImage.getOutputImageOrInPlace)(this, options);
|
|
28
|
-
|
|
29
24
|
if (this.bitDepth === 1) {
|
|
30
25
|
invertBinary(this, out);
|
|
31
26
|
} else {
|
|
32
27
|
invertColor(this, out);
|
|
33
|
-
|
|
34
28
|
if (this !== out) {
|
|
35
29
|
(0, _copyAlphaChannel.default)(this, out);
|
|
36
30
|
}
|
|
37
31
|
}
|
|
38
|
-
|
|
39
32
|
return out;
|
|
40
33
|
}
|
|
41
|
-
|
|
42
34
|
function invertBinary(image, out) {
|
|
43
35
|
for (let i = 0; i < image.data.length; i++) {
|
|
44
36
|
out.data[i] = ~image.data[i];
|
|
45
37
|
}
|
|
46
38
|
}
|
|
47
|
-
|
|
48
39
|
function invertColor(image, out) {
|
|
49
40
|
for (let pixel = 0; pixel < image.data.length; pixel += image.channels) {
|
|
50
41
|
for (let c = 0; c < image.components; c++) {
|