image-js 0.0.0-next-e30968a2d8
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/LICENSE +21 -0
- package/README.md +29 -0
- package/lib/IJS.d.ts +316 -0
- package/lib/IJS.d.ts.map +1 -0
- package/lib/IJS.js +534 -0
- package/lib/IJS.js.map +1 -0
- package/lib/Mask.d.ts +257 -0
- package/lib/Mask.d.ts.map +1 -0
- package/lib/Mask.js +338 -0
- package/lib/Mask.js.map +1 -0
- package/lib/compute/histogram.d.ts +20 -0
- package/lib/compute/histogram.d.ts.map +1 -0
- package/lib/compute/histogram.js +28 -0
- package/lib/compute/histogram.js.map +1 -0
- package/lib/compute/index.d.ts +2 -0
- package/lib/compute/index.d.ts.map +1 -0
- package/lib/compute/index.js +18 -0
- package/lib/compute/index.js.map +1 -0
- package/lib/filters/and.d.ts +17 -0
- package/lib/filters/and.d.ts.map +1 -0
- package/lib/filters/and.js +29 -0
- package/lib/filters/and.js.map +1 -0
- package/lib/filters/blur.d.ts +37 -0
- package/lib/filters/blur.d.ts.map +1 -0
- package/lib/filters/blur.js +22 -0
- package/lib/filters/blur.js.map +1 -0
- package/lib/filters/convolution.d.ts +79 -0
- package/lib/filters/convolution.d.ts.map +1 -0
- package/lib/filters/convolution.js +196 -0
- package/lib/filters/convolution.js.map +1 -0
- package/lib/filters/derivativeFilter.d.ts +40 -0
- package/lib/filters/derivativeFilter.d.ts.map +1 -0
- package/lib/filters/derivativeFilter.js +42 -0
- package/lib/filters/derivativeFilter.js.map +1 -0
- package/lib/filters/gaussianBlur.d.ts +59 -0
- package/lib/filters/gaussianBlur.d.ts.map +1 -0
- package/lib/filters/gaussianBlur.js +59 -0
- package/lib/filters/gaussianBlur.js.map +1 -0
- package/lib/filters/gradientFilter.d.ts +54 -0
- package/lib/filters/gradientFilter.d.ts.map +1 -0
- package/lib/filters/gradientFilter.js +58 -0
- package/lib/filters/gradientFilter.js.map +1 -0
- package/lib/filters/hypotenuse.d.ts +23 -0
- package/lib/filters/hypotenuse.d.ts.map +1 -0
- package/lib/filters/hypotenuse.js +46 -0
- package/lib/filters/hypotenuse.js.map +1 -0
- package/lib/filters/index.d.ts +11 -0
- package/lib/filters/index.d.ts.map +1 -0
- package/lib/filters/index.js +27 -0
- package/lib/filters/index.js.map +1 -0
- package/lib/filters/invert.d.ts +11 -0
- package/lib/filters/invert.d.ts.map +1 -0
- package/lib/filters/invert.js +37 -0
- package/lib/filters/invert.js.map +1 -0
- package/lib/filters/or.d.ts +17 -0
- package/lib/filters/or.d.ts.map +1 -0
- package/lib/filters/or.js +29 -0
- package/lib/filters/or.js.map +1 -0
- package/lib/filters/subtractImage.d.ts +13 -0
- package/lib/filters/subtractImage.d.ts.map +1 -0
- package/lib/filters/subtractImage.js +64 -0
- package/lib/filters/subtractImage.js.map +1 -0
- package/lib/geometry/index.d.ts +4 -0
- package/lib/geometry/index.d.ts.map +1 -0
- package/lib/geometry/index.js +20 -0
- package/lib/geometry/index.js.map +1 -0
- package/lib/geometry/resize.d.ts +52 -0
- package/lib/geometry/resize.d.ts.map +1 -0
- package/lib/geometry/resize.js +107 -0
- package/lib/geometry/resize.js.map +1 -0
- package/lib/geometry/rotate.d.ts +54 -0
- package/lib/geometry/rotate.d.ts.map +1 -0
- package/lib/geometry/rotate.js +44 -0
- package/lib/geometry/rotate.js.map +1 -0
- package/lib/geometry/transform.d.ts +46 -0
- package/lib/geometry/transform.d.ts.map +1 -0
- package/lib/geometry/transform.js +95 -0
- package/lib/geometry/transform.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +26 -0
- package/lib/index.js.map +1 -0
- package/lib/load/decode.d.ts +10 -0
- package/lib/load/decode.d.ts.map +1 -0
- package/lib/load/decode.js +33 -0
- package/lib/load/decode.js.map +1 -0
- package/lib/load/decodeJpeg.d.ts +9 -0
- package/lib/load/decodeJpeg.d.ts.map +1 -0
- package/lib/load/decodeJpeg.js +20 -0
- package/lib/load/decodeJpeg.js.map +1 -0
- package/lib/load/decodePng.d.ts +9 -0
- package/lib/load/decodePng.d.ts.map +1 -0
- package/lib/load/decodePng.js +72 -0
- package/lib/load/decodePng.js.map +1 -0
- package/lib/load/decodeTiff.d.ts +9 -0
- package/lib/load/decodeTiff.d.ts.map +1 -0
- package/lib/load/decodeTiff.js +64 -0
- package/lib/load/decodeTiff.js.map +1 -0
- package/lib/load/index.d.ts +8 -0
- package/lib/load/index.d.ts.map +1 -0
- package/lib/load/index.js +24 -0
- package/lib/load/index.js.map +1 -0
- package/lib/load/read.d.ts +17 -0
- package/lib/load/read.d.ts.map +1 -0
- package/lib/load/read.js +31 -0
- package/lib/load/read.js.map +1 -0
- package/lib/load/readCanvas.d.ts +3 -0
- package/lib/load/readCanvas.d.ts.map +1 -0
- package/lib/load/readCanvas.js +17 -0
- package/lib/load/readCanvas.js.map +1 -0
- package/lib/load/readImg.d.ts +3 -0
- package/lib/load/readImg.d.ts.map +1 -0
- package/lib/load/readImg.js +17 -0
- package/lib/load/readImg.js.map +1 -0
- package/lib/morphology/bottomHat.d.ts +19 -0
- package/lib/morphology/bottomHat.d.ts.map +1 -0
- package/lib/morphology/bottomHat.js +46 -0
- package/lib/morphology/bottomHat.js.map +1 -0
- package/lib/morphology/cannyEdgeDetector.d.ts +49 -0
- package/lib/morphology/cannyEdgeDetector.d.ts.map +1 -0
- package/lib/morphology/cannyEdgeDetector.js +157 -0
- package/lib/morphology/cannyEdgeDetector.js.map +1 -0
- package/lib/morphology/clearBorder.d.ts +22 -0
- package/lib/morphology/clearBorder.d.ts.map +1 -0
- package/lib/morphology/clearBorder.js +89 -0
- package/lib/morphology/clearBorder.js.map +1 -0
- package/lib/morphology/close.d.ts +19 -0
- package/lib/morphology/close.d.ts.map +1 -0
- package/lib/morphology/close.js +41 -0
- package/lib/morphology/close.js.map +1 -0
- package/lib/morphology/dilate.d.ts +20 -0
- package/lib/morphology/dilate.d.ts.map +1 -0
- package/lib/morphology/dilate.js +199 -0
- package/lib/morphology/dilate.js.map +1 -0
- package/lib/morphology/erode.d.ts +20 -0
- package/lib/morphology/erode.d.ts.map +1 -0
- package/lib/morphology/erode.js +199 -0
- package/lib/morphology/erode.js.map +1 -0
- package/lib/morphology/floodFill.d.ts +22 -0
- package/lib/morphology/floodFill.d.ts.map +1 -0
- package/lib/morphology/floodFill.js +20 -0
- package/lib/morphology/floodFill.js.map +1 -0
- package/lib/morphology/index.d.ts +11 -0
- package/lib/morphology/index.d.ts.map +1 -0
- package/lib/morphology/index.js +27 -0
- package/lib/morphology/index.js.map +1 -0
- package/lib/morphology/morphologicalGradient.d.ts +19 -0
- package/lib/morphology/morphologicalGradient.d.ts.map +1 -0
- package/lib/morphology/morphologicalGradient.js +43 -0
- package/lib/morphology/morphologicalGradient.js.map +1 -0
- package/lib/morphology/open.d.ts +19 -0
- package/lib/morphology/open.d.ts.map +1 -0
- package/lib/morphology/open.js +43 -0
- package/lib/morphology/open.js.map +1 -0
- package/lib/morphology/topHat.d.ts +19 -0
- package/lib/morphology/topHat.d.ts.map +1 -0
- package/lib/morphology/topHat.js +44 -0
- package/lib/morphology/topHat.js.map +1 -0
- package/lib/operations/convertColor.d.ts +32 -0
- package/lib/operations/convertColor.d.ts.map +1 -0
- package/lib/operations/convertColor.js +148 -0
- package/lib/operations/convertColor.js.map +1 -0
- package/lib/operations/convertDepth.d.ts +10 -0
- package/lib/operations/convertDepth.d.ts.map +1 -0
- package/lib/operations/convertDepth.js +60 -0
- package/lib/operations/convertDepth.js.map +1 -0
- package/lib/operations/copyTo.d.ts +29 -0
- package/lib/operations/copyTo.d.ts.map +1 -0
- package/lib/operations/copyTo.js +51 -0
- package/lib/operations/copyTo.js.map +1 -0
- package/lib/operations/grey.d.ts +50 -0
- package/lib/operations/grey.d.ts.map +1 -0
- package/lib/operations/grey.js +86 -0
- package/lib/operations/grey.js.map +1 -0
- package/lib/operations/greyAlgorithms.d.ts +149 -0
- package/lib/operations/greyAlgorithms.d.ts.map +1 -0
- package/lib/operations/greyAlgorithms.js +242 -0
- package/lib/operations/greyAlgorithms.js.map +1 -0
- package/lib/operations/index.d.ts +8 -0
- package/lib/operations/index.d.ts.map +1 -0
- package/lib/operations/index.js +24 -0
- package/lib/operations/index.js.map +1 -0
- package/lib/operations/merge.d.ts +9 -0
- package/lib/operations/merge.d.ts.map +1 -0
- package/lib/operations/merge.js +51 -0
- package/lib/operations/merge.js.map +1 -0
- package/lib/operations/split.d.ts +9 -0
- package/lib/operations/split.d.ts.map +1 -0
- package/lib/operations/split.js +23 -0
- package/lib/operations/split.js.map +1 -0
- package/lib/operations/threshold.d.ts +58 -0
- package/lib/operations/threshold.d.ts.map +1 -0
- package/lib/operations/threshold.js +114 -0
- package/lib/operations/threshold.js.map +1 -0
- package/lib/operations/thresholds/huang.d.ts +8 -0
- package/lib/operations/thresholds/huang.d.ts.map +1 -0
- package/lib/operations/thresholds/huang.js +81 -0
- package/lib/operations/thresholds/huang.js.map +1 -0
- package/lib/operations/thresholds/intermodes.d.ts +8 -0
- package/lib/operations/thresholds/intermodes.d.ts.map +1 -0
- package/lib/operations/thresholds/intermodes.js +62 -0
- package/lib/operations/thresholds/intermodes.js.map +1 -0
- package/lib/operations/thresholds/isodata.d.ts +8 -0
- package/lib/operations/thresholds/isodata.d.ts.map +1 -0
- package/lib/operations/thresholds/isodata.js +55 -0
- package/lib/operations/thresholds/isodata.js.map +1 -0
- package/lib/operations/thresholds/li.d.ts +9 -0
- package/lib/operations/thresholds/li.d.ts.map +1 -0
- package/lib/operations/thresholds/li.js +77 -0
- package/lib/operations/thresholds/li.js.map +1 -0
- package/lib/operations/thresholds/maxEntropy.d.ts +9 -0
- package/lib/operations/thresholds/maxEntropy.d.ts.map +1 -0
- package/lib/operations/thresholds/maxEntropy.js +80 -0
- package/lib/operations/thresholds/maxEntropy.js.map +1 -0
- package/lib/operations/thresholds/mean.d.ts +9 -0
- package/lib/operations/thresholds/mean.d.ts.map +1 -0
- package/lib/operations/thresholds/mean.js +26 -0
- package/lib/operations/thresholds/mean.js.map +1 -0
- package/lib/operations/thresholds/minError.d.ts +9 -0
- package/lib/operations/thresholds/minError.d.ts.map +1 -0
- package/lib/operations/thresholds/minError.js +90 -0
- package/lib/operations/thresholds/minError.js.map +1 -0
- package/lib/operations/thresholds/minimum.d.ts +8 -0
- package/lib/operations/thresholds/minimum.d.ts.map +1 -0
- package/lib/operations/thresholds/minimum.js +78 -0
- package/lib/operations/thresholds/minimum.js.map +1 -0
- package/lib/operations/thresholds/moments.d.ts +9 -0
- package/lib/operations/thresholds/moments.d.ts.map +1 -0
- package/lib/operations/thresholds/moments.js +62 -0
- package/lib/operations/thresholds/moments.js.map +1 -0
- package/lib/operations/thresholds/otsu.d.ts +9 -0
- package/lib/operations/thresholds/otsu.d.ts.map +1 -0
- package/lib/operations/thresholds/otsu.js +43 -0
- package/lib/operations/thresholds/otsu.js.map +1 -0
- package/lib/operations/thresholds/percentile.d.ts +8 -0
- package/lib/operations/thresholds/percentile.d.ts.map +1 -0
- package/lib/operations/thresholds/percentile.js +39 -0
- package/lib/operations/thresholds/percentile.js.map +1 -0
- package/lib/operations/thresholds/renyiEntropy.d.ts +9 -0
- package/lib/operations/thresholds/renyiEntropy.d.ts.map +1 -0
- package/lib/operations/thresholds/renyiEntropy.js +133 -0
- package/lib/operations/thresholds/renyiEntropy.js.map +1 -0
- package/lib/operations/thresholds/shanbhag.d.ts +10 -0
- package/lib/operations/thresholds/shanbhag.d.ts.map +1 -0
- package/lib/operations/thresholds/shanbhag.js +77 -0
- package/lib/operations/thresholds/shanbhag.js.map +1 -0
- package/lib/operations/thresholds/triangle.d.ts +8 -0
- package/lib/operations/thresholds/triangle.d.ts.map +1 -0
- package/lib/operations/thresholds/triangle.js +113 -0
- package/lib/operations/thresholds/triangle.js.map +1 -0
- package/lib/operations/thresholds/yen.d.ts +9 -0
- package/lib/operations/thresholds/yen.d.ts.map +1 -0
- package/lib/operations/thresholds/yen.js +62 -0
- package/lib/operations/thresholds/yen.js.map +1 -0
- package/lib/roi/RoiManager.d.ts +32 -0
- package/lib/roi/RoiManager.d.ts.map +1 -0
- package/lib/roi/RoiManager.js +10 -0
- package/lib/roi/RoiManager.js.map +1 -0
- package/lib/roi/RoiMapManager.d.ts +33 -0
- package/lib/roi/RoiMapManager.d.ts.map +1 -0
- package/lib/roi/RoiMapManager.js +17 -0
- package/lib/roi/RoiMapManager.js.map +1 -0
- package/lib/roi/colorRois.d.ts +39 -0
- package/lib/roi/colorRois.d.ts.map +1 -0
- package/lib/roi/colorRois.js +48 -0
- package/lib/roi/colorRois.js.map +1 -0
- package/lib/roi/fromMask.d.ts +19 -0
- package/lib/roi/fromMask.d.ts.map +1 -0
- package/lib/roi/fromMask.js +148 -0
- package/lib/roi/fromMask.js.map +1 -0
- package/lib/roi/index.d.ts +5 -0
- package/lib/roi/index.d.ts.map +1 -0
- package/lib/roi/index.js +21 -0
- package/lib/roi/index.js.map +1 -0
- package/lib/roi/utils/colorMaps/getBinaryMap.d.ts +37 -0
- package/lib/roi/utils/colorMaps/getBinaryMap.d.ts.map +1 -0
- package/lib/roi/utils/colorMaps/getBinaryMap.js +34 -0
- package/lib/roi/utils/colorMaps/getBinaryMap.js.map +1 -0
- package/lib/roi/utils/colorMaps/getRainbowMap.d.ts +25 -0
- package/lib/roi/utils/colorMaps/getRainbowMap.d.ts.map +1 -0
- package/lib/roi/utils/colorMaps/getRainbowMap.js +51 -0
- package/lib/roi/utils/colorMaps/getRainbowMap.js.map +1 -0
- package/lib/roi/utils/colorMaps/getSaturationMap.d.ts +42 -0
- package/lib/roi/utils/colorMaps/getSaturationMap.d.ts.map +1 -0
- package/lib/roi/utils/colorMaps/getSaturationMap.js +39 -0
- package/lib/roi/utils/colorMaps/getSaturationMap.js.map +1 -0
- package/lib/roi/utils/constants.d.ts +4 -0
- package/lib/roi/utils/constants.d.ts.map +1 -0
- package/lib/roi/utils/constants.js +7 -0
- package/lib/roi/utils/constants.js.map +1 -0
- package/lib/roi/utils/getColorMap.d.ts +32 -0
- package/lib/roi/utils/getColorMap.d.ts.map +1 -0
- package/lib/roi/utils/getColorMap.js +28 -0
- package/lib/roi/utils/getColorMap.js.map +1 -0
- package/lib/roi/utils/hsvToRgb.d.ts +21 -0
- package/lib/roi/utils/hsvToRgb.d.ts.map +1 -0
- package/lib/roi/utils/hsvToRgb.js +58 -0
- package/lib/roi/utils/hsvToRgb.js.map +1 -0
- package/lib/roi/utils/rgbToNumber.d.ts +8 -0
- package/lib/roi/utils/rgbToNumber.d.ts.map +1 -0
- package/lib/roi/utils/rgbToNumber.js +14 -0
- package/lib/roi/utils/rgbToNumber.js.map +1 -0
- package/lib/save/encode.d.ts +38 -0
- package/lib/save/encode.d.ts.map +1 -0
- package/lib/save/encode.js +33 -0
- package/lib/save/encode.js.map +1 -0
- package/lib/save/encodeJpeg.d.ts +18 -0
- package/lib/save/encodeJpeg.d.ts.map +1 -0
- package/lib/save/encodeJpeg.js +26 -0
- package/lib/save/encodeJpeg.js.map +1 -0
- package/lib/save/encodePng.d.ts +12 -0
- package/lib/save/encodePng.d.ts.map +1 -0
- package/lib/save/encodePng.js +16 -0
- package/lib/save/encodePng.js.map +1 -0
- package/lib/save/index.d.ts +6 -0
- package/lib/save/index.d.ts.map +1 -0
- package/lib/save/index.js +22 -0
- package/lib/save/index.js.map +1 -0
- package/lib/save/write.d.ts +27 -0
- package/lib/save/write.d.ts.map +1 -0
- package/lib/save/write.js +73 -0
- package/lib/save/write.js.map +1 -0
- package/lib/save/writeCanvas.d.ts +42 -0
- package/lib/save/writeCanvas.d.ts.map +1 -0
- package/lib/save/writeCanvas.js +29 -0
- package/lib/save/writeCanvas.js.map +1 -0
- package/lib/utils/boolToNumber.d.ts +9 -0
- package/lib/utils/boolToNumber.d.ts.map +1 -0
- package/lib/utils/boolToNumber.js +21 -0
- package/lib/utils/boolToNumber.js.map +1 -0
- package/lib/utils/borderIterator.d.ts +9 -0
- package/lib/utils/borderIterator.d.ts.map +1 -0
- package/lib/utils/borderIterator.js +25 -0
- package/lib/utils/borderIterator.js.map +1 -0
- package/lib/utils/checkKernel.d.ts +8 -0
- package/lib/utils/checkKernel.d.ts.map +1 -0
- package/lib/utils/checkKernel.js +16 -0
- package/lib/utils/checkKernel.js.map +1 -0
- package/lib/utils/checkProcessable.d.ts +18 -0
- package/lib/utils/checkProcessable.d.ts.map +1 -0
- package/lib/utils/checkProcessable.js +65 -0
- package/lib/utils/checkProcessable.js.map +1 -0
- package/lib/utils/clamp.d.ts +10 -0
- package/lib/utils/clamp.d.ts.map +1 -0
- package/lib/utils/clamp.js +38 -0
- package/lib/utils/clamp.js.map +1 -0
- package/lib/utils/colorModels.d.ts +15 -0
- package/lib/utils/colorModels.d.ts.map +1 -0
- package/lib/utils/colorModels.js +39 -0
- package/lib/utils/colorModels.js.map +1 -0
- package/lib/utils/copyData.d.ts +4 -0
- package/lib/utils/copyData.d.ts.map +1 -0
- package/lib/utils/copyData.js +20 -0
- package/lib/utils/copyData.js.map +1 -0
- package/lib/utils/getIndex.d.ts +12 -0
- package/lib/utils/getIndex.d.ts.map +1 -0
- package/lib/utils/getIndex.js +17 -0
- package/lib/utils/getIndex.js.map +1 -0
- package/lib/utils/getOutputImage.d.ts +61 -0
- package/lib/utils/getOutputImage.d.ts.map +1 -0
- package/lib/utils/getOutputImage.js +150 -0
- package/lib/utils/getOutputImage.js.map +1 -0
- package/lib/utils/interpolateBorder.d.ts +44 -0
- package/lib/utils/interpolateBorder.d.ts.map +1 -0
- package/lib/utils/interpolateBorder.js +143 -0
- package/lib/utils/interpolateBorder.js.map +1 -0
- package/lib/utils/interpolatePixel.d.ts +18 -0
- package/lib/utils/interpolatePixel.d.ts.map +1 -0
- package/lib/utils/interpolatePixel.js +122 -0
- package/lib/utils/interpolatePixel.js.map +1 -0
- package/lib/utils/kernels.d.ts +13 -0
- package/lib/utils/kernels.d.ts.map +1 -0
- package/lib/utils/kernels.js +66 -0
- package/lib/utils/kernels.js.map +1 -0
- package/lib/utils/kinds.d.ts +9 -0
- package/lib/utils/kinds.d.ts.map +1 -0
- package/lib/utils/kinds.js +23 -0
- package/lib/utils/kinds.js.map +1 -0
- package/lib/utils/round.d.ts +2 -0
- package/lib/utils/round.d.ts.map +1 -0
- package/lib/utils/round.js +11 -0
- package/lib/utils/round.js.map +1 -0
- package/lib/utils/validators.d.ts +23 -0
- package/lib/utils/validators.d.ts.map +1 -0
- package/lib/utils/validators.js +40 -0
- package/lib/utils/validators.js.map +1 -0
- package/lib-esm/IJS.d.ts +316 -0
- package/lib-esm/IJS.d.ts.map +1 -0
- package/lib-esm/IJS.js +526 -0
- package/lib-esm/IJS.js.map +1 -0
- package/lib-esm/Mask.d.ts +257 -0
- package/lib-esm/Mask.d.ts.map +1 -0
- package/lib-esm/Mask.js +334 -0
- package/lib-esm/Mask.js.map +1 -0
- package/lib-esm/compute/histogram.d.ts +20 -0
- package/lib-esm/compute/histogram.d.ts.map +1 -0
- package/lib-esm/compute/histogram.js +24 -0
- package/lib-esm/compute/histogram.js.map +1 -0
- package/lib-esm/compute/index.d.ts +2 -0
- package/lib-esm/compute/index.d.ts.map +1 -0
- package/lib-esm/compute/index.js +2 -0
- package/lib-esm/compute/index.js.map +1 -0
- package/lib-esm/filters/and.d.ts +17 -0
- package/lib-esm/filters/and.d.ts.map +1 -0
- package/lib-esm/filters/and.js +25 -0
- package/lib-esm/filters/and.js.map +1 -0
- package/lib-esm/filters/blur.d.ts +37 -0
- package/lib-esm/filters/blur.d.ts.map +1 -0
- package/lib-esm/filters/blur.js +18 -0
- package/lib-esm/filters/blur.js.map +1 -0
- package/lib-esm/filters/convolution.d.ts +79 -0
- package/lib-esm/filters/convolution.d.ts.map +1 -0
- package/lib-esm/filters/convolution.js +189 -0
- package/lib-esm/filters/convolution.js.map +1 -0
- package/lib-esm/filters/derivativeFilter.d.ts +40 -0
- package/lib-esm/filters/derivativeFilter.d.ts.map +1 -0
- package/lib-esm/filters/derivativeFilter.js +38 -0
- package/lib-esm/filters/derivativeFilter.js.map +1 -0
- package/lib-esm/filters/gaussianBlur.d.ts +59 -0
- package/lib-esm/filters/gaussianBlur.d.ts.map +1 -0
- package/lib-esm/filters/gaussianBlur.js +55 -0
- package/lib-esm/filters/gaussianBlur.js.map +1 -0
- package/lib-esm/filters/gradientFilter.d.ts +54 -0
- package/lib-esm/filters/gradientFilter.d.ts.map +1 -0
- package/lib-esm/filters/gradientFilter.js +51 -0
- package/lib-esm/filters/gradientFilter.js.map +1 -0
- package/lib-esm/filters/hypotenuse.d.ts +23 -0
- package/lib-esm/filters/hypotenuse.d.ts.map +1 -0
- package/lib-esm/filters/hypotenuse.js +39 -0
- package/lib-esm/filters/hypotenuse.js.map +1 -0
- package/lib-esm/filters/index.d.ts +11 -0
- package/lib-esm/filters/index.d.ts.map +1 -0
- package/lib-esm/filters/index.js +11 -0
- package/lib-esm/filters/index.js.map +1 -0
- package/lib-esm/filters/invert.d.ts +11 -0
- package/lib-esm/filters/invert.d.ts.map +1 -0
- package/lib-esm/filters/invert.js +33 -0
- package/lib-esm/filters/invert.js.map +1 -0
- package/lib-esm/filters/or.d.ts +17 -0
- package/lib-esm/filters/or.d.ts.map +1 -0
- package/lib-esm/filters/or.js +25 -0
- package/lib-esm/filters/or.js.map +1 -0
- package/lib-esm/filters/subtractImage.d.ts +13 -0
- package/lib-esm/filters/subtractImage.d.ts.map +1 -0
- package/lib-esm/filters/subtractImage.js +57 -0
- package/lib-esm/filters/subtractImage.js.map +1 -0
- package/lib-esm/geometry/index.d.ts +4 -0
- package/lib-esm/geometry/index.d.ts.map +1 -0
- package/lib-esm/geometry/index.js +4 -0
- package/lib-esm/geometry/index.js.map +1 -0
- package/lib-esm/geometry/resize.d.ts +52 -0
- package/lib-esm/geometry/resize.d.ts.map +1 -0
- package/lib-esm/geometry/resize.js +103 -0
- package/lib-esm/geometry/resize.js.map +1 -0
- package/lib-esm/geometry/rotate.d.ts +54 -0
- package/lib-esm/geometry/rotate.d.ts.map +1 -0
- package/lib-esm/geometry/rotate.js +40 -0
- package/lib-esm/geometry/rotate.js.map +1 -0
- package/lib-esm/geometry/transform.d.ts +46 -0
- package/lib-esm/geometry/transform.d.ts.map +1 -0
- package/lib-esm/geometry/transform.js +91 -0
- package/lib-esm/geometry/transform.js.map +1 -0
- package/lib-esm/index.d.ts +10 -0
- package/lib-esm/index.d.ts.map +1 -0
- package/lib-esm/index.js +10 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/load/decode.d.ts +10 -0
- package/lib-esm/load/decode.d.ts.map +1 -0
- package/lib-esm/load/decode.js +26 -0
- package/lib-esm/load/decode.js.map +1 -0
- package/lib-esm/load/decodeJpeg.d.ts +9 -0
- package/lib-esm/load/decodeJpeg.d.ts.map +1 -0
- package/lib-esm/load/decodeJpeg.js +16 -0
- package/lib-esm/load/decodeJpeg.js.map +1 -0
- package/lib-esm/load/decodePng.d.ts +9 -0
- package/lib-esm/load/decodePng.d.ts.map +1 -0
- package/lib-esm/load/decodePng.js +68 -0
- package/lib-esm/load/decodePng.js.map +1 -0
- package/lib-esm/load/decodeTiff.d.ts +9 -0
- package/lib-esm/load/decodeTiff.d.ts.map +1 -0
- package/lib-esm/load/decodeTiff.js +60 -0
- package/lib-esm/load/decodeTiff.js.map +1 -0
- package/lib-esm/load/index.d.ts +8 -0
- package/lib-esm/load/index.d.ts.map +1 -0
- package/lib-esm/load/index.js +8 -0
- package/lib-esm/load/index.js.map +1 -0
- package/lib-esm/load/read.d.ts +17 -0
- package/lib-esm/load/read.d.ts.map +1 -0
- package/lib-esm/load/read.js +23 -0
- package/lib-esm/load/read.js.map +1 -0
- package/lib-esm/load/readCanvas.d.ts +3 -0
- package/lib-esm/load/readCanvas.d.ts.map +1 -0
- package/lib-esm/load/readCanvas.js +13 -0
- package/lib-esm/load/readCanvas.js.map +1 -0
- package/lib-esm/load/readImg.d.ts +3 -0
- package/lib-esm/load/readImg.d.ts.map +1 -0
- package/lib-esm/load/readImg.js +13 -0
- package/lib-esm/load/readImg.js.map +1 -0
- package/lib-esm/morphology/bottomHat.d.ts +19 -0
- package/lib-esm/morphology/bottomHat.d.ts.map +1 -0
- package/lib-esm/morphology/bottomHat.js +39 -0
- package/lib-esm/morphology/bottomHat.js.map +1 -0
- package/lib-esm/morphology/cannyEdgeDetector.d.ts +49 -0
- package/lib-esm/morphology/cannyEdgeDetector.d.ts.map +1 -0
- package/lib-esm/morphology/cannyEdgeDetector.js +149 -0
- package/lib-esm/morphology/cannyEdgeDetector.js.map +1 -0
- package/lib-esm/morphology/clearBorder.d.ts +22 -0
- package/lib-esm/morphology/clearBorder.d.ts.map +1 -0
- package/lib-esm/morphology/clearBorder.js +85 -0
- package/lib-esm/morphology/clearBorder.js.map +1 -0
- package/lib-esm/morphology/close.d.ts +19 -0
- package/lib-esm/morphology/close.d.ts.map +1 -0
- package/lib-esm/morphology/close.js +34 -0
- package/lib-esm/morphology/close.js.map +1 -0
- package/lib-esm/morphology/dilate.d.ts +20 -0
- package/lib-esm/morphology/dilate.d.ts.map +1 -0
- package/lib-esm/morphology/dilate.js +192 -0
- package/lib-esm/morphology/dilate.js.map +1 -0
- package/lib-esm/morphology/erode.d.ts +20 -0
- package/lib-esm/morphology/erode.d.ts.map +1 -0
- package/lib-esm/morphology/erode.js +192 -0
- package/lib-esm/morphology/erode.js.map +1 -0
- package/lib-esm/morphology/floodFill.d.ts +22 -0
- package/lib-esm/morphology/floodFill.d.ts.map +1 -0
- package/lib-esm/morphology/floodFill.js +16 -0
- package/lib-esm/morphology/floodFill.js.map +1 -0
- package/lib-esm/morphology/index.d.ts +11 -0
- package/lib-esm/morphology/index.d.ts.map +1 -0
- package/lib-esm/morphology/index.js +11 -0
- package/lib-esm/morphology/index.js.map +1 -0
- package/lib-esm/morphology/morphologicalGradient.d.ts +19 -0
- package/lib-esm/morphology/morphologicalGradient.d.ts.map +1 -0
- package/lib-esm/morphology/morphologicalGradient.js +36 -0
- package/lib-esm/morphology/morphologicalGradient.js.map +1 -0
- package/lib-esm/morphology/open.d.ts +19 -0
- package/lib-esm/morphology/open.d.ts.map +1 -0
- package/lib-esm/morphology/open.js +36 -0
- package/lib-esm/morphology/open.js.map +1 -0
- package/lib-esm/morphology/topHat.d.ts +19 -0
- package/lib-esm/morphology/topHat.d.ts.map +1 -0
- package/lib-esm/morphology/topHat.js +37 -0
- package/lib-esm/morphology/topHat.js.map +1 -0
- package/lib-esm/operations/convertColor.d.ts +32 -0
- package/lib-esm/operations/convertColor.d.ts.map +1 -0
- package/lib-esm/operations/convertColor.js +142 -0
- package/lib-esm/operations/convertColor.js.map +1 -0
- package/lib-esm/operations/convertDepth.d.ts +10 -0
- package/lib-esm/operations/convertDepth.d.ts.map +1 -0
- package/lib-esm/operations/convertDepth.js +56 -0
- package/lib-esm/operations/convertDepth.js.map +1 -0
- package/lib-esm/operations/copyTo.d.ts +29 -0
- package/lib-esm/operations/copyTo.d.ts.map +1 -0
- package/lib-esm/operations/copyTo.js +48 -0
- package/lib-esm/operations/copyTo.js.map +1 -0
- package/lib-esm/operations/grey.d.ts +50 -0
- package/lib-esm/operations/grey.d.ts.map +1 -0
- package/lib-esm/operations/grey.js +60 -0
- package/lib-esm/operations/grey.js.map +1 -0
- package/lib-esm/operations/greyAlgorithms.d.ts +149 -0
- package/lib-esm/operations/greyAlgorithms.d.ts.map +1 -0
- package/lib-esm/operations/greyAlgorithms.js +223 -0
- package/lib-esm/operations/greyAlgorithms.js.map +1 -0
- package/lib-esm/operations/index.d.ts +8 -0
- package/lib-esm/operations/index.d.ts.map +1 -0
- package/lib-esm/operations/index.js +8 -0
- package/lib-esm/operations/index.js.map +1 -0
- package/lib-esm/operations/merge.d.ts +9 -0
- package/lib-esm/operations/merge.d.ts.map +1 -0
- package/lib-esm/operations/merge.js +47 -0
- package/lib-esm/operations/merge.js.map +1 -0
- package/lib-esm/operations/split.d.ts +9 -0
- package/lib-esm/operations/split.d.ts.map +1 -0
- package/lib-esm/operations/split.js +19 -0
- package/lib-esm/operations/split.js.map +1 -0
- package/lib-esm/operations/threshold.d.ts +58 -0
- package/lib-esm/operations/threshold.d.ts.map +1 -0
- package/lib-esm/operations/threshold.js +106 -0
- package/lib-esm/operations/threshold.js.map +1 -0
- package/lib-esm/operations/thresholds/huang.d.ts +8 -0
- package/lib-esm/operations/thresholds/huang.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/huang.js +78 -0
- package/lib-esm/operations/thresholds/huang.js.map +1 -0
- package/lib-esm/operations/thresholds/intermodes.d.ts +8 -0
- package/lib-esm/operations/thresholds/intermodes.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/intermodes.js +59 -0
- package/lib-esm/operations/thresholds/intermodes.js.map +1 -0
- package/lib-esm/operations/thresholds/isodata.d.ts +8 -0
- package/lib-esm/operations/thresholds/isodata.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/isodata.js +52 -0
- package/lib-esm/operations/thresholds/isodata.js.map +1 -0
- package/lib-esm/operations/thresholds/li.d.ts +9 -0
- package/lib-esm/operations/thresholds/li.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/li.js +74 -0
- package/lib-esm/operations/thresholds/li.js.map +1 -0
- package/lib-esm/operations/thresholds/maxEntropy.d.ts +9 -0
- package/lib-esm/operations/thresholds/maxEntropy.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/maxEntropy.js +77 -0
- package/lib-esm/operations/thresholds/maxEntropy.js.map +1 -0
- package/lib-esm/operations/thresholds/mean.d.ts +9 -0
- package/lib-esm/operations/thresholds/mean.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/mean.js +23 -0
- package/lib-esm/operations/thresholds/mean.js.map +1 -0
- package/lib-esm/operations/thresholds/minError.d.ts +9 -0
- package/lib-esm/operations/thresholds/minError.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/minError.js +87 -0
- package/lib-esm/operations/thresholds/minError.js.map +1 -0
- package/lib-esm/operations/thresholds/minimum.d.ts +8 -0
- package/lib-esm/operations/thresholds/minimum.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/minimum.js +75 -0
- package/lib-esm/operations/thresholds/minimum.js.map +1 -0
- package/lib-esm/operations/thresholds/moments.d.ts +9 -0
- package/lib-esm/operations/thresholds/moments.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/moments.js +59 -0
- package/lib-esm/operations/thresholds/moments.js.map +1 -0
- package/lib-esm/operations/thresholds/otsu.d.ts +9 -0
- package/lib-esm/operations/thresholds/otsu.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/otsu.js +39 -0
- package/lib-esm/operations/thresholds/otsu.js.map +1 -0
- package/lib-esm/operations/thresholds/percentile.d.ts +8 -0
- package/lib-esm/operations/thresholds/percentile.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/percentile.js +36 -0
- package/lib-esm/operations/thresholds/percentile.js.map +1 -0
- package/lib-esm/operations/thresholds/renyiEntropy.d.ts +9 -0
- package/lib-esm/operations/thresholds/renyiEntropy.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/renyiEntropy.js +130 -0
- package/lib-esm/operations/thresholds/renyiEntropy.js.map +1 -0
- package/lib-esm/operations/thresholds/shanbhag.d.ts +10 -0
- package/lib-esm/operations/thresholds/shanbhag.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/shanbhag.js +74 -0
- package/lib-esm/operations/thresholds/shanbhag.js.map +1 -0
- package/lib-esm/operations/thresholds/triangle.d.ts +8 -0
- package/lib-esm/operations/thresholds/triangle.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/triangle.js +109 -0
- package/lib-esm/operations/thresholds/triangle.js.map +1 -0
- package/lib-esm/operations/thresholds/yen.d.ts +9 -0
- package/lib-esm/operations/thresholds/yen.d.ts.map +1 -0
- package/lib-esm/operations/thresholds/yen.js +59 -0
- package/lib-esm/operations/thresholds/yen.js.map +1 -0
- package/lib-esm/roi/RoiManager.d.ts +32 -0
- package/lib-esm/roi/RoiManager.d.ts.map +1 -0
- package/lib-esm/roi/RoiManager.js +7 -0
- package/lib-esm/roi/RoiManager.js.map +1 -0
- package/lib-esm/roi/RoiMapManager.d.ts +33 -0
- package/lib-esm/roi/RoiMapManager.d.ts.map +1 -0
- package/lib-esm/roi/RoiMapManager.js +13 -0
- package/lib-esm/roi/RoiMapManager.js.map +1 -0
- package/lib-esm/roi/colorRois.d.ts +39 -0
- package/lib-esm/roi/colorRois.d.ts.map +1 -0
- package/lib-esm/roi/colorRois.js +44 -0
- package/lib-esm/roi/colorRois.js.map +1 -0
- package/lib-esm/roi/fromMask.d.ts +19 -0
- package/lib-esm/roi/fromMask.d.ts.map +1 -0
- package/lib-esm/roi/fromMask.js +144 -0
- package/lib-esm/roi/fromMask.js.map +1 -0
- package/lib-esm/roi/index.d.ts +5 -0
- package/lib-esm/roi/index.d.ts.map +1 -0
- package/lib-esm/roi/index.js +5 -0
- package/lib-esm/roi/index.js.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getBinaryMap.d.ts +37 -0
- package/lib-esm/roi/utils/colorMaps/getBinaryMap.d.ts.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getBinaryMap.js +30 -0
- package/lib-esm/roi/utils/colorMaps/getBinaryMap.js.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getRainbowMap.d.ts +25 -0
- package/lib-esm/roi/utils/colorMaps/getRainbowMap.d.ts.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getRainbowMap.js +47 -0
- package/lib-esm/roi/utils/colorMaps/getRainbowMap.js.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getSaturationMap.d.ts +42 -0
- package/lib-esm/roi/utils/colorMaps/getSaturationMap.d.ts.map +1 -0
- package/lib-esm/roi/utils/colorMaps/getSaturationMap.js +35 -0
- package/lib-esm/roi/utils/colorMaps/getSaturationMap.js.map +1 -0
- package/lib-esm/roi/utils/constants.d.ts +4 -0
- package/lib-esm/roi/utils/constants.d.ts.map +1 -0
- package/lib-esm/roi/utils/constants.js +4 -0
- package/lib-esm/roi/utils/constants.js.map +1 -0
- package/lib-esm/roi/utils/getColorMap.d.ts +32 -0
- package/lib-esm/roi/utils/getColorMap.d.ts.map +1 -0
- package/lib-esm/roi/utils/getColorMap.js +24 -0
- package/lib-esm/roi/utils/getColorMap.js.map +1 -0
- package/lib-esm/roi/utils/hsvToRgb.d.ts +21 -0
- package/lib-esm/roi/utils/hsvToRgb.d.ts.map +1 -0
- package/lib-esm/roi/utils/hsvToRgb.js +54 -0
- package/lib-esm/roi/utils/hsvToRgb.js.map +1 -0
- package/lib-esm/roi/utils/rgbToNumber.d.ts +8 -0
- package/lib-esm/roi/utils/rgbToNumber.d.ts.map +1 -0
- package/lib-esm/roi/utils/rgbToNumber.js +10 -0
- package/lib-esm/roi/utils/rgbToNumber.js.map +1 -0
- package/lib-esm/save/encode.d.ts +38 -0
- package/lib-esm/save/encode.d.ts.map +1 -0
- package/lib-esm/save/encode.js +29 -0
- package/lib-esm/save/encode.js.map +1 -0
- package/lib-esm/save/encodeJpeg.d.ts +18 -0
- package/lib-esm/save/encodeJpeg.d.ts.map +1 -0
- package/lib-esm/save/encodeJpeg.js +22 -0
- package/lib-esm/save/encodeJpeg.js.map +1 -0
- package/lib-esm/save/encodePng.d.ts +12 -0
- package/lib-esm/save/encodePng.d.ts.map +1 -0
- package/lib-esm/save/encodePng.js +12 -0
- package/lib-esm/save/encodePng.js.map +1 -0
- package/lib-esm/save/index.d.ts +6 -0
- package/lib-esm/save/index.d.ts.map +1 -0
- package/lib-esm/save/index.js +6 -0
- package/lib-esm/save/index.js.map +1 -0
- package/lib-esm/save/write.d.ts +27 -0
- package/lib-esm/save/write.d.ts.map +1 -0
- package/lib-esm/save/write.js +65 -0
- package/lib-esm/save/write.js.map +1 -0
- package/lib-esm/save/writeCanvas.d.ts +42 -0
- package/lib-esm/save/writeCanvas.d.ts.map +1 -0
- package/lib-esm/save/writeCanvas.js +25 -0
- package/lib-esm/save/writeCanvas.js.map +1 -0
- package/lib-esm/utils/boolToNumber.d.ts +9 -0
- package/lib-esm/utils/boolToNumber.d.ts.map +1 -0
- package/lib-esm/utils/boolToNumber.js +17 -0
- package/lib-esm/utils/boolToNumber.js.map +1 -0
- package/lib-esm/utils/borderIterator.d.ts +9 -0
- package/lib-esm/utils/borderIterator.d.ts.map +1 -0
- package/lib-esm/utils/borderIterator.js +21 -0
- package/lib-esm/utils/borderIterator.js.map +1 -0
- package/lib-esm/utils/checkKernel.d.ts +8 -0
- package/lib-esm/utils/checkKernel.d.ts.map +1 -0
- package/lib-esm/utils/checkKernel.js +12 -0
- package/lib-esm/utils/checkKernel.js.map +1 -0
- package/lib-esm/utils/checkProcessable.d.ts +18 -0
- package/lib-esm/utils/checkProcessable.d.ts.map +1 -0
- package/lib-esm/utils/checkProcessable.js +62 -0
- package/lib-esm/utils/checkProcessable.js.map +1 -0
- package/lib-esm/utils/clamp.d.ts +10 -0
- package/lib-esm/utils/clamp.d.ts.map +1 -0
- package/lib-esm/utils/clamp.js +34 -0
- package/lib-esm/utils/clamp.js.map +1 -0
- package/lib-esm/utils/colorModels.d.ts +15 -0
- package/lib-esm/utils/colorModels.d.ts.map +1 -0
- package/lib-esm/utils/colorModels.js +36 -0
- package/lib-esm/utils/colorModels.js.map +1 -0
- package/lib-esm/utils/copyData.d.ts +4 -0
- package/lib-esm/utils/copyData.d.ts.map +1 -0
- package/lib-esm/utils/copyData.js +16 -0
- package/lib-esm/utils/copyData.js.map +1 -0
- package/lib-esm/utils/getIndex.d.ts +12 -0
- package/lib-esm/utils/getIndex.d.ts.map +1 -0
- package/lib-esm/utils/getIndex.js +13 -0
- package/lib-esm/utils/getIndex.js.map +1 -0
- package/lib-esm/utils/getOutputImage.d.ts +61 -0
- package/lib-esm/utils/getOutputImage.d.ts.map +1 -0
- package/lib-esm/utils/getOutputImage.js +143 -0
- package/lib-esm/utils/getOutputImage.js.map +1 -0
- package/lib-esm/utils/interpolateBorder.d.ts +44 -0
- package/lib-esm/utils/interpolateBorder.d.ts.map +1 -0
- package/lib-esm/utils/interpolateBorder.js +134 -0
- package/lib-esm/utils/interpolateBorder.js.map +1 -0
- package/lib-esm/utils/interpolatePixel.d.ts +18 -0
- package/lib-esm/utils/interpolatePixel.d.ts.map +1 -0
- package/lib-esm/utils/interpolatePixel.js +118 -0
- package/lib-esm/utils/interpolatePixel.js.map +1 -0
- package/lib-esm/utils/kernels.d.ts +13 -0
- package/lib-esm/utils/kernels.d.ts.map +1 -0
- package/lib-esm/utils/kernels.js +63 -0
- package/lib-esm/utils/kernels.js.map +1 -0
- package/lib-esm/utils/kinds.d.ts +9 -0
- package/lib-esm/utils/kinds.d.ts.map +1 -0
- package/lib-esm/utils/kinds.js +20 -0
- package/lib-esm/utils/kinds.js.map +1 -0
- package/lib-esm/utils/round.d.ts +2 -0
- package/lib-esm/utils/round.d.ts.map +1 -0
- package/lib-esm/utils/round.js +7 -0
- package/lib-esm/utils/round.js.map +1 -0
- package/lib-esm/utils/validators.d.ts +23 -0
- package/lib-esm/utils/validators.d.ts.map +1 -0
- package/lib-esm/utils/validators.js +34 -0
- package/lib-esm/utils/validators.js.map +1 -0
- package/package.json +79 -0
- package/src/IJS.ts +758 -0
- package/src/Mask.ts +476 -0
- package/src/compute/histogram.ts +39 -0
- package/src/compute/index.ts +1 -0
- package/src/filters/and.ts +34 -0
- package/src/filters/blur.ts +49 -0
- package/src/filters/convolution.ts +357 -0
- package/src/filters/derivativeFilter.ts +77 -0
- package/src/filters/gaussianBlur.ts +124 -0
- package/src/filters/gradientFilter.ts +106 -0
- package/src/filters/hypotenuse.ts +74 -0
- package/src/filters/index.ts +10 -0
- package/src/filters/invert.ts +47 -0
- package/src/filters/or.ts +34 -0
- package/src/filters/subtractImage.ts +91 -0
- package/src/geometry/index.ts +3 -0
- package/src/geometry/resize.ts +182 -0
- package/src/geometry/rotate.ts +99 -0
- package/src/geometry/transform.ts +169 -0
- package/src/index.ts +9 -0
- package/src/load/decode.ts +33 -0
- package/src/load/decodeJpeg.ts +17 -0
- package/src/load/decodePng.ts +78 -0
- package/src/load/decodeTiff.ts +64 -0
- package/src/load/index.ts +7 -0
- package/src/load/read.ts +27 -0
- package/src/load/readCanvas.ts +17 -0
- package/src/load/readImg.ts +15 -0
- package/src/morphology/bottomHat.ts +66 -0
- package/src/morphology/cannyEdgeDetector.ts +214 -0
- package/src/morphology/clearBorder.ts +116 -0
- package/src/morphology/close.ts +61 -0
- package/src/morphology/dilate.ts +264 -0
- package/src/morphology/erode.ts +264 -0
- package/src/morphology/floodFill.ts +31 -0
- package/src/morphology/index.ts +10 -0
- package/src/morphology/morphologicalGradient.ts +69 -0
- package/src/morphology/open.ts +61 -0
- package/src/morphology/topHat.ts +64 -0
- package/src/operations/convertColor.ts +185 -0
- package/src/operations/convertDepth.ts +59 -0
- package/src/operations/copyTo.ts +107 -0
- package/src/operations/grey.ts +114 -0
- package/src/operations/greyAlgorithms.ts +265 -0
- package/src/operations/index.ts +7 -0
- package/src/operations/merge.ts +52 -0
- package/src/operations/split.ts +19 -0
- package/src/operations/threshold.ts +145 -0
- package/src/operations/thresholds/huang.ts +84 -0
- package/src/operations/thresholds/intermodes.ts +62 -0
- package/src/operations/thresholds/isodata.ts +53 -0
- package/src/operations/thresholds/li.ts +81 -0
- package/src/operations/thresholds/maxEntropy.ts +89 -0
- package/src/operations/thresholds/mean.ts +23 -0
- package/src/operations/thresholds/minError.ts +102 -0
- package/src/operations/thresholds/minimum.ts +78 -0
- package/src/operations/thresholds/moments.ts +60 -0
- package/src/operations/thresholds/otsu.ts +42 -0
- package/src/operations/thresholds/percentile.ts +40 -0
- package/src/operations/thresholds/renyiEntropy.ts +148 -0
- package/src/operations/thresholds/shanbhag.ts +82 -0
- package/src/operations/thresholds/triangle.ts +115 -0
- package/src/operations/thresholds/yen.ts +63 -0
- package/src/roi/RoiManager.ts +34 -0
- package/src/roi/RoiMapManager.ts +48 -0
- package/src/roi/colorRois.ts +69 -0
- package/src/roi/fromMask.ts +184 -0
- package/src/roi/index.ts +4 -0
- package/src/roi/utils/colorMaps/getBinaryMap.ts +72 -0
- package/src/roi/utils/colorMaps/getRainbowMap.ts +65 -0
- package/src/roi/utils/colorMaps/getSaturationMap.ts +80 -0
- package/src/roi/utils/constants.ts +3 -0
- package/src/roi/utils/getColorMap.ts +51 -0
- package/src/roi/utils/hsvToRgb.ts +62 -0
- package/src/roi/utils/rgbToNumber.ts +9 -0
- package/src/save/encode.ts +65 -0
- package/src/save/encodeJpeg.ts +37 -0
- package/src/save/encodePng.ts +16 -0
- package/src/save/index.ts +5 -0
- package/src/save/write.ts +109 -0
- package/src/save/writeCanvas.ts +82 -0
- package/src/utils/boolToNumber.ts +18 -0
- package/src/utils/borderIterator.ts +22 -0
- package/src/utils/checkKernel.ts +13 -0
- package/src/utils/checkProcessable.ts +98 -0
- package/src/utils/clamp.ts +39 -0
- package/src/utils/colorModels.ts +41 -0
- package/src/utils/copyData.ts +23 -0
- package/src/utils/getIndex.ts +19 -0
- package/src/utils/getOutputImage.ts +182 -0
- package/src/utils/interpolateBorder.ts +206 -0
- package/src/utils/interpolatePixel.ts +170 -0
- package/src/utils/kernels.ts +73 -0
- package/src/utils/kinds.ts +27 -0
- package/src/utils/round.ts +6 -0
- package/src/utils/validators.ts +43 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* see http://rsb.info.nih.gov/ij/developer/source/ij/process/AutoThresholder.java.html
|
|
3
|
+
* The method is present in: Implements Li's Minimum Cross Entropy thresholding method
|
|
4
|
+
* This implementation is based on the iterative version (Ref. 2nd reference below) of the algorithm.
|
|
5
|
+
* 1) Li, CH & Lee, CK (1993), "Minimum Cross Entropy Thresholding", Pattern Recognition 26(4): 61 625
|
|
6
|
+
* 2) Li, CH & Tam, PKS (1998), "An Iterative Algorithm for Minimum Cross Entropy Thresholding",
|
|
7
|
+
* Pattern Recognition Letters 18(8): 771-776
|
|
8
|
+
* 3) Sezgin, M & Sankur, B (2004), "Survey over Image Thresholding Techniques and Quantitative Performance
|
|
9
|
+
* Evaluation",Journal of Electronic Imaging 13(1): 146-165
|
|
10
|
+
* @param histogram - the histogram of the image
|
|
11
|
+
* @param total - the number of pixels in the image
|
|
12
|
+
* @returns {number} - the threshold
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Return a threshold for a histogram using Li algorithm.
|
|
17
|
+
*
|
|
18
|
+
* @param histogram - Image histogram.
|
|
19
|
+
* @param total - Number of pixels in the image.
|
|
20
|
+
* @returns The threshold.
|
|
21
|
+
*/
|
|
22
|
+
export default function li(histogram: Uint32Array, total: number): number {
|
|
23
|
+
let threshold;
|
|
24
|
+
let sumBack; /* sum of the background pixels at a given threshold */
|
|
25
|
+
let sumObj; /* sum of the object pixels at a given threshold */
|
|
26
|
+
let numBack; /* number of background pixels at a given threshold */
|
|
27
|
+
let numObj; /* number of object pixels at a given threshold */
|
|
28
|
+
let oldThresh;
|
|
29
|
+
let newThresh;
|
|
30
|
+
let meanBack; /* mean of the background pixels at a given threshold */
|
|
31
|
+
let meanObj; /* mean of the object pixels at a given threshold */
|
|
32
|
+
let mean; /* mean gray-level in the image */
|
|
33
|
+
const tolerance = 0.5; /* threshold tolerance */
|
|
34
|
+
let temp;
|
|
35
|
+
|
|
36
|
+
/* Calculate the mean gray-level */
|
|
37
|
+
mean = 0.0;
|
|
38
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
39
|
+
mean += ih * histogram[ih];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
mean /= total;
|
|
43
|
+
/* Initial estimate */
|
|
44
|
+
newThresh = mean;
|
|
45
|
+
|
|
46
|
+
do {
|
|
47
|
+
oldThresh = newThresh;
|
|
48
|
+
threshold = (oldThresh + 0.5) | 0; /* range */
|
|
49
|
+
|
|
50
|
+
/* Calculate the means of background and object pixels */
|
|
51
|
+
/* Background */
|
|
52
|
+
sumBack = 0;
|
|
53
|
+
numBack = 0;
|
|
54
|
+
|
|
55
|
+
for (let ih = 0; ih <= threshold; ih++) {
|
|
56
|
+
sumBack += ih * histogram[ih];
|
|
57
|
+
numBack += histogram[ih];
|
|
58
|
+
}
|
|
59
|
+
meanBack = numBack === 0 ? 0.0 : sumBack / numBack;
|
|
60
|
+
|
|
61
|
+
/* Object */
|
|
62
|
+
sumObj = 0;
|
|
63
|
+
numObj = 0;
|
|
64
|
+
for (let ih = threshold + 1; ih < histogram.length; ih++) {
|
|
65
|
+
sumObj += ih * histogram[ih];
|
|
66
|
+
numObj += histogram[ih];
|
|
67
|
+
}
|
|
68
|
+
meanObj = numObj === 0 ? 0.0 : sumObj / numObj;
|
|
69
|
+
temp = (meanBack - meanObj) / (Math.log(meanBack) - Math.log(meanObj));
|
|
70
|
+
|
|
71
|
+
if (temp < -Number.EPSILON) {
|
|
72
|
+
newThresh = (temp - 0.5) | 0;
|
|
73
|
+
} else {
|
|
74
|
+
newThresh = (temp + 0.5) | 0;
|
|
75
|
+
}
|
|
76
|
+
/* Stop the iterations when the difference between the
|
|
77
|
+
new and old threshold values is less than the tolerance */
|
|
78
|
+
} while (Math.abs(newThresh - oldThresh) > tolerance);
|
|
79
|
+
|
|
80
|
+
return threshold;
|
|
81
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* see http://rsb.info.nih.gov/ij/developer/source/ij/process/AutoThresholder.java.html
|
|
3
|
+
* The method is present in: Implements Kapur-Sahoo-Wong (Maximum Entropy) thresholding method:
|
|
4
|
+
* Kapur, JN; Sahoo, PK & Wong, ACK (1985), "A New Method for Gray-Level Picture Thresholding Using the Entropy of the Histogram",
|
|
5
|
+
* Graphical Models and Image Processing 29(3): 273-285
|
|
6
|
+
* @param histogram - the histogram of the image
|
|
7
|
+
* total - the number of pixels in the image
|
|
8
|
+
* @returns {number} - the threshold
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Return a threshold for a histogram using maximal enthropy algorithm.
|
|
13
|
+
*
|
|
14
|
+
* @param histogram - Image histogram.
|
|
15
|
+
* @param total - Number of pixels in the image.
|
|
16
|
+
* @returns The threshold.
|
|
17
|
+
*/
|
|
18
|
+
export default function maxEntropy(
|
|
19
|
+
histogram: Uint32Array,
|
|
20
|
+
total: number,
|
|
21
|
+
): number {
|
|
22
|
+
const normHisto = new Array(histogram.length); // normalized histogram
|
|
23
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
24
|
+
normHisto[ih] = histogram[ih] / total;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const P1 = new Array(histogram.length); // cumulative normalized histogram
|
|
28
|
+
const P2 = new Array(histogram.length);
|
|
29
|
+
P1[0] = normHisto[0];
|
|
30
|
+
P2[0] = 1.0 - P1[0];
|
|
31
|
+
|
|
32
|
+
for (let ih = 1; ih < histogram.length; ih++) {
|
|
33
|
+
P1[ih] = P1[ih - 1] + normHisto[ih];
|
|
34
|
+
P2[ih] = 1.0 - P1[ih];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Determine the first non-zero bin */
|
|
38
|
+
let firstBin = 0;
|
|
39
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
40
|
+
if (Math.abs(P1[ih]) >= Number.EPSILON) {
|
|
41
|
+
firstBin = ih;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Determine the last non-zero bin */
|
|
47
|
+
let lastBin = histogram.length - 1;
|
|
48
|
+
for (let ih = histogram.length - 1; ih >= firstBin; ih--) {
|
|
49
|
+
if (Math.abs(P2[ih]) >= Number.EPSILON) {
|
|
50
|
+
lastBin = ih;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Calculate the total entropy each gray-level
|
|
56
|
+
// and find the threshold that maximizes it
|
|
57
|
+
let threshold = -1;
|
|
58
|
+
let totEnt; // total entropy
|
|
59
|
+
let maxEnt = Number.MIN_VALUE; // max entropy
|
|
60
|
+
let entBack; // entropy of the background pixels at a given threshold
|
|
61
|
+
let entObj; // entropy of the object pixels at a given threshold
|
|
62
|
+
|
|
63
|
+
for (let it = firstBin; it <= lastBin; it++) {
|
|
64
|
+
/* Entropy of the background pixels */
|
|
65
|
+
entBack = 0.0;
|
|
66
|
+
for (let ih = 0; ih <= it; ih++) {
|
|
67
|
+
if (histogram[ih] !== 0) {
|
|
68
|
+
entBack -= (normHisto[ih] / P1[it]) * Math.log(normHisto[ih] / P1[it]);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Entropy of the object pixels */
|
|
73
|
+
entObj = 0.0;
|
|
74
|
+
for (let ih = it + 1; ih < histogram.length; ih++) {
|
|
75
|
+
if (histogram[ih] !== 0) {
|
|
76
|
+
entObj -= (normHisto[ih] / P2[it]) * Math.log(normHisto[ih] / P2[it]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Total entropy */
|
|
81
|
+
totEnt = entBack + entObj;
|
|
82
|
+
|
|
83
|
+
if (maxEnt < totEnt) {
|
|
84
|
+
maxEnt = totEnt;
|
|
85
|
+
threshold = it;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return threshold;
|
|
89
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The method is present in: Uses the mean of grey levels as the threshold. It is described in:
|
|
3
|
+
* Glasbey, CA (1993), "An analysis of histogram-based thresholding algorithms",
|
|
4
|
+
* CVGIP: Graphical Models and Image Processing 55: 532-537
|
|
5
|
+
* @param histogram - the histogram of the image
|
|
6
|
+
* @param total - the number of pixels in the image
|
|
7
|
+
* @returns {number} - the threshold
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Return a threshold for a histogram by making its average.
|
|
12
|
+
*
|
|
13
|
+
* @param histogram - Image histogram.
|
|
14
|
+
* @param total - Number of pixels in the image.
|
|
15
|
+
* @returns The threshold.
|
|
16
|
+
*/
|
|
17
|
+
export default function mean(histogram: Uint32Array, total: number): number {
|
|
18
|
+
let sum = 0;
|
|
19
|
+
for (let i = 0; i < histogram.length; i++) {
|
|
20
|
+
sum += i * histogram[i];
|
|
21
|
+
}
|
|
22
|
+
return Math.floor(sum / total);
|
|
23
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* see http://rsb.info.nih.gov/ij/developer/source/ij/process/AutoThresholder.java.html
|
|
3
|
+
* The method is present in: An iterative implementation of Kittler and Illingworth's Minimum Error
|
|
4
|
+
* thresholding:Kittler, J & Illingworth, J (1986), "Minimum error thresholding", Pattern Recognition 19: 41-47
|
|
5
|
+
* @param histogram - the histogram of the image
|
|
6
|
+
* @param total - the number of pixels in the image
|
|
7
|
+
* @returns {number} - the threshold
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Return a threshold for a histogram using Li algorithm.
|
|
12
|
+
*
|
|
13
|
+
* @param histogram - Image histogram.
|
|
14
|
+
* @param total - Number of pixels in the image.
|
|
15
|
+
* @returns The threshold.
|
|
16
|
+
*/
|
|
17
|
+
export default function minError(
|
|
18
|
+
histogram: Uint32Array,
|
|
19
|
+
total: number,
|
|
20
|
+
): number {
|
|
21
|
+
let threshold;
|
|
22
|
+
let Tprev = -2;
|
|
23
|
+
let mu, nu, p, q, sigma2, tau2, w0, w1, w2, sqterm, temp;
|
|
24
|
+
|
|
25
|
+
/* Calculate the mean gray-level */
|
|
26
|
+
let mean = 0.0;
|
|
27
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
28
|
+
mean += ih * histogram[ih];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
mean /= total;
|
|
32
|
+
|
|
33
|
+
threshold = mean;
|
|
34
|
+
|
|
35
|
+
while (threshold !== Tprev) {
|
|
36
|
+
// Calculate some statistics.
|
|
37
|
+
const sumA1 = sumA(histogram, threshold);
|
|
38
|
+
const sumA2 = sumA(histogram, histogram.length - 1);
|
|
39
|
+
const sumB1 = sumB(histogram, threshold);
|
|
40
|
+
const sumB2 = sumB(histogram, histogram.length - 1);
|
|
41
|
+
const sumC1 = sumC(histogram, threshold);
|
|
42
|
+
const sumC2 = sumC(histogram, histogram.length - 1);
|
|
43
|
+
|
|
44
|
+
mu = sumB1 / sumA1;
|
|
45
|
+
nu = (sumB2 - sumB1) / (sumA2 - sumA1);
|
|
46
|
+
p = sumA1 / sumA2;
|
|
47
|
+
q = (sumA2 - sumA1) / sumA2;
|
|
48
|
+
sigma2 = sumC1 / sumA1 - mu * mu;
|
|
49
|
+
tau2 = (sumC2 - sumC1) / (sumA2 - sumA1) - nu * nu;
|
|
50
|
+
|
|
51
|
+
// The terms of the quadratic equation to be solved.
|
|
52
|
+
w0 = 1.0 / sigma2 - 1.0 / tau2;
|
|
53
|
+
w1 = mu / sigma2 - nu / tau2;
|
|
54
|
+
w2 =
|
|
55
|
+
(mu * mu) / sigma2 -
|
|
56
|
+
(nu * nu) / tau2 +
|
|
57
|
+
Math.log10((sigma2 * (q * q)) / (tau2 * (p * p)));
|
|
58
|
+
|
|
59
|
+
// If the next threshold would be imaginary, return with the current one.
|
|
60
|
+
sqterm = w1 * w1 - w0 * w2;
|
|
61
|
+
if (sqterm < 0) {
|
|
62
|
+
return threshold;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The updated threshold is the integer part of the solution of the quadratic equation.
|
|
66
|
+
Tprev = threshold;
|
|
67
|
+
temp = (w1 + Math.sqrt(sqterm)) / w0;
|
|
68
|
+
|
|
69
|
+
if (isNaN(temp)) {
|
|
70
|
+
threshold = Tprev;
|
|
71
|
+
} else {
|
|
72
|
+
threshold = Math.floor(temp);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return threshold;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// aux func
|
|
79
|
+
|
|
80
|
+
function sumA(y: Uint32Array, j: number): number {
|
|
81
|
+
let x = 0;
|
|
82
|
+
for (let i = 0; i <= j; i++) {
|
|
83
|
+
x += y[i];
|
|
84
|
+
}
|
|
85
|
+
return x;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function sumB(y: Uint32Array, j: number): number {
|
|
89
|
+
let x = 0;
|
|
90
|
+
for (let i = 0; i <= j; i++) {
|
|
91
|
+
x += i * y[i];
|
|
92
|
+
}
|
|
93
|
+
return x;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function sumC(y: Uint32Array, j: number): number {
|
|
97
|
+
let x = 0;
|
|
98
|
+
for (let i = 0; i <= j; i++) {
|
|
99
|
+
x += i * i * y[i];
|
|
100
|
+
}
|
|
101
|
+
return x;
|
|
102
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// see https://github.com/fiji/Auto_Threshold/blob/master/src/main/java/fiji/threshold/Auto_Threshold.java
|
|
2
|
+
// J. M. S. Prewitt and M. L. Mendelsohn, "The analysis of cell images," in
|
|
3
|
+
// Annals of the New York Academy of Sciences, vol. 128, pp. 1035-1053, 1966.
|
|
4
|
+
// ported to ImageJ plugin by G.Landini from Antti Niemisto's Matlab code (GPL)
|
|
5
|
+
// Original Matlab code Copyright (C) 2004 Antti Niemisto
|
|
6
|
+
// See http://www.cs.tut.fi/~ant/histthresh/ for an excellent slide presentation
|
|
7
|
+
// and the original Matlab code
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Return a threshold for a histogram.
|
|
11
|
+
*
|
|
12
|
+
* @param histogram - Image histogram.
|
|
13
|
+
* @returns The threshold.
|
|
14
|
+
*/
|
|
15
|
+
export default function minimum(histogram: Uint32Array): number {
|
|
16
|
+
if (histogram.length < 2) {
|
|
17
|
+
// validate that the histogram has at least two color values
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
let iterations = 0; // number of iterations of the smoothing process
|
|
21
|
+
let threshold = -1;
|
|
22
|
+
let max = -1; // maximum color value with a greater number of pixels to 0
|
|
23
|
+
let histogramCopy = new Array(histogram.length); // a copy of the histogram
|
|
24
|
+
for (let i = 0; i < histogram.length; i++) {
|
|
25
|
+
histogramCopy[i] = histogram[i];
|
|
26
|
+
if (histogram[i] > 0) {
|
|
27
|
+
max = i;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
while (!bimodalTest(histogramCopy)) {
|
|
31
|
+
histogramCopy = smoothed(histogramCopy);
|
|
32
|
+
iterations++;
|
|
33
|
+
if (iterations > 10000) {
|
|
34
|
+
// if they occur more than 10000 iterations it returns -1
|
|
35
|
+
return threshold;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (let i = 1; i < max; i++) {
|
|
39
|
+
if (
|
|
40
|
+
histogramCopy[i - 1] > histogramCopy[i] &&
|
|
41
|
+
histogramCopy[i + 1] >= histogramCopy[i]
|
|
42
|
+
) {
|
|
43
|
+
threshold = i;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return threshold;
|
|
48
|
+
}
|
|
49
|
+
function smoothed(histogram: number[]): number[] {
|
|
50
|
+
// Smooth with a 3 point running mean filter
|
|
51
|
+
const auHistogram = new Array(histogram.length); // a copy of the histograma for the smoothing process
|
|
52
|
+
for (let i = 1; i < histogram.length - 1; i++) {
|
|
53
|
+
auHistogram[i] = (histogram[i - 1] + histogram[i] + histogram[i + 1]) / 3;
|
|
54
|
+
}
|
|
55
|
+
auHistogram[0] = (histogram[0] + histogram[1]) / 3;
|
|
56
|
+
auHistogram[histogram.length - 1] =
|
|
57
|
+
(histogram[histogram.length - 2] + histogram[histogram.length - 1]) / 3;
|
|
58
|
+
return auHistogram;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function bimodalTest(histogram: number[]): boolean {
|
|
62
|
+
// It is responsible for determining if a histogram is bimodal
|
|
63
|
+
const len = histogram.length;
|
|
64
|
+
let isBimodal = false;
|
|
65
|
+
let peaks = 0;
|
|
66
|
+
for (let k = 1; k < len - 1; k++) {
|
|
67
|
+
if (histogram[k - 1] < histogram[k] && histogram[k + 1] < histogram[k]) {
|
|
68
|
+
peaks++;
|
|
69
|
+
if (peaks > 2) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (peaks === 2) {
|
|
75
|
+
isBimodal = true;
|
|
76
|
+
}
|
|
77
|
+
return isBimodal;
|
|
78
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// see https://github.com/fiji/Auto_Threshold/blob/master/src/main/java/fiji/threshold/Auto_Threshold.java
|
|
2
|
+
// W. Tsai, "Moment-preserving thresholding: a new approach," Computer Vision,
|
|
3
|
+
// Graphics, and Image Processing, vol. 29, pp. 377-393, 1985.
|
|
4
|
+
// Ported to ImageJ plugin by G.Landini from the the open source project FOURIER 0.8
|
|
5
|
+
// by M. Emre Celebi , Department of Computer Science, Louisiana State University in Shreveport
|
|
6
|
+
// Shreveport, LA 71115, USA
|
|
7
|
+
// http://sourceforge.net/projects/fourier-ipal
|
|
8
|
+
// http://www.lsus.edu/faculty/~ecelebi/fourier.htm
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Return a threshold for a histogram.
|
|
12
|
+
*
|
|
13
|
+
* @param histogram - Image histogram.
|
|
14
|
+
* @param total - Number of pixels in the image.
|
|
15
|
+
* @returns The threshold.
|
|
16
|
+
*/
|
|
17
|
+
export default function moments(histogram: Uint32Array, total: number): number {
|
|
18
|
+
// moments
|
|
19
|
+
const m0 = 1.0;
|
|
20
|
+
let m1 = 0.0;
|
|
21
|
+
let m2 = 0.0;
|
|
22
|
+
let m3 = 0.0;
|
|
23
|
+
let sum = 0.0;
|
|
24
|
+
let threshold = -1;
|
|
25
|
+
const histogramLength = histogram.length;
|
|
26
|
+
const normalizedHistogram = new Array(histogramLength);
|
|
27
|
+
for (let i = 0; i < histogramLength; i++) {
|
|
28
|
+
normalizedHistogram[i] = histogram[i] / total;
|
|
29
|
+
}
|
|
30
|
+
/* Calculate the first, second, and third order moments */
|
|
31
|
+
for (let i = 0; i < histogramLength; i++) {
|
|
32
|
+
m1 += i * normalizedHistogram[i];
|
|
33
|
+
m2 += i * i * normalizedHistogram[i];
|
|
34
|
+
m3 += i * i * i * normalizedHistogram[i];
|
|
35
|
+
}
|
|
36
|
+
/*
|
|
37
|
+
First 4 moments of the gray-level image should match the first 4 moments
|
|
38
|
+
of the target binary image. This leads to 4 equalities whose solutions
|
|
39
|
+
are given in the Appendix of Ref. 1
|
|
40
|
+
*/
|
|
41
|
+
const cd = m0 * m2 - m1 * m1; // determinant of the matriz of hankel for moments 2x2
|
|
42
|
+
const c0 = (-m2 * m2 + m1 * m3) / cd;
|
|
43
|
+
const c1 = (m0 * -m3 + m2 * m1) / cd;
|
|
44
|
+
// new two gray values where z0<z1
|
|
45
|
+
const z0 = 0.5 * (-c1 - Math.sqrt(c1 * c1 - 4.0 * c0));
|
|
46
|
+
const z1 = 0.5 * (-c1 + Math.sqrt(c1 * c1 - 4.0 * c0));
|
|
47
|
+
const p0 =
|
|
48
|
+
(z1 - m1) /
|
|
49
|
+
(z1 -
|
|
50
|
+
z0); /* Fraction of the object pixels in the target binary image (p0z0+p1z1=m1) */
|
|
51
|
+
// The threshold is the gray-level closest to the p0-tile of the normalized histogram
|
|
52
|
+
for (let i = 0; i < histogramLength; i++) {
|
|
53
|
+
sum += normalizedHistogram[i];
|
|
54
|
+
if (sum > p0) {
|
|
55
|
+
threshold = i;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return threshold;
|
|
60
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The method is present in: Otsu, N (1979), "A threshold selection method from gray-level histograms", IEEE Trans. Sys., Man., Cyber. 9: 62-66
|
|
3
|
+
* The Otsu implementation is based on: https://en.wikipedia.org/wiki/Otsu's_method
|
|
4
|
+
* @param histogram - the histogram of the image
|
|
5
|
+
* @returns {number} - the threshold
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Return a threshold for a histogram using Otsu algorithm.
|
|
10
|
+
*
|
|
11
|
+
* @param histogramCounts - The image histogram.
|
|
12
|
+
* @param total - Total number of pixels of the image.
|
|
13
|
+
* @returns The threshold.
|
|
14
|
+
*/
|
|
15
|
+
export function otsu(histogramCounts: Uint32Array, total: number): number {
|
|
16
|
+
let sumB = 0;
|
|
17
|
+
let wB = 0;
|
|
18
|
+
let maximum = 0;
|
|
19
|
+
let level = 0;
|
|
20
|
+
|
|
21
|
+
let sum1 = 0;
|
|
22
|
+
for (let i = 0; i < histogramCounts.length; i++) {
|
|
23
|
+
sum1 += i * histogramCounts[i];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
for (let ii = 0; ii < histogramCounts.length; ii++) {
|
|
27
|
+
wB = wB + histogramCounts[ii];
|
|
28
|
+
const wF = total - wB;
|
|
29
|
+
if (wB === 0 || wF === 0) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
sumB = sumB + ii * histogramCounts[ii];
|
|
33
|
+
const mF = (sum1 - sumB) / wF;
|
|
34
|
+
const between = wB * wF * (sumB / wB - mF) * (sumB / wB - mF);
|
|
35
|
+
if (between >= maximum) {
|
|
36
|
+
level = ii;
|
|
37
|
+
maximum = between;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return level;
|
|
42
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// See http://imagej.nih.gov/ij/download/tools/source/ij/process/AutoThresholder.java
|
|
2
|
+
// W. Doyle, "Operation useful for similarity-invariant pattern recognition,"
|
|
3
|
+
// Journal of the Association for Computing Machinery, vol. 9,pp. 259-267, 1962.
|
|
4
|
+
// ported to ImageJ plugin by G.Landini from Antti Niemisto's Matlab code (GPL)
|
|
5
|
+
// Original Matlab code Copyright (C) 2004 Antti Niemisto
|
|
6
|
+
// See http://www.cs.tut.fi/~ant/histthresh/ for an excellent slide presentation
|
|
7
|
+
// and the original Matlab code.
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Return a threshold for a histogram using percentiles.
|
|
11
|
+
*
|
|
12
|
+
* @param histogram - Image histogram.
|
|
13
|
+
* @returns The threshold.
|
|
14
|
+
*/
|
|
15
|
+
export default function percentile(histogram: Uint32Array): number {
|
|
16
|
+
let threshold = -1;
|
|
17
|
+
const percentile = 0.5; // default fraction of foreground pixels
|
|
18
|
+
const avec = new Array(histogram.length);
|
|
19
|
+
|
|
20
|
+
const total = partialSum(histogram, histogram.length - 1);
|
|
21
|
+
let temp = 1.0;
|
|
22
|
+
|
|
23
|
+
for (let i = 0; i < histogram.length; i++) {
|
|
24
|
+
avec[i] = Math.abs(partialSum(histogram, i) / total - percentile);
|
|
25
|
+
if (avec[i] < temp) {
|
|
26
|
+
temp = avec[i];
|
|
27
|
+
threshold = i;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return threshold;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function partialSum(histogram: Uint32Array, endIndex: number): number {
|
|
35
|
+
let x = 0;
|
|
36
|
+
for (let i = 0; i <= endIndex; i++) {
|
|
37
|
+
x += histogram[i];
|
|
38
|
+
}
|
|
39
|
+
return x;
|
|
40
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// see https://github.com/fiji/Auto_Threshold/blob/master/src/main/java/fiji/threshold/Auto_Threshold.java
|
|
2
|
+
// Kapur J.N., Sahoo P.K., and Wong A.K.C. (1985) "A New Method for
|
|
3
|
+
// Gray-Level Picture Thresholding Using the Entropy of the Histogram"
|
|
4
|
+
// Graphical Models and Image Processing, 29(3): 273-285
|
|
5
|
+
// M. Emre Celebi
|
|
6
|
+
// 06.15.2007
|
|
7
|
+
// Ported to ImageJ plugin by G.Landini from E Celebi's fourier_0.8 routines
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Return a threshold for a histogram using its entropy.
|
|
11
|
+
*
|
|
12
|
+
* @param histogram - The image histogram.
|
|
13
|
+
* @param total - Total number of pixels of the image.
|
|
14
|
+
* @returns The threshold.
|
|
15
|
+
*/
|
|
16
|
+
export default function renyiEntropy(histogram: Uint32Array, total: number) {
|
|
17
|
+
let firstBin; // First non-zero bin
|
|
18
|
+
let lastBin; // last non-zero bin
|
|
19
|
+
|
|
20
|
+
const normHisto = new Array(histogram.length); // normalized histogram
|
|
21
|
+
const P1 = new Array(histogram.length); // accumulative normalized histogram
|
|
22
|
+
const P2 = new Array(histogram.length); // accumulative normalized histogram
|
|
23
|
+
|
|
24
|
+
// Entropy Variables
|
|
25
|
+
let threshold1 = 0;
|
|
26
|
+
let threshold2 = 0;
|
|
27
|
+
let threshold3 = 0;
|
|
28
|
+
let maxEnt1 = 0.0;
|
|
29
|
+
let maxEnt2 = 0.0;
|
|
30
|
+
let maxEnt3 = 0.0;
|
|
31
|
+
const alpha2 = 0.5;
|
|
32
|
+
const term2 = 1.0 / (1.0 - alpha2);
|
|
33
|
+
const alpha3 = 2.0;
|
|
34
|
+
const term3 = 1.0 / (1.0 - alpha3);
|
|
35
|
+
|
|
36
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
37
|
+
normHisto[ih] = histogram[ih] / total;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
P1[0] = normHisto[0];
|
|
41
|
+
P2[0] = 1.0 - P1[0];
|
|
42
|
+
for (let ih = 1; ih < histogram.length; ih++) {
|
|
43
|
+
P1[ih] = P1[ih - 1] + normHisto[ih];
|
|
44
|
+
P2[ih] = 1.0 - P1[ih];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Determine the first non-zero bin */
|
|
48
|
+
firstBin = 0;
|
|
49
|
+
for (let ih = 0; ih < histogram.length; ih++) {
|
|
50
|
+
if (Math.abs(P1[ih]) >= Number.EPSILON) {
|
|
51
|
+
firstBin = ih;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Determine the last non-zero bin */
|
|
57
|
+
lastBin = histogram.length - 1;
|
|
58
|
+
for (let ih = histogram.length - 1; ih >= firstBin; ih--) {
|
|
59
|
+
if (Math.abs(P2[ih]) >= Number.EPSILON) {
|
|
60
|
+
lastBin = ih;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Maximum Entropy Thresholding - BEGIN */
|
|
66
|
+
/* ALPHA = 1.0 */
|
|
67
|
+
/* Calculate the total entropy each gray-level
|
|
68
|
+
and find the threshold that maximizes it
|
|
69
|
+
*/
|
|
70
|
+
for (let it = firstBin; it <= lastBin; it++) {
|
|
71
|
+
/* Entropy of the background pixels */
|
|
72
|
+
let entBack1 = 0.0;
|
|
73
|
+
let entBack2 = 0.0;
|
|
74
|
+
let entBack3 = 0.0;
|
|
75
|
+
for (let ih = 0; ih <= it; ih++) {
|
|
76
|
+
if (histogram[ih] !== 0) {
|
|
77
|
+
entBack1 -= (normHisto[ih] / P1[it]) * Math.log(normHisto[ih] / P1[it]);
|
|
78
|
+
}
|
|
79
|
+
entBack2 += Math.sqrt(normHisto[ih] / P1[it]);
|
|
80
|
+
entBack3 += (normHisto[ih] * normHisto[ih]) / (P1[it] * P1[it]);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Entropy of the object pixels */
|
|
84
|
+
let entObj1 = 0.0;
|
|
85
|
+
let entObj2 = 0.0;
|
|
86
|
+
let entObj3 = 0.0;
|
|
87
|
+
for (let ih = it + 1; ih < histogram.length; ih++) {
|
|
88
|
+
if (histogram[ih] !== 0) {
|
|
89
|
+
entObj1 -= (normHisto[ih] / P2[it]) * Math.log(normHisto[ih] / P2[it]);
|
|
90
|
+
}
|
|
91
|
+
entObj2 += Math.sqrt(normHisto[ih] / P2[it]);
|
|
92
|
+
entObj3 += (normHisto[ih] * normHisto[ih]) / (P2[it] * P2[it]);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Total entropy */
|
|
96
|
+
const totEnt1 = entBack1 + entObj1;
|
|
97
|
+
const totEnt2 =
|
|
98
|
+
term2 * (entBack2 * entObj2 > 0.0 ? Math.log(entBack2 * entObj2) : 0.0);
|
|
99
|
+
const totEnt3 =
|
|
100
|
+
term3 * (entBack3 * entObj3 > 0.0 ? Math.log(entBack3 * entObj3) : 0.0);
|
|
101
|
+
|
|
102
|
+
if (totEnt1 > maxEnt1) {
|
|
103
|
+
maxEnt1 = totEnt1;
|
|
104
|
+
threshold1 = it;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (totEnt2 > maxEnt2) {
|
|
108
|
+
maxEnt2 = totEnt2;
|
|
109
|
+
threshold2 = it;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (totEnt3 > maxEnt3) {
|
|
113
|
+
maxEnt3 = totEnt3;
|
|
114
|
+
threshold3 = it;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/* End Maximum Entropy Thresholding */
|
|
118
|
+
|
|
119
|
+
const tStars = new Uint32Array([threshold1, threshold2, threshold3]);
|
|
120
|
+
tStars.sort();
|
|
121
|
+
|
|
122
|
+
let betas;
|
|
123
|
+
|
|
124
|
+
/* Adjust beta values */
|
|
125
|
+
if (Math.abs(tStars[0] - tStars[1]) <= 5) {
|
|
126
|
+
if (Math.abs(tStars[1] - tStars[2]) <= 5) {
|
|
127
|
+
betas = [1, 2, 1];
|
|
128
|
+
} else {
|
|
129
|
+
betas = [0, 1, 3];
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
if (Math.abs(tStars[1] - tStars[2]) <= 5) {
|
|
133
|
+
betas = [3, 1, 0];
|
|
134
|
+
} else {
|
|
135
|
+
betas = [1, 2, 1];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Determine the optimal threshold value */
|
|
140
|
+
const omega = P1[tStars[2]] - P1[tStars[0]];
|
|
141
|
+
const optThreshold = Math.round(
|
|
142
|
+
tStars[0] * (P1[tStars[0]] + 0.25 * omega * betas[0]) +
|
|
143
|
+
0.25 * tStars[1] * omega * betas[1] +
|
|
144
|
+
tStars[2] * (P2[tStars[2]] + 0.25 * omega * betas[2]),
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
return optThreshold;
|
|
148
|
+
}
|