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 @@
|
|
|
1
|
+
{"version":3,"file":"and.d.ts","sourceRoot":"","sources":["../../src/filters/and.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAe3E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { maskToOutputMask } from '../utils/getOutputImage';
|
|
2
|
+
/**
|
|
3
|
+
* Perform an AND operation on two masks.
|
|
4
|
+
*
|
|
5
|
+
* @param mask - First mask.
|
|
6
|
+
* @param otherMask - Second mask.
|
|
7
|
+
* @param options - And options.
|
|
8
|
+
* @returns AND of the two masks.
|
|
9
|
+
*/
|
|
10
|
+
export function and(mask, otherMask, options) {
|
|
11
|
+
const newMask = maskToOutputMask(mask, options);
|
|
12
|
+
if (mask.width !== otherMask.width || mask.height !== otherMask.height) {
|
|
13
|
+
throw new Error('and: both masks must have the same size');
|
|
14
|
+
}
|
|
15
|
+
for (let i = 0; i < newMask.size; i++) {
|
|
16
|
+
if (mask.getBitByIndex(i) && otherMask.getBitByIndex(i)) {
|
|
17
|
+
newMask.setBitByIndex(i, 1);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
newMask.setBitByIndex(i, 0);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return newMask;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=and.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"and.js","sourceRoot":"","sources":["../../src/filters/and.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAS3D;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,SAAe,EAAE,OAAoB;IACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;QACtE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;YACvD,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { IJS } from '../IJS';
|
|
2
|
+
import { BorderType } from '../utils/interpolateBorder';
|
|
3
|
+
export interface BlurOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Width of the blurring matrix, must be an odd integer.
|
|
6
|
+
*/
|
|
7
|
+
width: number;
|
|
8
|
+
/**
|
|
9
|
+
* Height of the blurring matrix, must be an odd integer.
|
|
10
|
+
*/
|
|
11
|
+
height: number;
|
|
12
|
+
/**
|
|
13
|
+
* Explicit how to handle the borders.
|
|
14
|
+
*
|
|
15
|
+
* @default BorderType.REFLECT_101
|
|
16
|
+
*/
|
|
17
|
+
borderType?: BorderType;
|
|
18
|
+
/**
|
|
19
|
+
* Value of the border if BorderType is CONSTANT.
|
|
20
|
+
*
|
|
21
|
+
* @default 0
|
|
22
|
+
*/
|
|
23
|
+
borderValue?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Image to which to output.
|
|
26
|
+
*/
|
|
27
|
+
out?: IJS;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Blur an image. The pixel in the center becomes an average of the surrounding ones.
|
|
31
|
+
*
|
|
32
|
+
* @param image - Image to blur.
|
|
33
|
+
* @param options - Blur options
|
|
34
|
+
* @returns The blurred image.
|
|
35
|
+
*/
|
|
36
|
+
export declare function blur(image: IJS, options: BlurOptions): IJS;
|
|
37
|
+
//# sourceMappingURL=blur.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blur.d.ts","sourceRoot":"","sources":["../../src/filters/blur.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,GAAG,CAS1D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { separableConvolution } from './convolution';
|
|
2
|
+
/**
|
|
3
|
+
* Blur an image. The pixel in the center becomes an average of the surrounding ones.
|
|
4
|
+
*
|
|
5
|
+
* @param image - Image to blur.
|
|
6
|
+
* @param options - Blur options
|
|
7
|
+
* @returns The blurred image.
|
|
8
|
+
*/
|
|
9
|
+
export function blur(image, options) {
|
|
10
|
+
const { width, height } = options;
|
|
11
|
+
const kernelX = new Array(width).fill(1);
|
|
12
|
+
const kernelY = new Array(height).fill(1);
|
|
13
|
+
return separableConvolution(image, kernelX, kernelY, {
|
|
14
|
+
normalize: true,
|
|
15
|
+
...options,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=blur.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blur.js","sourceRoot":"","sources":["../../src/filters/blur.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA6BrD;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,KAAU,EAAE,OAAoB;IACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1C,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QACnD,SAAS,EAAE,IAAI;QACf,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { IJS } from '../IJS';
|
|
2
|
+
import { ClampFunction } from '../utils/clamp';
|
|
3
|
+
import { BorderType, BorderInterpolationFunction } from '../utils/interpolateBorder';
|
|
4
|
+
export interface ConvolutionOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Specify how the borders should be handled.
|
|
7
|
+
*
|
|
8
|
+
* @default BorderType.REFLECT_101
|
|
9
|
+
*/
|
|
10
|
+
borderType?: BorderType;
|
|
11
|
+
/**
|
|
12
|
+
* Value of the border if BorderType is CONSTANT.
|
|
13
|
+
*
|
|
14
|
+
* @default 0
|
|
15
|
+
*/
|
|
16
|
+
borderValue?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Should the kernel be normalised?
|
|
19
|
+
*
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
normalize?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Image to which to output.
|
|
25
|
+
*/
|
|
26
|
+
out?: IJS;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Apply a direct convolution on an image using the specified kernel. The convolution corresponds of a weighted average of the surrounding pixels, the weights being defined in the kernel.
|
|
30
|
+
*
|
|
31
|
+
* @param image - The image to process.
|
|
32
|
+
* @param kernel - Kernel to use for the convolution. Should be a 2D matrix with odd number of rows and columns.
|
|
33
|
+
* @param options - Convolution options.
|
|
34
|
+
* @returns The convoluted image.
|
|
35
|
+
*/
|
|
36
|
+
export declare function directConvolution(image: IJS, kernel: number[][], options?: ConvolutionOptions): IJS;
|
|
37
|
+
/**
|
|
38
|
+
* Compute direct convolution of an image and return an array with the raw values.
|
|
39
|
+
*
|
|
40
|
+
* @param image - Image to process.
|
|
41
|
+
* @param kernel - 2D kernel used for the convolution.
|
|
42
|
+
* @param options - Convolution options.
|
|
43
|
+
* @returns Array with the raw convoluted values.
|
|
44
|
+
*/
|
|
45
|
+
export declare function rawDirectConvolution(image: IJS, kernel: number[][], options?: ConvolutionOptions): Float64Array;
|
|
46
|
+
/**
|
|
47
|
+
* Compute the separable convolution of an image.
|
|
48
|
+
*
|
|
49
|
+
* @param image - Image to convolute.
|
|
50
|
+
* @param kernelX - Kernel along x axis.
|
|
51
|
+
* @param kernelY - Kernel along y axis.
|
|
52
|
+
* @param options - Convolution options.
|
|
53
|
+
* @returns The convoluted image.
|
|
54
|
+
*/
|
|
55
|
+
export declare function separableConvolution(image: IJS, kernelX: number[], kernelY: number[], options?: ConvolutionOptions): IJS;
|
|
56
|
+
export interface ComputeConvolutionValueOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Specify wether the return value should not be clamped and rounded.
|
|
59
|
+
*/
|
|
60
|
+
returnRawValue?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* If the value has to be clamped, specify the clamping function.
|
|
63
|
+
*/
|
|
64
|
+
clamp?: ClampFunction;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compute the convolution of a value of a pixel in an image.
|
|
68
|
+
*
|
|
69
|
+
* @param column - Column of the pixel.
|
|
70
|
+
* @param row - Row of the pixel.
|
|
71
|
+
* @param channel - Channel to process.
|
|
72
|
+
* @param image - Image to process.
|
|
73
|
+
* @param kernel - Kernel for the convolutions.
|
|
74
|
+
* @param interpolateBorder - Function to interpolate the border pixels.
|
|
75
|
+
* @param options - Compute convolution value options.
|
|
76
|
+
* @returns The convoluted value.
|
|
77
|
+
*/
|
|
78
|
+
export declare function computeConvolutionValue(column: number, row: number, channel: number, image: IJS, kernel: number[][], interpolateBorder: BorderInterpolationFunction, options?: ComputeConvolutionValueOptions): number;
|
|
79
|
+
//# sourceMappingURL=convolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convolution.d.ts","sourceRoot":"","sources":["../../src/filters/convolution.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAY,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzD,OAAO,EACL,UAAU,EAEV,2BAA2B,EAC5B,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,OAAO,GAAE,kBAAuB,GAC/B,GAAG,CAoBL;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,OAAO,GAAE,kBAAuB,GAC/B,YAAY,CAwBd;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,kBAAuB,GAC/B,GAAG,CAkJL;AAED,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,iBAAiB,EAAE,2BAA2B,EAC9C,OAAO,GAAE,8BAAmC,GAC3C,MAAM,CA+BR"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { DirectConvolution, BorderType as ConvolutionBorderType, } from 'ml-convolution';
|
|
2
|
+
import { Matrix } from 'ml-matrix';
|
|
3
|
+
import { IJS } from '../IJS';
|
|
4
|
+
import { getClamp } from '../utils/clamp';
|
|
5
|
+
import { getIndex } from '../utils/getIndex';
|
|
6
|
+
import { getOutputImage } from '../utils/getOutputImage';
|
|
7
|
+
import { BorderType, getBorderInterpolation, } from '../utils/interpolateBorder';
|
|
8
|
+
import { round } from '../utils/round';
|
|
9
|
+
/**
|
|
10
|
+
* Apply a direct convolution on an image using the specified kernel. The convolution corresponds of a weighted average of the surrounding pixels, the weights being defined in the kernel.
|
|
11
|
+
*
|
|
12
|
+
* @param image - The image to process.
|
|
13
|
+
* @param kernel - Kernel to use for the convolution. Should be a 2D matrix with odd number of rows and columns.
|
|
14
|
+
* @param options - Convolution options.
|
|
15
|
+
* @returns The convoluted image.
|
|
16
|
+
*/
|
|
17
|
+
export function directConvolution(image, kernel, options = {}) {
|
|
18
|
+
const { borderType = BorderType.REFLECT_101, borderValue = 0 } = options;
|
|
19
|
+
const convolutedData = rawDirectConvolution(image, kernel, {
|
|
20
|
+
borderType,
|
|
21
|
+
borderValue,
|
|
22
|
+
});
|
|
23
|
+
const newImage = getOutputImage(image, options);
|
|
24
|
+
const clamp = getClamp(newImage);
|
|
25
|
+
for (let i = 0; i < image.size; i++) {
|
|
26
|
+
for (let channel = 0; channel < image.channels; channel++) {
|
|
27
|
+
let dataIndex = i * image.channels + channel;
|
|
28
|
+
let newValue = round(clamp(convolutedData[dataIndex]));
|
|
29
|
+
newImage.setValueByIndex(i, channel, newValue);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return newImage;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Compute direct convolution of an image and return an array with the raw values.
|
|
36
|
+
*
|
|
37
|
+
* @param image - Image to process.
|
|
38
|
+
* @param kernel - 2D kernel used for the convolution.
|
|
39
|
+
* @param options - Convolution options.
|
|
40
|
+
* @returns Array with the raw convoluted values.
|
|
41
|
+
*/
|
|
42
|
+
export function rawDirectConvolution(image, kernel, options = {}) {
|
|
43
|
+
const { borderType = BorderType.REFLECT_101, borderValue = 0 } = options;
|
|
44
|
+
const interpolateBorder = getBorderInterpolation(borderType, borderValue);
|
|
45
|
+
let result = new Float64Array(image.size * image.channels);
|
|
46
|
+
for (let channel = 0; channel < image.channels; channel++) {
|
|
47
|
+
for (let row = 0; row < image.height; row++) {
|
|
48
|
+
for (let column = 0; column < image.width; column++) {
|
|
49
|
+
let index = getIndex(row, column, channel, image);
|
|
50
|
+
result[index] = computeConvolutionValue(column, row, channel, image, kernel, interpolateBorder, { returnRawValue: true });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Compute the separable convolution of an image.
|
|
58
|
+
*
|
|
59
|
+
* @param image - Image to convolute.
|
|
60
|
+
* @param kernelX - Kernel along x axis.
|
|
61
|
+
* @param kernelY - Kernel along y axis.
|
|
62
|
+
* @param options - Convolution options.
|
|
63
|
+
* @returns The convoluted image.
|
|
64
|
+
*/
|
|
65
|
+
export function separableConvolution(image, kernelX, kernelY, options = {}) {
|
|
66
|
+
const { normalize, borderType = BorderType.REFLECT_101, borderValue = 0, } = options;
|
|
67
|
+
const interpolateBorder = getBorderInterpolation(borderType, borderValue);
|
|
68
|
+
if (normalize) {
|
|
69
|
+
[kernelX, kernelY] = normalizeSeparatedKernel(kernelX, kernelY);
|
|
70
|
+
}
|
|
71
|
+
const doubleKernelOffsetX = kernelX.length - 1;
|
|
72
|
+
const kernelOffsetX = doubleKernelOffsetX / 2;
|
|
73
|
+
const doubleKernelOffsetY = kernelY.length - 1;
|
|
74
|
+
const kernelOffsetY = doubleKernelOffsetY / 2;
|
|
75
|
+
const { width, height, channels } = image;
|
|
76
|
+
const cutWidth = width - doubleKernelOffsetX;
|
|
77
|
+
const newImage = IJS.createFrom(image);
|
|
78
|
+
const clamp = getClamp(newImage);
|
|
79
|
+
const rowConvolution = new DirectConvolution(width, kernelX, ConvolutionBorderType.CUT);
|
|
80
|
+
const columnConvolution = new DirectConvolution(height, kernelY, ConvolutionBorderType.CUT);
|
|
81
|
+
const rowData = new Float64Array(width);
|
|
82
|
+
const columnData = new Float64Array(height);
|
|
83
|
+
const convolvedData = new Float64Array(cutWidth * height);
|
|
84
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
85
|
+
for (let row = 0; row < height; row++) {
|
|
86
|
+
for (let column = 0; column < width; column++) {
|
|
87
|
+
rowData[column] = image.getValue(row, column, channel);
|
|
88
|
+
}
|
|
89
|
+
const convolvedRow = rowConvolution.convolve(rowData);
|
|
90
|
+
for (let column = 0; column < cutWidth; column++) {
|
|
91
|
+
convolvedData[row * cutWidth + column] = convolvedRow[column];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
for (let column = 0; column < cutWidth; column++) {
|
|
95
|
+
const wOffset = column + kernelOffsetX;
|
|
96
|
+
for (let row = 0; row < height; row++) {
|
|
97
|
+
columnData[row] = convolvedData[row * cutWidth + column];
|
|
98
|
+
}
|
|
99
|
+
const result = columnConvolution.convolve(columnData);
|
|
100
|
+
for (let i = 0; i < result.length; i++) {
|
|
101
|
+
const index = (i + kernelOffsetY) * width + wOffset;
|
|
102
|
+
newImage.setValueByIndex(index, channel, round(clamp(result[i])));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Calculate kernel from separated kernels.
|
|
107
|
+
const matrixX = Matrix.rowVector(kernelX);
|
|
108
|
+
const matrixY = Matrix.columnVector(kernelY);
|
|
109
|
+
const kernel = matrixY.mmul(matrixX).to2DArray();
|
|
110
|
+
// Apply convolution on the left and right borders
|
|
111
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
112
|
+
for (let bY = 0; bY < height; bY++) {
|
|
113
|
+
for (let bX = 0; bX < kernelOffsetX; bX++) {
|
|
114
|
+
const index = bY * width + bX;
|
|
115
|
+
const bXopp = width - bX - 1;
|
|
116
|
+
const bYopp = height - bY - 1;
|
|
117
|
+
const indexOpp = bYopp * width + bXopp;
|
|
118
|
+
newImage.setValueByIndex(index, channel, computeConvolutionValue(bX, bY, channel, image, kernel, interpolateBorder, { clamp }));
|
|
119
|
+
newImage.setValueByIndex(indexOpp, channel, computeConvolutionValue(bXopp, bYopp, channel, image, kernel, interpolateBorder, { clamp }));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// apply the convolution on the top and bottom borders
|
|
124
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
125
|
+
for (let bX = 0; bX < width; bX++) {
|
|
126
|
+
for (let bY = 0; bY < kernelOffsetY; bY++) {
|
|
127
|
+
const index = bY * width + bX;
|
|
128
|
+
const bXopp = width - bX - 1;
|
|
129
|
+
const bYopp = height - bY - 1;
|
|
130
|
+
const indexOpp = bYopp * width + bXopp;
|
|
131
|
+
newImage.setValueByIndex(index, channel, computeConvolutionValue(bX, bY, channel, image, kernel, interpolateBorder, { clamp }));
|
|
132
|
+
newImage.setValueByIndex(indexOpp, channel, computeConvolutionValue(bXopp, bYopp, channel, image, kernel, interpolateBorder, { clamp }));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return newImage;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Compute the convolution of a value of a pixel in an image.
|
|
140
|
+
*
|
|
141
|
+
* @param column - Column of the pixel.
|
|
142
|
+
* @param row - Row of the pixel.
|
|
143
|
+
* @param channel - Channel to process.
|
|
144
|
+
* @param image - Image to process.
|
|
145
|
+
* @param kernel - Kernel for the convolutions.
|
|
146
|
+
* @param interpolateBorder - Function to interpolate the border pixels.
|
|
147
|
+
* @param options - Compute convolution value options.
|
|
148
|
+
* @returns The convoluted value.
|
|
149
|
+
*/
|
|
150
|
+
export function computeConvolutionValue(column, row, channel, image, kernel, interpolateBorder, options = {}) {
|
|
151
|
+
let { returnRawValue = false, clamp } = options;
|
|
152
|
+
if (returnRawValue) {
|
|
153
|
+
clamp = undefined;
|
|
154
|
+
}
|
|
155
|
+
let val = 0;
|
|
156
|
+
const kernelWidth = kernel[0].length;
|
|
157
|
+
const kernelHeight = kernel.length;
|
|
158
|
+
const kernelOffsetX = (kernelWidth - 1) / 2;
|
|
159
|
+
const kernelOffsetY = (kernelHeight - 1) / 2;
|
|
160
|
+
for (let kY = 0; kY < kernelHeight; kY++) {
|
|
161
|
+
for (let kX = 0; kX < kernelWidth; kX++) {
|
|
162
|
+
const kernelValue = kernel[kY][kX];
|
|
163
|
+
val +=
|
|
164
|
+
kernelValue *
|
|
165
|
+
interpolateBorder(column + kX - kernelOffsetX, row + kY - kernelOffsetY, channel, image);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!clamp) {
|
|
169
|
+
return val;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return round(clamp(val));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @param kernelX
|
|
177
|
+
* @param kernelY
|
|
178
|
+
*/
|
|
179
|
+
function normalizeSeparatedKernel(kernelX, kernelY) {
|
|
180
|
+
const sumKernelX = kernelX.reduce((prev, current) => prev + current, 0);
|
|
181
|
+
const sumKernelY = kernelY.reduce((prev, current) => prev + current, 0);
|
|
182
|
+
const prod = sumKernelX * sumKernelY;
|
|
183
|
+
if (prod < 0) {
|
|
184
|
+
throw new Error('this separated kernel cannot be normalized');
|
|
185
|
+
}
|
|
186
|
+
const factor = 1 / Math.sqrt(Math.abs(prod));
|
|
187
|
+
return [kernelX.map((v) => v * factor), kernelY.map((v) => v * factor)];
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=convolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convolution.js","sourceRoot":"","sources":["../../src/filters/convolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ColorDepth, IJS } from '..';
|
|
2
|
+
import { BorderType } from '../utils/interpolateBorder';
|
|
3
|
+
export declare enum DerivativeFilters {
|
|
4
|
+
SOBEL = "SOBEL",
|
|
5
|
+
SCHARR = "SCHARR",
|
|
6
|
+
PREWITT = "PREWITT"
|
|
7
|
+
}
|
|
8
|
+
export interface DerivativeFilterOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Algorithm to use for the derivative filter.
|
|
11
|
+
*/
|
|
12
|
+
filter?: DerivativeFilters;
|
|
13
|
+
/**
|
|
14
|
+
* Specify how the borders should be handled.
|
|
15
|
+
*
|
|
16
|
+
* @default BorderType.REPLICATE
|
|
17
|
+
*/
|
|
18
|
+
borderType?: BorderType;
|
|
19
|
+
/**
|
|
20
|
+
* Value of the border if BorderType is CONSTANT.
|
|
21
|
+
*
|
|
22
|
+
* @default 0
|
|
23
|
+
*/
|
|
24
|
+
borderValue?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Specify the bitDepth of the resulting image.
|
|
27
|
+
*
|
|
28
|
+
* @default image.bitDepth
|
|
29
|
+
*/
|
|
30
|
+
bitDepth?: ColorDepth;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Apply a derivative filter to an image.
|
|
34
|
+
*
|
|
35
|
+
* @param image - Image to process.
|
|
36
|
+
* @param options - Derivative filter options.
|
|
37
|
+
* @returns The processed image.
|
|
38
|
+
*/
|
|
39
|
+
export declare function derivativeFilter(image: IJS, options?: DerivativeFilterOptions): IJS;
|
|
40
|
+
//# sourceMappingURL=derivativeFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivativeFilter.d.ts","sourceRoot":"","sources":["../../src/filters/derivativeFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAUxD,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;CAIpB;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,EACV,OAAO,GAAE,uBAA4B,GACpC,GAAG,CAqBL"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PREWITT_X, PREWITT_Y, SCHARR_X, SCHARR_Y, SOBEL_X, SOBEL_Y, } from '../utils/kernels';
|
|
2
|
+
export var DerivativeFilters;
|
|
3
|
+
(function (DerivativeFilters) {
|
|
4
|
+
DerivativeFilters["SOBEL"] = "SOBEL";
|
|
5
|
+
DerivativeFilters["SCHARR"] = "SCHARR";
|
|
6
|
+
DerivativeFilters["PREWITT"] = "PREWITT";
|
|
7
|
+
// todo: handle even sized kernels to implement Roberts' filter
|
|
8
|
+
// for 2x2 matrices, the current pixel corresponds to the top-left
|
|
9
|
+
// ROBERTS = 'ROBERTS',
|
|
10
|
+
})(DerivativeFilters || (DerivativeFilters = {}));
|
|
11
|
+
/**
|
|
12
|
+
* Apply a derivative filter to an image.
|
|
13
|
+
*
|
|
14
|
+
* @param image - Image to process.
|
|
15
|
+
* @param options - Derivative filter options.
|
|
16
|
+
* @returns The processed image.
|
|
17
|
+
*/
|
|
18
|
+
export function derivativeFilter(image, options = {}) {
|
|
19
|
+
const { filter = DerivativeFilters.SOBEL } = options;
|
|
20
|
+
let kernelX = SOBEL_X;
|
|
21
|
+
let kernelY = SOBEL_Y;
|
|
22
|
+
switch (filter) {
|
|
23
|
+
case DerivativeFilters.SOBEL:
|
|
24
|
+
break;
|
|
25
|
+
case DerivativeFilters.SCHARR:
|
|
26
|
+
kernelX = SCHARR_X;
|
|
27
|
+
kernelY = SCHARR_Y;
|
|
28
|
+
break;
|
|
29
|
+
case DerivativeFilters.PREWITT:
|
|
30
|
+
kernelX = PREWITT_X;
|
|
31
|
+
kernelY = PREWITT_Y;
|
|
32
|
+
break;
|
|
33
|
+
default:
|
|
34
|
+
throw new Error('derivativeFilter: unrecognised derivative filter.');
|
|
35
|
+
}
|
|
36
|
+
return image.gradientFilter({ kernelX, kernelY, ...options });
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=derivativeFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivativeFilter.js","sourceRoot":"","sources":["../../src/filters/derivativeFilter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GACR,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;IACnB,+DAA+D;IAC/D,kEAAkE;IAClE,wBAAwB;AAC1B,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B;AA2BD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAU,EACV,UAAmC,EAAE;IAErC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC;IACrD,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,OAAO,GAAG,OAAO,CAAC;IAEtB,QAAQ,MAAM,EAAE;QACd,KAAK,iBAAiB,CAAC,KAAK;YAC1B,MAAM;QACR,KAAK,iBAAiB,CAAC,MAAM;YAC3B,OAAO,GAAG,QAAQ,CAAC;YACnB,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,iBAAiB,CAAC,OAAO;YAC5B,OAAO,GAAG,SAAS,CAAC;YACpB,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACxE;IAED,OAAO,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { IJS } from '../IJS';
|
|
2
|
+
import { BorderType } from '../utils/interpolateBorder';
|
|
3
|
+
interface GaussianBlurBaseOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Specify how the borders should be handled.
|
|
6
|
+
*
|
|
7
|
+
* @default BorderType.REFLECT_101
|
|
8
|
+
*/
|
|
9
|
+
borderType?: BorderType;
|
|
10
|
+
/**
|
|
11
|
+
* Image to which the resulting image has to be put.
|
|
12
|
+
*/
|
|
13
|
+
out?: IJS;
|
|
14
|
+
}
|
|
15
|
+
export interface GaussianBlurSigmaOptions extends GaussianBlurBaseOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Size of the kernel.
|
|
18
|
+
*/
|
|
19
|
+
size?: number;
|
|
20
|
+
/**
|
|
21
|
+
* The standard deviation. Specifies the width of the gaussian function in the case where it is the same for x and y.
|
|
22
|
+
*
|
|
23
|
+
* @default 2 * Math.ceil(2 * sigma) + 1
|
|
24
|
+
*/
|
|
25
|
+
sigma: number;
|
|
26
|
+
}
|
|
27
|
+
export interface GaussianBlurXYOptions extends GaussianBlurBaseOptions {
|
|
28
|
+
/**
|
|
29
|
+
* The standard deviation for the x axis. Specifies the width of the gaussian function along x.
|
|
30
|
+
*/
|
|
31
|
+
sigmaX: number;
|
|
32
|
+
/**
|
|
33
|
+
* The standard deviation for the y axis. Specifies the width of the gaussian function along y.
|
|
34
|
+
*/
|
|
35
|
+
sigmaY: number;
|
|
36
|
+
/**
|
|
37
|
+
* Size of the X axis kernel
|
|
38
|
+
*
|
|
39
|
+
* @default 2 * Math.ceil(2 * sigmaX) + 1
|
|
40
|
+
*/
|
|
41
|
+
sizeX?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Size of the Y axis kernel
|
|
44
|
+
*
|
|
45
|
+
* @default 2 * Math.ceil(2 * sigma) + 1
|
|
46
|
+
*/
|
|
47
|
+
sizeY?: number;
|
|
48
|
+
}
|
|
49
|
+
export declare type GaussianBlurOptions = GaussianBlurSigmaOptions | GaussianBlurXYOptions;
|
|
50
|
+
/**
|
|
51
|
+
* Apply a gaussian filter to an image.
|
|
52
|
+
*
|
|
53
|
+
* @param image - Image to blur.
|
|
54
|
+
* @param options - Gaussian blur options.
|
|
55
|
+
* @returns The blurred image.
|
|
56
|
+
*/
|
|
57
|
+
export declare function gaussianBlur(image: IJS, options: GaussianBlurOptions): IJS;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=gaussianBlur.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianBlur.d.ts","sourceRoot":"","sources":["../../src/filters/gaussianBlur.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,UAAU,uBAAuB;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IAEH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oBAAY,mBAAmB,GAC3B,wBAAwB,GACxB,qBAAqB,CAAC;AAW1B;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,GAAG,GAAG,CAyB1E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { separableConvolution } from './convolution';
|
|
2
|
+
function getRadius(size) {
|
|
3
|
+
if (size % 2 !== 1 || size < 0) {
|
|
4
|
+
throw new Error('gaussianBlur: gaussian blur size must be positive and odd');
|
|
5
|
+
}
|
|
6
|
+
return (size - 1) / 2;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Apply a gaussian filter to an image.
|
|
10
|
+
*
|
|
11
|
+
* @param image - Image to blur.
|
|
12
|
+
* @param options - Gaussian blur options.
|
|
13
|
+
* @returns The blurred image.
|
|
14
|
+
*/
|
|
15
|
+
export function gaussianBlur(image, options) {
|
|
16
|
+
if ('sigma' in options) {
|
|
17
|
+
const { sigma, size = getSize(sigma) } = options;
|
|
18
|
+
const radius = getRadius(size);
|
|
19
|
+
const kernel = getKernel(radius, sigma);
|
|
20
|
+
return separableConvolution(image, kernel, kernel, {
|
|
21
|
+
borderType: options.borderType,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const { sigmaX, sigmaY, sizeX = getSize(sigmaX), sizeY = getSize(sigmaY), } = options;
|
|
26
|
+
const radiusX = getRadius(sizeX);
|
|
27
|
+
const radiusY = getRadius(sizeY);
|
|
28
|
+
const kernelX = getKernel(radiusX, sigmaX);
|
|
29
|
+
const kernelY = getKernel(radiusY, sigmaY);
|
|
30
|
+
return separableConvolution(image, kernelX, kernelY, {
|
|
31
|
+
borderType: options.borderType,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function getKernel(radius, sigma) {
|
|
36
|
+
const n = radius * 2 + 1;
|
|
37
|
+
const kernel = new Array(n);
|
|
38
|
+
const sigmaX = sigma ? sigma : ((n - 1) * 0.5 - 1) * 0.3 + 0.8;
|
|
39
|
+
const scale2X = -0.5 / (sigmaX * sigmaX);
|
|
40
|
+
let sum = 0;
|
|
41
|
+
for (let i = 0; i < n; i++) {
|
|
42
|
+
const x = i - radius;
|
|
43
|
+
const t = Math.exp(scale2X * x * x);
|
|
44
|
+
kernel[i] = t;
|
|
45
|
+
sum += t;
|
|
46
|
+
}
|
|
47
|
+
for (let i = 0; i < n; i++) {
|
|
48
|
+
kernel[i] /= sum;
|
|
49
|
+
}
|
|
50
|
+
return kernel;
|
|
51
|
+
}
|
|
52
|
+
function getSize(sigma) {
|
|
53
|
+
return 2 * Math.ceil(2 * sigma) + 1;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=gaussianBlur.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianBlur.js","sourceRoot":"","sources":["../../src/filters/gaussianBlur.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAwDrD,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;KACH;IACD,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAU,EAAE,OAA4B;IACnE,IAAI,OAAO,IAAI,OAAO,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;YACjD,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;KACJ;SAAM;QACL,MAAM,EACJ,MAAM,EACN,MAAM,EACN,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,EACvB,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GACxB,GAAG,OAAO,CAAC;QAEZ,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;YACnD,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,KAAa;IAC9C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAC/D,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,IAAI,CAAC,CAAC;KACV;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;KAClB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ColorDepth, IJS } from '..';
|
|
2
|
+
import { BorderType } from '../utils/interpolateBorder';
|
|
3
|
+
export interface GradientFilterBaseOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Specify how the borders should be handled.
|
|
6
|
+
*
|
|
7
|
+
* @default BorderType.REPLICATE
|
|
8
|
+
*/
|
|
9
|
+
borderType?: BorderType;
|
|
10
|
+
/**
|
|
11
|
+
* Value of the border if BorderType is CONSTANT.
|
|
12
|
+
*
|
|
13
|
+
* @default 0
|
|
14
|
+
*/
|
|
15
|
+
borderValue?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Specify the bitDepth of the resulting image.
|
|
18
|
+
*
|
|
19
|
+
* @default image.bitDepth
|
|
20
|
+
*/
|
|
21
|
+
bitDepth?: ColorDepth;
|
|
22
|
+
}
|
|
23
|
+
export interface GradientFilterXOptions extends GradientFilterBaseOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Kernel along x axis.
|
|
26
|
+
*/
|
|
27
|
+
kernelX: number[][];
|
|
28
|
+
}
|
|
29
|
+
export interface GradientFilterYOptions extends GradientFilterBaseOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Kernel along y axis.
|
|
32
|
+
*/
|
|
33
|
+
kernelY: number[][];
|
|
34
|
+
}
|
|
35
|
+
export interface GradientFilterXYOptions extends GradientFilterBaseOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Kernel along x axis.
|
|
38
|
+
*/
|
|
39
|
+
kernelX: number[][];
|
|
40
|
+
/**
|
|
41
|
+
* Kernel along y axis.
|
|
42
|
+
*/
|
|
43
|
+
kernelY: number[][];
|
|
44
|
+
}
|
|
45
|
+
export declare type GradientFilterOptions = GradientFilterXOptions | GradientFilterYOptions | GradientFilterXYOptions;
|
|
46
|
+
/**
|
|
47
|
+
* Apply a gradient filter to an image.
|
|
48
|
+
*
|
|
49
|
+
* @param image - The image to process.
|
|
50
|
+
* @param options - Gradient filter options.
|
|
51
|
+
* @returns The gradient image.
|
|
52
|
+
*/
|
|
53
|
+
export declare function gradientFilter(image: IJS, options: GradientFilterOptions): IJS;
|
|
54
|
+
//# sourceMappingURL=gradientFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradientFilter.d.ts","sourceRoot":"","sources":["../../src/filters/gradientFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAmB,MAAM,IAAI,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AACD,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB;IACxE;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AAED,oBAAY,qBAAqB,GAC7B,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,CAAC;AAE5B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,qBAAqB,GAC7B,GAAG,CAyCL"}
|