A package to compute an image segmentation map via the spatial-spectral pixel clustering algorithm of Hebert & Macaire (https://ieeexplore.ieee.org/document/4529995), developed for use in astronomical image processing.
The basic algorithm is run via the SpatialColorClassifier object. For example, given a data array
d with shape (n_color_dimensions, n_x, n_y), you can get a new image with shape (n_x, n_y) and
values [-1, n_clusters) via:
>>> scc = sc_classifier.SpatialColorClassifier(d)
>>> image_segments = scc.get_clusters()
You can add additional keyword arguments that control how the segments are determined.
Additionally, the package contains two algorithms to denoise the resulting maps. grow() fills in
pixel values of -1 (unknown segment) with the mode of the surrounding pixels. maxpool() runs a 3x3
maxpool algorithm that prioritizes densely clustered segments over more diffuse segments, and is
useful if a large area has been divided into two interlaced color segments, at the expense of
growing or shrinking contiguous regions by a few pixels.
The algorithm relies on an internal matrix that is size (n_color_pixels)**(n_color_dimensions),
where n_color_pixels is the number of pixels used in the internal color pixelization scheme.
Therefore, high-dimensional color spaces are demanding in both computation time and memory usage.
sc_classifier.pca_reduce applies the scikit-learn PCA routine to a data cube to reduce its
color dimensionality.
Two example scripts can be found in the examples/ directory. get_clusters_from_file.py runs the
algorithm on a user-defined FITS file.  get_clusters_from_array.py runs the algorithm on a
user-defined data cube. Both can be run with the --help option to see available command-line
arguments.