- the required number of colors.
- a function handle that converts from sRGB to some kind of uniform colorspace (e.g. CIELab, OKLab, DIN99, DIN99o, OSA-UCS, CAM02-LCD, CAM02-UCS, CAM16-LCD, CAM16-UCS, etc.).
- Limit the lightness range.
- Limit the chroma range.
- Provide a colormap of colors to be excluded (e.g. background colors).
- Provide a colormap of colors to be included (e.g. company colorscheme).
- Specify the RGB bit depth (e.g. 8 bits per channel, TrueColor).
- Sort the colormap (e.g. by hue, chroma, lightness, farthest colors, etc.).
- Existing "distinct color" generators use inadequate colorspaces and/or algorithms, leading to suboptimal color distinctiveness.
- The realization that 64 bit PCs with >8 GB of RAM can operate on the entire 16 million colors of 24 bit TrueColor, allowing for neat and simple vectorized MATLAB code.
- An algorithm to find the best color combination requires finding the global optimum, a task which grows exponentially with the number of requested colors and with the color gamut size. In MAXDISTCOLOR I use repeated application of a simple greedy algorithm to find the maximally-distinct colors: the repeated greedy algorithm is not particularly fast and is not a general solution for finding a global optimum, but luckily it gives good results for the regularly sampled RGB cube. Note that this algorithm contains no random numbers: it is entirely deterministic and repeatable.
- Defining a true uniform colorspace: the venerable CIELab (used by most existing tools I could find) is not really very uniform, particularly around the blues/greens. For MAXDISTCOLOR I recommend CAM02-LCD or CAM02-UCS or CAM16-LCD or CAM16-UCS or OKLab or OSA-UCS, all of which provide a more accurate measure of the color distance.
Stephen23 (2023). Maximally Distinct Color Generator (https://www.mathworks.com/matlabcentral/fileexchange/70215-maximally-distinct-color-generator), MATLAB Central File Exchange. Retrieved .
MATLAB Release Compatibility
Platform CompatibilityWindows macOS Linux
Inspired by: Generate maximally perceptually-distinct colors, colorSpectrum: Create N Distinct Plot Colors, Tol colors, Convert between RGB and Color Names, CubeHelix Colormap Generator: Beautiful and Versatile!, ColorBrewer: Attractive and Distinctive Colormaps, Custom Colors for Plots, Intuitive RGB color values from XKCD, Beautiful and distinguishable line colors + colormap, Color name identification: fuzzycolor
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!
* Colorspace detection moved to within the main function.
* Minor edits to help and documentation.
* Add OKLab colorspace conversion function.
* Add <sort> option 'chroma'.
* Text arguments can be string scalar or char vector.
* Third output is a structure of greedy algorithm status information.
Update example image.
* Spelling corrections.
* Add OSA-UCS function.
* Improve FEX examples.
* Add error codes.
* Update screenshot
* Add DIN99 conversion function.
Fix time display.
Add correct screenshot.
* Use new CIECAM02 version for documentation.
Add interactive viewer function
Change default to [6,7,6] bits.
Add FEX image
Add links to HTML.