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.
Files changed (169) hide show
  1. package/index.d.ts +2 -9
  2. package/lib/browser/environment.js +0 -6
  3. package/lib/browser/worker/extend.js +0 -3
  4. package/lib/browser/worker/process/background.js +0 -12
  5. package/lib/browser/worker/worker.js +0 -17
  6. package/lib/image/Image.js +18 -51
  7. package/lib/image/compute/colorHistogram.js +0 -8
  8. package/lib/image/compute/countAlphaPixels.js +0 -3
  9. package/lib/image/compute/extendedPoints.js +2 -7
  10. package/lib/image/compute/histogram.js +6 -25
  11. package/lib/image/compute/localMaxima.js +2 -10
  12. package/lib/image/compute/max.js +0 -5
  13. package/lib/image/compute/mean.js +0 -4
  14. package/lib/image/compute/median.js +0 -4
  15. package/lib/image/compute/min.js +0 -5
  16. package/lib/image/compute/minimalBoundingRectangle.js +5 -18
  17. package/lib/image/compute/moment.js +0 -3
  18. package/lib/image/compute/monotoneChainConvexHull.js +0 -3
  19. package/lib/image/compute/points.js +0 -3
  20. package/lib/image/compute/relativePosition.js +2 -8
  21. package/lib/image/compute/sum.js +0 -5
  22. package/lib/image/core/bitMethods.js +0 -11
  23. package/lib/image/core/checkProcessable.js +0 -13
  24. package/lib/image/core/environment.js +0 -8
  25. package/lib/image/core/export.js +0 -38
  26. package/lib/image/core/extend.js +0 -13
  27. package/lib/image/core/getRGBAData.js +0 -15
  28. package/lib/image/core/kind.js +4 -28
  29. package/lib/image/core/kindNames.js +1 -0
  30. package/lib/image/core/load.js +1 -53
  31. package/lib/image/core/mediaTypes.js +0 -2
  32. package/lib/image/core/valueMethods.js +0 -13
  33. package/lib/image/extend.js +7 -83
  34. package/lib/image/filter/abs.js +0 -3
  35. package/lib/image/filter/add.js +2 -8
  36. package/lib/image/filter/background.js +0 -9
  37. package/lib/image/filter/blurFilter.js +0 -6
  38. package/lib/image/filter/divide.js +0 -8
  39. package/lib/image/filter/flipX.js +0 -5
  40. package/lib/image/filter/flipY.js +0 -4
  41. package/lib/image/filter/gaussianFilter.js +0 -5
  42. package/lib/image/filter/gradientFilter.js +0 -10
  43. package/lib/image/filter/hypotenuse.js +0 -13
  44. package/lib/image/filter/invert.js +0 -9
  45. package/lib/image/filter/level.js +1 -19
  46. package/lib/image/filter/medianFilter.js +0 -15
  47. package/lib/image/filter/multiply.js +0 -10
  48. package/lib/image/filter/scharrFilter.js +0 -4
  49. package/lib/image/filter/sobelFilter.js +0 -4
  50. package/lib/image/filter/subtract.js +0 -8
  51. package/lib/image/filter/subtractImage.js +0 -10
  52. package/lib/image/internal/checks.js +1 -9
  53. package/lib/image/internal/clamp.js +0 -1
  54. package/lib/image/internal/copy.js +0 -2
  55. package/lib/image/internal/copyAlphaChannel.js +0 -1
  56. package/lib/image/internal/getImageParameters.js +0 -1
  57. package/lib/image/internal/getOutputImage.js +1 -13
  58. package/lib/image/model/model.js +1 -1
  59. package/lib/image/morphology/blackHat.js +0 -5
  60. package/lib/image/morphology/close.js +0 -5
  61. package/lib/image/morphology/dilate.js +0 -40
  62. package/lib/image/morphology/erode.js +0 -40
  63. package/lib/image/morphology/morphologicalGradient.js +0 -5
  64. package/lib/image/morphology/open.js +0 -5
  65. package/lib/image/morphology/topHat.js +0 -5
  66. package/lib/image/operator/cannyEdge.js +0 -3
  67. package/lib/image/operator/convolution.js +9 -34
  68. package/lib/image/operator/convolutionSeparable.js +0 -10
  69. package/lib/image/operator/extract.js +4 -13
  70. package/lib/image/operator/floodFill.js +2 -15
  71. package/lib/image/operator/getSeparatedKernel.js +0 -2
  72. package/lib/image/operator/paintLabels.js +2 -13
  73. package/lib/image/operator/paintMasks.js +2 -12
  74. package/lib/image/operator/paintPoints.js +0 -9
  75. package/lib/image/operator/paintPolygon.js +0 -14
  76. package/lib/image/operator/paintPolygons.js +0 -4
  77. package/lib/image/operator/paintPolyline.js +0 -7
  78. package/lib/image/operator/paintPolylines.js +0 -4
  79. package/lib/image/roi/Roi.js +27 -207
  80. package/lib/image/roi/RoiLayer.js +1 -22
  81. package/lib/image/roi/RoiMap.js +5 -38
  82. package/lib/image/roi/creator/fromMask.js +4 -22
  83. package/lib/image/roi/creator/fromMaskConnectedComponentLabelingAlgorithm.js +2 -20
  84. package/lib/image/roi/creator/fromMaxima.js +10 -43
  85. package/lib/image/roi/creator/fromPoints.js +2 -10
  86. package/lib/image/roi/creator/fromWaterShed.js +6 -17
  87. package/lib/image/roi/feretDiameters.js +9 -21
  88. package/lib/image/roi/manager.js +30 -119
  89. package/lib/image/roi/util/commonBorderLength.js +5 -16
  90. package/lib/image/roi/util/mergeRoi.js +2 -21
  91. package/lib/image/transform/cmyk.js +0 -9
  92. package/lib/image/transform/colorDepth.js +0 -12
  93. package/lib/image/transform/crop.js +0 -20
  94. package/lib/image/transform/cropAlpha.js +0 -11
  95. package/lib/image/transform/grey.js +0 -16
  96. package/lib/image/transform/greyAlgorithms.js +1 -24
  97. package/lib/image/transform/hsl.js +0 -16
  98. package/lib/image/transform/hsv.js +0 -15
  99. package/lib/image/transform/insert.js +0 -6
  100. package/lib/image/transform/mask/huang.js +3 -18
  101. package/lib/image/transform/mask/intermodes.js +3 -14
  102. package/lib/image/transform/mask/isodata.js +0 -14
  103. package/lib/image/transform/mask/li.js +12 -42
  104. package/lib/image/transform/mask/mask.js +1 -13
  105. package/lib/image/transform/mask/maxEntropy.js +8 -25
  106. package/lib/image/transform/mask/mean.js +1 -3
  107. package/lib/image/transform/mask/minError.js +10 -21
  108. package/lib/image/transform/mask/minimum.js +0 -20
  109. package/lib/image/transform/mask/moments.js +4 -17
  110. package/lib/image/transform/mask/otsu.js +1 -7
  111. package/lib/image/transform/mask/percentile.js +0 -8
  112. package/lib/image/transform/mask/renyiEntropy.js +8 -34
  113. package/lib/image/transform/mask/shanbhag.js +8 -25
  114. package/lib/image/transform/mask/thresholdAlgorithms.js +1 -17
  115. package/lib/image/transform/mask/triangle.js +13 -29
  116. package/lib/image/transform/mask/yen.js +2 -14
  117. package/lib/image/transform/pad.js +0 -20
  118. package/lib/image/transform/resize/nearestNeighbor.js +0 -6
  119. package/lib/image/transform/resize/resize.js +0 -16
  120. package/lib/image/transform/rgba.js +0 -9
  121. package/lib/image/transform/rgba8.js +0 -3
  122. package/lib/image/transform/rotate.js +0 -29
  123. package/lib/image/transform/rotateFree.js +0 -31
  124. package/lib/image/transform/warping.js +2 -35
  125. package/lib/image/utility/combineChannels.js +0 -11
  126. package/lib/image/utility/getBestMatch.js +2 -13
  127. package/lib/image/utility/getChannel.js +0 -10
  128. package/lib/image/utility/getClosestCommonParent.js +6 -23
  129. package/lib/image/utility/getColumn.js +0 -4
  130. package/lib/image/utility/getIntersection.js +2 -18
  131. package/lib/image/utility/getMatrix.js +0 -7
  132. package/lib/image/utility/getPixelsArray.js +0 -5
  133. package/lib/image/utility/getPixelsGrid.js +0 -11
  134. package/lib/image/utility/getRow.js +0 -4
  135. package/lib/image/utility/getSimilarity.js +3 -17
  136. package/lib/image/utility/getThreshold.js +0 -4
  137. package/lib/image/utility/setBorder.js +0 -16
  138. package/lib/image/utility/setChannel.js +0 -6
  139. package/lib/image/utility/setMatrix.js +0 -6
  140. package/lib/image/utility/split.js +2 -15
  141. package/lib/index.js +0 -12
  142. package/lib/kernel/kernel.js +0 -3
  143. package/lib/kernel/laplacianOfGaussian.js +1 -7
  144. package/lib/node_modules/test/binary.js +0 -3
  145. package/lib/node_modules/test/oneRoi.js +0 -2
  146. package/lib/stack/Stack.js +2 -35
  147. package/lib/stack/compute/histogram.js +0 -4
  148. package/lib/stack/compute/histograms.js +0 -4
  149. package/lib/stack/compute/max.js +0 -3
  150. package/lib/stack/compute/median.js +0 -4
  151. package/lib/stack/compute/min.js +0 -3
  152. package/lib/stack/extend.js +1 -11
  153. package/lib/stack/transform/matchAndCrop.js +6 -19
  154. package/lib/stack/utility/averageImage.js +0 -9
  155. package/lib/stack/utility/maxImage.js +0 -7
  156. package/lib/stack/utility/minImage.js +0 -7
  157. package/lib/util/Shape.js +3 -40
  158. package/lib/util/base64.js +3 -14
  159. package/lib/util/channel.js +1 -35
  160. package/lib/util/color.js +1 -25
  161. package/lib/util/converter.js +1 -13
  162. package/lib/util/deepValue.js +0 -3
  163. package/lib/util/histogram.js +1 -12
  164. package/lib/util/kernel.js +2 -12
  165. package/lib/util/matrix.js +0 -13
  166. package/lib/util/points.js +12 -35
  167. package/lib/util/value.js +0 -7
  168. package/lib/util/zerosMatrix.js +0 -3
  169. package/package.json +1 -1
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = split;
7
-
8
7
  var _Stack = _interopRequireDefault(require("../../stack/Stack"));
