Maximally Distinct Color Generator
- the required number of colors.
- a function handle that converts from sRGB to a uniform colorspace (e.g. CIELAB, DIN99, OSA-UCS, CAM02-UCS, 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. For MAXDISTCOLOR I recommend OSA-UCS or CAM02-UCS or CAM16-UCS, all of which provide a more accurate measure of the color distance.
Cite As
Stephen23 (2022). Maximally Distinct Color Generator (https://www.mathworks.com/matlabcentral/fileexchange/70215-maximally-distinct-color-generator), MATLAB Central File Exchange. Retrieved .
MATLAB Release Compatibility
Platform Compatibility
Windows macOS LinuxCategories
Tags
Acknowledgements
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!Discover Live Editor
Create scripts with code, output, and formatted text in a single executable document.