## ChangeLog __1.14.0__ * PairwiseClusterFilter for image clustering and segmentation by deterministic annealing * PatchMatchFilter algorithm for image editing, inpainting and completion, in progress * ColorDetectorFilter variation of ConnectedComponentsFilter * FILTER.Util.Image.Selection class, FILTER.Util.Image.Pyramid class * FILTER.Util.Image.Distance methods (Euclidean, Histogram, Correlation) * FILTER.Image.select method can also accept a FILTER.Util.Image.Selection instance * handle metaData serialization in CompositeFilter * various edits, typo corrections __1.13.0__ * HoughDetectorFilter for lines, linesegments, rectangles, circles and ellipses * wasm filters code as separate files to be included at will * various edits, typo corrections __1.12.0__ * HistogramMatchFilter * various edits, corrections and updates __1.11.0__ * TemplateMatcherFilter fast matching for arbitrary rotation angles and scales * HaarDetectorFilter/TemplateMatcherFilter returned features include matching score * various edits and updates __1.10.0__ * FFT1d, FFT2d, minmax core utilities * Image.image_s method * FrequencyFilter very fast js version * TemplateMatcherFilter very fast rotation/scale-invariant js version * various edits and updates __1.9.1__ * faster SeamlessTileFilter __1.9.0__ * SeamlessTileFilter glsl version * DropShadowFilter glsl version * MorphologicalFilter corrections for glsl * better handling of dimensions changing in glsl filter * small intuitive glsl filter framework * interpolate_nearest method (js/wasm/glsl) * some optimizations __1.8.0__ * MorphologicalFilter web assembly version * DimensionFilter glsl version, fix pad mode, fix parallel operation * HistogramEqualizeFilter have balance factor in [0,1] (default operation is 0) * rename ThresholdFilter to OtsuThresholdFilter * WASM.instantiate handle Out-of-Memory errors blocking rest execution __1.7.0__ * most filters coded in web assembly (more to be added) * CannyEdges better GLSL version * Image.setDimensions scales appropriately with selection if active, else resizes whole image as before * dimensions changing during GLSL correctly set filter meta * fix HaarDetector selection again * some optimizations * update examples and tests __1.6.0__ * ConvolutionMatrixFilter.bilateral filter, true ConvolutionMatrixFilter.gauss filter * ConvolutionMatrixFilter correct and optimize separable convolutions and custom functional kernels * ColorFillFilter.color can be custom function returning color for specific x,y coordinates (eg a gradient) * ChannelCopyFilter size correction * CannyEdges review, update and make GLSL version * fix some typos and omissions * some GL optimizations * handle GL context lost __1.5.7__ * Blend GLSL filter * Automatic Threshold Plugin return threshold as meta * GLSL support dimension changing during the run __1.5.6__ * Automatic Threshold Plugin (Otsu method) __1.5.5__ * `Image.mapReduce` to split image in parts and process each part in parallel * ConnectedComponents COLORIZE mode * Equalize `factor` option * simplify GL overriding __1.5.0__ * GLSL versions of most filters so that they can run in gl/webgl transparently * fix/update `HaarDetector`,`Pixelate`,`Convolution`,`Statistic` filters * update examples and tests __1.0.0__ * remove `classy` dependency * remove not implemented filters (webgl, svg, some plugins) * remove ml code (svg, jade, kmeans, ..) * remove `zlib`, `ffmpeg` asm libs * remove `nodejs` specific code (use `CanvasLite` or `node-canvas`) * remove `ScaledImage` (use `DimensionFilter` to up/down scale) * remove unused methods (eg `Image.draw`/`Image.paste`, ..) * update/fix `HAARDetector`, `Blend` filters * fix Image dimensions and display issues in mobile (not use `devicePixelRatio`) * implement `GeometricMapFilter.polar(cx, cy)`, `GeometricMapFilter.cartesian(cx, cy)` * simplify/minify codebase * update examples and tests __0.9.7__ * new `Image` method `paste`/`draw`, enable to paste or put or draw or replace a part of the image with another image at specified location (e.g create one big sprite image from multiple image sprites) * `IO.FileManager` and `IO.BinaryManager` can also read from a (browser) `File`/`Blob` object and write to (browser) `Blob` * `DropShadowFilter` filter can also (optionaly) pad output image if shadow offset falls outside the original image area * new morphological filter parameter `iterations`, enable to run same morpholigical filter multiple times by itself (i.e much easier and faster than using `composite` filter) * optimise morphological processing by enabling repeated and separable primitive operations * new `RGB2XYZ`, `XYZ2RGB`, `RGB2ILL`, `ILL2RGB` `Color` space/transformation methods and `ColorMatrix` and `ColorMap` filter methods * updated `connected_components` algorithm and associated `dissimilarity_matrix` methods * typo fix in `BlendFilter.setInputValues` method (matrix index not computed correctly) * some typos/fixes in `FILTER.Codec.PNG` * new node example `css-sprite-animation` generator, new references __0.9.6__ * new morphological filters (methods), `gradient`, `laplacian` * some new methods (pre-computed filters) in `colortable` filter, which are similar to `colormatrix` filter * faster canny gradient algorithm with fixed gaussian filter (faster but different quality from previous version), optional (eg gausian or deriche) blur pre-processing can also be applied (set pre-blur parameter to `false`, see examples) * optimise and fix some typos in `connectedcomponents` filter and machinelearning method * fix `container` meta parameter in `compositefilter` after each `apply` call (could be overwritten deeper in apply chain) * canny gradient pruning in haar detector computed using wrong indices in previous optimisations, fixed * custom partial selection not computed correctly in haar detector filter, fixed (needs more extensive check) * the way extra filter inputs were handled has a bug, if same image is used as extra input in more than one filter and image is updated through another filter, it is possible depending on order of application that some filters will get the previous version of the image as input (because it is cached and not resent to save bandwidth) while only the first filter will get the updated (correct) version, fixed * re-implement, extend and optimise `FloodFill`, `PatternFill` as scanline `connected_component` with seed algorithm * make `FloodFill`, `PatternFill` function also given an exterior border color (i.e match connected component while not exterior border found) instead of only interior color (i.e match connected component while similar interior color found) * `FloodFill` in `FILTER.MODE.HUE` replaces only `hue` so it can be used to fill/replace a gradient connected region * fix `FILTER.Color.RGB2HSV` for gray values (was changed in previous update) * make image/filter selections accept both relative and absolute coordinates (default relative) * add initial versions (in progress) of some machine learning algorithms, `kmeans`, `kmedoids`, `svd`, move `connected_components` algorithm under `machinelearning` package * add new util `blas` (Basic Linear Algebra Subroutines), refactor and re-organise existing utils into `core`, `array`, .. * simplify `IO` and `CODECS` packages into one manager with `codec` parameter * add full `zlib` (`zlib-asm.js`) util implementation and native node `zlib` module alternative (`zlib-node.js`) (can be set/overriden by user if necesary) * add full `ffmpeg` (`ffmpeg-asm.js`) util implementation and native node `ffmpeg` module alternative (`ffmpeg-node.js`) (can be set/overriden by user if necesary) * add `png` encoder method (to write image files in `png` format) * fix a typo in `convolutionmatrix` filter (missing `stride` parameter in `convolution_clamp`) * add new `RhomboidPixelate`, `HexagonalPixelate` (almost done) plugins * simplify and unify `PixelateFilter`, supports ALL the pixelation filters by setting `pattern` parameter (default `"rectangular"`, see examples) * extend and rename `ResampleFilter`, `SelectionFilter` into `DimensionFilter` * update references, examples __0.9.5__ * fix any nodejs portability emulation and parallel threads issues * make parallel thread calls faster (both browser and nodejs), update asynchronous * fix some typos in `Color` utility and plugins * add extra static utilities in `Color` class (`.intensity`, `.hue`, `.saturation`, `blend` modes, ..) * color space conversions made faster and more generic * restructure utiltiies and folders (e.g `Math`, `String`, `Array`, `Image`, `Filter` utils, ..) * filters and created plugins automaticaly support the `constructor-factory` pattern to be able to be instantiated without the explicit `new Filter()` operator instead simply using `Filter()`, see updated examples * handle uniformly and more efficiently multiple extra input images in filters, simplify filters' `serialize`/`unserialize` methods (there is a bug to be fixed in how the inputs are handled, see api-reference) * make filters pass generic `metaData` in `apply` method instead of just the `src` image (e.g useful in composite filters to adjust parameters of filters at run-time based on previous filter outputs etc..) * a number of filters/plugins have been combined or extended to support various modes of operation defined in `FILTER.MODE` (see examples) * two new generic filters (which replace multiple plugins, see updated examples) `AffineMatrixFilter` (i.e linear geometric map filtering) and `ColorMapFilter` (i.e non-linear color transformation filtering) instead of having multiple filters and plugins with similar functionalities scattered around, plus dynamicaly optimise them, parametrise them and also have GLSL analogs more easily * remove `AlphaMaskFilter`, `ChannelCopyFilter` has been extended with same functionality * new effects utilities and plugins `gradient`, `radial-gradient` (nodejs support), extra static part of `Filter.Image` * new plugin `PatternFillFilter` (in `FloodFillFilter` plugin file) * new plugin `DropShadowFilter` (analogous to ActionScript filter) * new plugin `ConnectedComponentsFilter` * add new filters `ResampleFilter`, `SelectionFilter` * move `BlendFilter` into generic filters instead of plugins, new `AlgebraicFilter` (instead of `CombinatorFilter`), in progress * make `BlendFilter` accept multiple inputs, plus extra alpha (opacity) parameter and enabled/disabled flag (per input), via `BlendMatrix` (see examples) * new and faster approximate algorithm for `Pixelate`, `TriangularPixelate`, `HexagonalPixelate`, all included in `Pixelate` plugin file * make histogram equalisation faster, some convolutions and statistics faster and fix some typos, hue extraction faster, .. (up to consistent 60 fps processing) * have faster convolutions and statistics for grayscale images via `FILTER.MODE.GRAY` parameter (i.e `.setMode(FILTER.MODE.GRAY)`) * histogram equalize filter is now one filter with mode parameter (defined in `FILTER.MODE`) for type of equalisation (i.e `MODE.INTENSITY`, `MODE.GRAY`, `MODE.RGB`) * add custom `selection` option `tolerance` to `HaarDetector` plugin so it can detect in a region of image instead of whole (useful for combining detectors to detect different feaures consecutively, where one detects in region detected previously..) * `selection` option is added to generic `Filter` so all filter instances can have custom selections for any purpose needed * simplify and make somewhat faster `CannyEdges` and `HaarDetector` plugins * fix `tensor_product` utility from previous update (produced incorrect convolution kernels) * fix `Image.image` method issue when loading an image without initializing `imageData` in nodejs * heavy refactoring and optimisations * update examples (both live browser and nodejs) * prepare support for glsl-based filters (`webgl`/`node-gl`) and svg-based filters __0.9.0__ * restructure folders, separate builds for core, io, fx, util, codecs, filters, plugins, bundle * full support for nodejs (including parallel processing through forked processes) * various fixes and refactorings (esp. for nodejs support) * new effects: `gradient`, `radial-gradient` (nodejs support), extra static part of `Filter,Image` (fx/ folder) * new plugin `PatternFillFilter` (in `FloodFillFilter` plugin file) * `PerlinNoise` is **not** a plugin anymore, it is extra static part of `Filter,Image` (fx/ folder) * update examples, dependencies (asynchronous), add advanced references __0.8.0__ * update classy, asynchronous dependencies, examples * update buildtools, UMD templates, filter add-ons are better bundled * various optimisations, refactorings * CustomFilter renamed to InlineFilter * some modifications towards node.js support __0.7.2__ * add image encoders for `JPG`, `BMP`, `RGBE` * fix `BMP` decoder * add `Canvas` polyfill (to be used if in `Node`) * refactoring/changes __0.7.1__ * use one binary loader and multiple image codecs instead of separate image loaders per image format (more flexible) * add image codecs (currently decoders only) for `PNG`,`JPG`,`BMP`,`GIF`,`TGA`,`RGBE` formats (see references) * minor refactoring/changes __0.7__ * add `FILTER.Math` routines and algorithms (interpolation, fourier transforms etc..) * add `fft1d`, `fft2d` fast fourier transform routines, image spectrum, frequency domain filtering * add `nearest neighbor`, `bilinear`, `bicubic` interpolation/resizing routines * add `TGALoader`, `RGBELoader`, `GIFLoader` generic/native image parsers/loaders * new plugin: `SeamlessTileFilter`, create a seamless tileable pattern from an image * new plugin: `HaarDetector`, detect image features using Viola-Jones-Lienhart `openCV` `HAAR` cascades algorithm (adapted from [HAAR.js](https://github.com/foo123/HAR.js)) * new plugin: `HalftoneFilter`, create a halftoned/dithered image from target image * `PerlinNoiseFilter` plugin enhancement enable fractal noise and turbulence, octave noise and seamless noise * filters/plugins can transmit `metadata` (e.g `HaarDetector`) to pass additional information which is not necessarily an image * refactor/optimise __0.7-alpha__, __0.7-alpha2__ * images can be restorable * add image loaders, remove image loading from `FILTER.Image` class * new plugin: `FloodFillFilter`, fast flood filling using scanline algorithm with tolerance factor * new plugin: `CannyEdgesFilter`, efficient Canny Edges Detector * new plugin: `PerlinNoiseFilter` efficient `Perlin Noise` and `Simplex Noise` implementations * new geometric filter: `GeometricMapFilter.shift`, fast circular shift/translation of image * update dependencies (e.g `classy.js`), update examples * refactoring, optimisations __0.6.17__ , __0.6.18__ * update buildtools/dependencies * minor changes __0.6.15__ , __0.6.16__ * update buildtools/dependencies * remove `FILTER.Image.blend` method (there is filter plugin for this), add `FILTER.Image.toImage` method __0.6.14__ * remove `PublishSubscribe` for implementing generic filter/image events * heavy refactor/optimise/minimise __0.6.13__ * use `Asynchronous.js` for parallel/async filter tasks * use `PublishSubscribe` for implementing generic filter/image events * heavy refactor/optimise __0.6.12__ * use `Color` Class from (https://github.com/foo123/css-color) to enhance `FILTER.Color` * (re-)add `apply` method to `Image` Class (shorthand to `Filter.apply` method) __0.6.11__ * serialization changes (more options, transparently) * enable customFilters to be used in parallel (see api-reference) * edits/optimizations __0.6.10__ * more parallel options, external script path options * typos/edits __0.6.9__ * support parallel filtering/procesing with filter workers transparently * new filters polar/cartesian/directionalBlur/zoomBlur (**in progress**) * code refactor, optimisations, edits * update [`classy.js`](https://github.com/foo123/classy.js) OO framework * update live examples / docs __0.6.7, 0.6.8__ * code refactor, various optimisations, edits, tidy up * add `ScaledImage` class, represents an image that can be automatically down/up scaled * add image `select` / `deselect` methods, allow filters to be applied only to selected part of image if set * add `geometric ripple filter` * add `channel copy plugin` , `triangular pixelate plugin` , `blend filter plugin` , `grayscale equalize plugin` * most point parameters in filters (eg. `centerX` , `centerY` , etc..) are now relative percentages (ie. in [0, 1] ) instead of absolute values (see examples) * use [`classy.js`](https://github.com/foo123/classy.js) for `OO` * update `buildtools` / live examples / docs __0.6.6__ * fix some issues with `Opera`, `IE` (eg. `GeometricMap` filter) * add alternative `solarize` effects * minor refactoring, optimisations, inheritance mechanism * add `turnOn()`, `turnOff()`, `isOn()`, methods for filters/plugins * typos/edits __0.6.5__ * some tidy up of the repo and files __0.6.4__ * fix `affineMap` filter of the `GeometricMap` class (was defined in wrong way) * add `YCbCrConverter` plugin filter * add `Bokeh` (Depth-of-Field) plugin filter * add `Glow` convolution filter * add another `Sepia` effect in `ColorMatrixFilter` (`sepia`) * use optimised convolutions for `3x3`, `5x5` common cases * minor edits/optimizations __0.6.3__ * add new plugin `Threshold` * minor fixes for cross-browser support * typos/edits * add `Sound Visualization` example * update examples with new filters * update readme __0.6.2__ * compatibility fixes for `IE9`, `IE10` * minor edits __0.6.1__ * new plugin `AlphaMask` * add support for `Opera`, `IE9`(slower) (browsers tested `Firefox`, `Chrome`, `IE9+`, `Opera`) * minor fixes/edits * add sound visualization example with `Filter.js` * 3 different builds: `filter.min.js` (full), `filter.basic.min.js` (core and filters only), `filter.plugins.min.js` (plugins only) __0.6__ * faster convolution algorithm for specific (symmetric) convolution kernels (eg `laplace` kernel, `box blur` kernel, `box highpass` kernel etc..) * rename `NonLinearFilter` to `StatisticalFilter` (make sure to change that in your code if a `NonLinearFilter` was used) * add new image methods (`clear`, `fill` etc..) * add new `composite` filter methods (`removeAt`, `insertAt`, etc..) * add new `geometric` maps (`twirl`, `sphere`, `rotateCW`, `rotateCCW`) * add new `color matrix` methods (`YcbCr2RGB`, `RGB2YCbCr`) * add new `lookup table` methods (`extract`, `replace`, `mask`) * add new color transforms (`HSV2RGB`, `RGB2HSV`) * add new plugins (`HueExtractor`, `HSVConverter`) * optimise `Pixelate` plugin * minor other optimizations * naming changes for some internal variables __0.5__ * add new generic filters (`GeometricMap`, `Combine`, `Split`) * add new plugin (`Pixelate`) * heavy convolution and loops optimizations, refactoring * update examples / readme __0.4.1__ * add new filters implementations (`exposure`, `mask` etc..) __0.4__ * add new `Image` methods ( `scale`, `flipHorizontal`, `flipVertical` ) * add new generic filter type `FILTER.TableLookupFilter` and some pre-computed filters ( `posterize`, `solarize`, etc..) * minor edits/optimizations * update readme / examples __0.3.3.1__ * load a video as `FILTER.Image` (fixed) * add new interactive real-time video post-process example with `Filter.js` __0.3.3__ * allow framework to be extended by custom plugins (both as `Classes` and `Inline`) * add some sample custom plugins (`Equalize.js`, `RGBEqualize.js`, `Noise.js`) * add more methods to `Image` Class (`getPixel`, `setPixel`) * minor optimizations * new build tool * update examples / readme __0.3.2__ * add new `ColorMatrixFilters`, `channel()` : get a generic color channel as an image, `swapChannels()` : swap two image channels (eg `FILTER.CHANNEL.GREEN`, `FILTER.CHANNEL.BLUE`) __0.3.1__ * add more methods to `Composite` Filter (`shift`/`unshift` etc..) * allow other composite filters to be used as simple filter components in other composite filters (fixed) * add new `ColorMatrixFilters`: `redChannel`, `greenChannel`, `blueChannel`, `alphaChannel` * minor optimizations __0.3__ * Add new filters (eg `Gradients`, `Gaussian`, `Median`, `Erode`, etc..) * Refactor the filter API (filter `apply` function accepts a `FILTER.Image` now) * Optimise the image and filters classes (cache data if possible, minimise copies, optimise loops etc..) * Minor math optimizations and micro-optimizations * Add `Composite` filters stack (applyin multiple filters on same image is faster and easier this way) * Add `Color` Transforms class (to/from `Hex`/`RGB`, to/from `RGB`/`YCbCr` etc..) * update examples/readme __0.2__ * Refactored Code to use closures (more modular) * Added `exCanvas` script for Browsers that do not support Canvas * minimum math optimizations __0.1__ * initial release