9
-
10
8
  var _Image = _interopRequireDefault(require("../Image"));
11
-
12
9
  var _model = require("../model/model");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  /**
17
12
  * @memberof Image
18
13
  * @instance
@@ -26,15 +21,14 @@ function split(options = {}) {
26
21
  } = options;
27
22
  this.checkProcessable('split', {
28
23
  bitDepth: [8, 16]
29
- }); // split will always return a stack of images
24
+ });
30
25
 
26
+ // split will always return a stack of images
31
27
  if (this.components === 1) {
32
28
  return new _Stack.default([this.clone()]);
33
29
  }
34
-
35
30
  let images = new _Stack.default();
36
31
  let data = this.data;
37
-
38
32
  if (this.alpha && preserveAlpha) {
39
33
  for (let i = 0; i < this.components; i++) {
40
34
  let newImage = _Image.default.createFrom(this, {
@@ -42,14 +36,11 @@ function split(options = {}) {
42
36
  alpha: true,
43
37
  colorModel: _model.GREY
44
38
  });
45
-
46
39
  let ptr = 0;
47
-
48
40
  for (let j = 0; j < data.length; j += this.channels) {
49
41
  newImage.data[ptr++] = data[j + i];
50
42
  newImage.data[ptr++] = data[j + this.components];
51
43
  }
52
-
53
44
  images.push(newImage);
54
45
  }
55
46
  } else {
@@ -59,16 +50,12 @@ function split(options = {}) {
59
50
  alpha: false,
60
51
  colorModel: _model.GREY
61
52
  });
62
-
63
53
  let ptr = 0;
64
-
65
54
  for (let j = 0; j < data.length; j += this.channels) {
66
55
  newImage.data[ptr++] = data[j + i];
67
56
  }
68
-
69
57
  images.push(newImage);
70
58
  }
71
59
  }
72
-
73
60
  return images;
74
61
  }
package/lib/index.js CHANGED
@@ -35,29 +35,17 @@ Object.defineProperty(exports, "default", {
35
35
  return _Image.default;
36
36
  }
37
37
  });
38
-
39
38
  var _Image = _interopRequireDefault(require("./image/Image"));
40
-
41
39
  var _greyAlgorithms = require("./image/transform/greyAlgorithms");
42
-
43
40
  var _thresholdAlgorithms = require("./image/transform/mask/thresholdAlgorithms");
44
-
45
41
  var Kernel = _interopRequireWildcard(require("./kernel/kernel"));
46
-
47
42
  exports.Kernel = Kernel;
48
-
49
43
  var _Stack = _interopRequireDefault(require("./stack/Stack"));
50
-
51
44
  var _Shape = _interopRequireDefault(require("./util/Shape"));
52
-
53
45
  var _worker = _interopRequireDefault(require("./worker/worker"));
54
-
55
46
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
56
-
57
47
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
58
-
59
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
60
-
61
49
  const Static = {
62
50
  grey: _greyAlgorithms.names,
63
51
  threshold: _thresholdAlgorithms.names
@@ -12,9 +12,7 @@ Object.defineProperty(exports, "laplacianOfGaussian", {
12
12
  return _laplacianOfGaussian.laplacianOfGaussian;
13
13
  }
14
14
  });
15
-
16
15
  var _kernels = require("../util/kernels");
17
-
18
16
  Object.keys(_kernels).forEach(function (key) {
19
17
  if (key === "default" || key === "__esModule") return;
20
18
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -26,5 +24,4 @@ Object.keys(_kernels).forEach(function (key) {
26
24
  }
27
25
  });
28
26
  });
29
-
30
27
  var _laplacianOfGaussian = require("./laplacianOfGaussian");
@@ -4,30 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.laplacianOfGaussian = laplacianOfGaussian;
7
-
8
7
  // http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm
8
+
9
9
  function laplacianOfGaussian(sigma, nPoints, factor) {
10
10
  let kernel = new Array(nPoints);
11
11
  let i, j, x2, y2;
12
-
13
12
  if (!factor) {
14
13
  factor = 100;
15
14
  }
16
-
17
15
  factor *= -1; // -480/(Math.PI*Math.pow(sigma,4));
18
-
19
16
  let center = (nPoints - 1) / 2;
20
17
  let sigma2 = 2 * sigma * sigma;
21
-
22
18
  for (i = 0; i < nPoints; i++) {
23
19
  kernel[i] = new Array(nPoints);
24
20
  y2 = (i - center) * (i - center);
25
-
26
21
  for (j = 0; j < nPoints; j++) {
27
22
  x2 = (j - center) * (j - center);
28
23
  kernel[i][j] = Math.round(factor * (1 - (x2 + y2) / sigma2) * Math.exp(-(x2 + y2) / sigma2));
29
24
  }
30
25
  }
31
-
32
26
  return kernel;
33
27
  }
@@ -3,19 +3,16 @@
3
3
  const {
4
4
  Image
5
5
  } = require('./common');
6
-
7
6
  module.exports = function binary([str]) {
8
7
  let lines = str.split(/\r?\n/).map(line => line.trim()).filter(line => line);
9
8
  let width = lines[0].length;
10
9
  let height = lines.length;
11
10
  const trimmed = lines.join('');
12
11
  const data = new Uint8Array(Math.ceil(trimmed.length / 8));
13
-
14
12
  for (let i = 0; i < trimmed.length; i += 8) {
15
13
  const index = i / 8;
16
14
  data[index] = parseInt(trimmed.substr(i, 8).padEnd(8, '0'), 2);
17
15
  }
18
-
19
16
  return new Image(width, height, data, {
20
17
  kind: 'BINARY'
21
18
  });
@@ -1,11 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  const binary = require('./binary');
4
-
5
4
  const {
6
5
  Image
7
6
  } = require('./common');
8
-
9
7
  module.exports = function oneRoi(str) {
10
8
  let mask = binary(str);
11
9
  let roiManager = mask.getRoiManager();
@@ -4,30 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _hasOwn = _interopRequireDefault(require("has-own"));
9
-
10
8
  var _Image = _interopRequireDefault(require("../image/Image"));
11
-
12
9
  var _extend = _interopRequireDefault(require("./extend"));
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  let computedPropertyDescriptor = {
17
12
  configurable: true,
18
13
  enumerable: false,
19
14
  get: undefined
20
15
  };
16
+
21
17
  /**
22
18
  * Class representing stack of images
23
19
  * @class Stack
24
20
  */
