ncolorpalette-clusterer
Group an array of pixels using k-means clustering as efficiently as possible.
Usage
var Clusterer = ; // Input can be any array-like object.var cvs = documentvar ctx = cvs;var input = ctx; var c = inputdata // listing defaults: // how many clusters to find clusters: 4 // input data is logically grouped by 4 indices (r,g,b,a) dataFactor: 4 // `false` is faster, but will lock the event loop on large images async: true // what function to use when computing pixel difference, default // is rgba distance (which is not ideal) {}; c;
Efficiency
The clusterer uses several primary techniques to be as efficient as possible in terms of execution speed and garbage creation:
- A pixel is always represented as 4 uint8 integer values in contiguous TypedArrays, never as intermediate objects (like
{r: 0, g: 0, b: 0, a: 255}
or[0, 0, 0, 255]
). - "Pointers" to pixels are stored in preallocated TypedArrays that simply point at the index of the
r
(red) value in the original input data.
The speed of this package could be improved in a few ways, but primarily through algorithm changes, such as creating an index of unique pixel colors for large images.
License
MIT