25
-
26
21
  class Stack extends Array {
27
22
  constructor(images) {
28
23
  if (Array.isArray(images)) {
29
24
  super(images.length);
30
-
31
25
  for (let i = 0; i < images.length; i++) {
32
26
  this[i] = images[i];
33
27
  }
@@ -36,31 +30,25 @@ class Stack extends Array {
36
30
  } else {
37
31
  super();
38
32
  }
39
-
40
33
  this.computed = null;
41
34
  }
42
-
43
35
  static load(urls) {
44
36
  return Promise.all(urls.map(_Image.default.load)).then(images => new Stack(images));
45
37
  }
46
-
47
38
  static extendMethod(name, method, options = {}) {
48
39
  let {
49
40
  inPlace = false,
50
41
  returnThis = true,
51
42
  partialArgs = []
52
43
  } = options;
53
-
54
44
  if (inPlace) {
55
45
  Stack.prototype[name] = function (...args) {
56
46
  // remove computed properties
57
47
  this.computed = null;
58
48
  let result = method.apply(this, [...partialArgs, ...args]);
59
-
60
49
  if (returnThis) {
61
50
  return this;
62
51
  }
63
-
64
52
  return result;
65
53
  };
66
54
  } else {
@@ -68,95 +56,74 @@ class Stack extends Array {
68
56
  return method.apply(this, [...partialArgs, ...args]);
69
57
  };
70
58
  }
71
-
72
59
  return Stack;
73
60
  }
74
-
75
61
  static extendProperty(name, method, options = {}) {
76
62
  let {
77
63
  partialArgs = []
78
64
  } = options;
79
-
80
65
  computedPropertyDescriptor.get = function () {
81
66
  if (this.computed === null) {
82
67
  this.computed = {};
83
68
  } else if ((0, _hasOwn.default)(name, this.computed)) {
84
69
  return this.computed[name];
85
70
  }
86
-
87
71
  let result = method.apply(this, partialArgs);
88
72
  this.computed[name] = result;
89
73
  return result;
90
74
  };
91
-
92
75
  Object.defineProperty(Stack.prototype, name, computedPropertyDescriptor);
93
76
  return Stack;
94
77
  }
78
+
95
79
  /**
96
80
  * Check if a process can be applied on the stack
97
81
  * @param {string} processName
98
82
  * @param {object} [options]
99
83
  * @private
100
84
  */
101
-
102
-
103
85
  checkProcessable(processName, options = {}) {
104
86
  if (typeof processName !== 'string') {
105
87
  throw new TypeError('checkProcessable requires as first parameter the processName (a string)');
106
88
  }
107
-
108
89
  if (this.size === 0) {
109
90
  throw new TypeError(`The process: ${processName} can not be applied on an empty stack`);
110
91
  }
111
-
112
92
  this[0].checkProcessable(processName, options);
113
-
114
93
  for (let i = 1; i < this.length; i++) {
115
94
  if ((options.sameSize === undefined || options.sameSize) && this[0].width !== this[i].width) {
116
95
  throw new TypeError(`The process: ${processName} can not be applied if width is not identical in all images`);
117
96
  }
118
-
119
97
  if ((options.sameSize === undefined || options.sameSize) && this[0].height !== this[i].height) {
120
98
  throw new TypeError(`The process: ${processName} can not be applied if height is not identical in all images`);
121
99
  }
122
-
123
100
  if ((options.sameAlpha === undefined || options.sameAlpha) && this[0].alpha !== this[i].alpha) {
124
101
  throw new TypeError(`The process: ${processName} can not be applied if alpha is not identical in all images`);
125
102
  }
126
-
127
103
  if ((options.sameBitDepth === undefined || options.sameBitDepth) && this[0].bitDepth !== this[i].bitDepth) {
128
104
  throw new TypeError(`The process: ${processName} can not be applied if bitDepth is not identical in all images`);
129
105
  }
130
-
131
106
  if ((options.sameColorModel === undefined || options.sameColorModel) && this[0].colorModel !== this[i].colorModel) {
132
107
  throw new TypeError(`The process: ${processName} can not be applied if colorModel is not identical in all images`);
133
108
  }
134
-
135
109
  if ((options.sameNumberChannels === undefined || options.sameNumberChannels) && this[0].channels !== this[i].channels) {
136
110
  throw new TypeError(`The process: ${processName} can not be applied if channels is not identical in all images`);
137
111
  }
138
112
  }
139
113
  }
140
-
141
114
  }
142
-
143
115
  exports.default = Stack;
144
-
145
116
  if (!Array[Symbol.species]) {
146
117
  // support old engines
147
118
  Stack.prototype.map = function (cb, thisArg) {
148
119
  if (typeof cb !== 'function') {
149
120
  throw new TypeError(`${cb} is not a function`);
150
121
  }
151
-
152
122
  let newStack = new Stack(this.length);
153
-
154
123
  for (let i = 0; i < this.length; i++) {
155
124
  newStack[i] = cb.call(thisArg, this[i], i, this);
156
125
  }
157
-
158
126
  return newStack;
159
127
  };
160
128
  }
161
-
162
129
  (0, _extend.default)(Stack);
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = histogram;
7
-
8
7
  /**
9
8
  * @memberof Stack
10
9
  * @instance
@@ -16,14 +15,11 @@ function histogram(options) {
16
15
  bitDepth: [8, 16]
17
16
  });
18
17
  let histogram = this[0].getHistogram(options);
19
-
20
18
  for (let i = 1; i < this.length; i++) {
21
19
  let secondHistogram = this[i].getHistogram(options);
22
-
23
20
  for (let j = 0; j < histogram.length; j++) {
24
21
  histogram[j] += secondHistogram[j];
25
22
  }
26
23
  }
27
-
28
24
  return histogram;
29
25
  }
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = histograms;
7
-
8
7
  /**
9
8
  * @memberof Stack
10
9
  * @instance
@@ -17,16 +16,13 @@ function histograms(options) {
17
16
  });
18
17
  let histograms = this[0].getHistograms(options);
19
18
  let histogramLength = histograms[0].length;
20
-
21
19
  for (let i = 1; i < this.length; i++) {
22
20
  let secondHistograms = this[i].getHistograms(options);
23
-
24
21
  for (let c = 0; c < histograms.length; c++) {
25
22
  for (let j = 0; j < histogramLength; j++) {
26
23
  histograms[c][j] += secondHistograms[c][j];
27
24
  }
28
25
  }
29
26
  }
30
-
31
27
  return histograms;
32
28
  }
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = max;
7
-
8
7
  /**
9
8
  * @memberof Stack
10
9
  * @instance
@@ -15,12 +14,10 @@ function max() {
15
14
  bitDepth: [8, 16]
16
15
  });
17
16
  let max = this[0].max;
18
-
19
17
  for (let i = 1; i < this.length; i++) {
20
18
  for (let j = 0; j < max.length; j++) {
21
19
  max[j] = Math.max(max[j], this[i].max[j]);
22
20
  }
23
21
  }
24
-
25
22
  return max;
26
23
  }
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = median;
7
-
8
7
  var _histogram = require("../../util/histogram");
9
-
10
8
  /**
11
9
  * @memberof Stack
12
10
  * @instance
@@ -20,11 +18,9 @@ function median() {
20
18
  maxSlots: this[0].maxValue + 1
21
19
  });
22
20
  let result = new Array(histograms.length);
23
-
24
21
  for (let c = 0; c < histograms.length; c++) {
25
22
  let histogram = histograms[c];
26
23
  result[c] = (0, _histogram.median)(histogram);
27
24
  }
28
-
29
25
  return result;
30
26
  }
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = min;
7
-
8
7
  /**
9
8
  * @memberof Stack
10
9
  * @instance
@@ -15,12 +14,10 @@ function min() {
15
14
  bitDepth: [8, 16]
16
15
  });
17
16
  let min = this[0].min;
18
-
19
17
  for (let i = 1; i < this.length; i++) {
20
18
  for (let j = 0; j < min.length; j++) {
21
19
  min[j] = Math.min(min[j], this[i].min[j]);
22
20
  }
23
21
  }
24
-
25
22
  return min;
26
23
  }
@@ -4,28 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = extend;
7
-
8
7
  var _matchAndCrop = _interopRequireDefault(require("./transform/matchAndCrop"));
9
-
10
8
  var _min = _interopRequireDefault(require("./compute/min"));
11
-
12
9
  var _max = _interopRequireDefault(require("./compute/max"));
13
-
14
10
  var _median = _interopRequireDefault(require("./compute/median"));
15
-
16
11
  var _histogram = _interopRequireDefault(require("./compute/histogram"));
17
-
18
12
  var _histograms = _interopRequireDefault(require("./compute/histograms"));
19
-
20
13
  var _averageImage = _interopRequireDefault(require("./utility/averageImage"));
21
-
22
14
  var _maxImage = _interopRequireDefault(require("./utility/maxImage"));
23
-
24
15
  var _minImage = _interopRequireDefault(require("./utility/minImage"));
25
-
26
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
28
17
  /* eslint-disable import/order */
18
+
29
19
  function extend(Stack) {
30
20
  // let inPlace = {inPlace: true};
31
21
  Stack.extendMethod('matchAndCrop', _matchAndCrop.default);
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = matchAndCrop;
7
-
8
7
  var _Stack = _interopRequireDefault(require("../Stack"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  // TODO this code seems buggy if it is not 0,0
13
-
14
10
  /**
15
11
  * We will try to move a set of images in order to get only the best common part of them.
16
12
  * In a stack, we compare 2 consecutive images or directly to a parent.
@@ -40,8 +36,9 @@ function matchAndCrop(options = {}) {
40
36
  position: [0, 0],
41
37
  image: this[0]
42
38
  };
43
- let relativePosition = [0, 0]; // we calculate the best relative position to the parent image
39
+ let relativePosition = [0, 0];
44
40
 
41
+ // we calculate the best relative position to the parent image
45
42
  for (let i = 1; i < this.length; i++) {
46
43
  let position = parent.getBestMatch(this[i], {
47
44
  border: ignoreBorder
@@ -50,43 +47,35 @@ function matchAndCrop(options = {}) {
50
47
  position: [position[0] + relativePosition[0], position[1] + relativePosition[1]],
51
48
  image: this[i]
52
49
  };
53
-
54
50
  if (matchToPrevious) {
55
51
  relativePosition[0] += position[0];
56
52
  relativePosition[1] += position[1];
57
53
  parent = this[i];
58
54
  }
59
- } // now we can calculate the cropping that we need to do
60
-
55
+ }
56
+ // now we can calculate the cropping that we need to do
61
57
 
62
58
  let leftShift = 0;
63
59
  let rightShift = 0;
64
60
  let topShift = 0;
65
61
  let bottomShift = 0;
66
-
67
62
  for (let i = 0; i < results.length; i++) {
68
63
  let result = results[i];
69
-
70
64
  if (result.position[0] > leftShift) {
71
65
  leftShift = result.position[0];
72
66
  }
73
-
74
67
  if (result.position[0] < rightShift) {
75
68
  rightShift = result.position[0];
76
69
  }
77
-
78
70
  if (result.position[1] > topShift) {
79
71
  topShift = result.position[1];
80
72
  }
81
-
82
73
  if (result.position[1] < bottomShift) {
83
74
  bottomShift = result.position[1];
84
75
  }
85
76
  }
86
-
87
77
  rightShift = 0 - rightShift;
88
78
  bottomShift = 0 - bottomShift;
89
-
90
79
  for (let i = 0; i < results.length; i++) {
91
80
  let result = results[i];
92
81
  result.crop = result.image.crop({
@@ -95,14 +84,12 @@ function matchAndCrop(options = {}) {
95
84
  width: parent.width - rightShift - leftShift,
96
85
  height: parent.height - bottomShift - topShift
97
86
  });
98
- } // finally we crop and create a new array of images
99
-
87
+ }
100
88
 
89
+ // finally we crop and create a new array of images
101
90
  let newImages = [];
102
-
103
91
  for (let i = 0; i < results.length; i++) {
104
92
  newImages[i] = results[i].crop;
105
93
  }
106
-
107
94
  return new _Stack.default(newImages);
108
95
  }
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = averageImage;
7
-
8
7
  var _Image = _interopRequireDefault(require("../../image/Image"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  /**
13
10
  * @memberof Stack
14
11
  * @instance
@@ -19,22 +16,16 @@ function averageImage() {
19
16
  bitDepth: [8, 16]
20
17
  });
21
18
  let data = new Uint32Array(this[0].data.length);
22
-
23
19
  for (let i = 0; i < this.length; i++) {
24
20
  let current = this[i];
25
-
26
21
  for (let j = 0; j < this[0].data.length; j++) {
27
22
  data[j] += current.data[j];
28
23
  }
29
24
  }
30
-
31
25
  let image = _Image.default.createFrom(this[0]);
32
-
33
26
  let newData = image.data;
34
-
35
27
  for (let i = 0; i < this[0].data.length; i++) {
36
28
  newData[i] = data[i] / this.length;
37
29
  }
38
-
39
30
  return image;
40
31
  }
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = maxImage;
7
-
8
7
  var _Image = _interopRequireDefault(require("../../image/Image"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  /**
13
10
  * @memberof Stack
14
11
  * @instance
@@ -18,16 +15,12 @@ function maxImage() {
18
15
  this.checkProcessable('max', {
19
16
  bitDepth: [8, 16]
20
17
  });
21
-
22
18
  let image = _Image.default.createFrom(this[0]);
23
-
24
19
  image.data.fill(0);
25
-
26
20
  for (const current of this) {
27
21
  for (let j = 0; j < image.data.length; j++) {
28
22
  image.data[j] = Math.max(current.data[j], image.data[j]);
29
23
  }
30
24
  }
31
-
32
25
  return image;
33
26
  }
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = minImage;
7
-
8
7
  var _Image = _interopRequireDefault(require("../../image/Image"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  /**
13
10
  * @memberof Stack
14
11
  * @instance
@@ -18,16 +15,12 @@ function minImage() {
18
15
  this.checkProcessable('max', {
19
16
  bitDepth: [8, 16]
20
17
  });
21
-
22
18
  let image = _Image.default.createFrom(this[0]);
23
-
24
19
  image.data.fill(image.maxValue);
25
-
26
20
  for (const current of this) {
27
21
  for (let j = 0; j < image.data.length; j++) {
28
22
  image.data[j] = Math.min(current.data[j], image.data[j]);
29
23
  }
30
24
  }
31
-
32
25
  return image;
33
26
  }