Best algorithm for matching colours.

13,375

Solution 1

Convert all of the colors to the CIE Lab color space and compute the distance in that space

deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2)

Colors with the lowest deltaE are the most perceptually similar to each other.

Solution 2

No, you do not need neural networks here! Simply consider an HSL color value a vector and define a weighted modulus function for the vector like this:

modulus = sqrt(a*H1*H1 + b*S1*S1 + c*L1*L1);

where a,b,c are weights you should decide based on your visual definition of what
creates a bigger difference in perceived color - a 1% change in Hue or a 1%
change in Saturation

I would suggest you use a = b = 0.5 and c = 1

Finally, find out the range your modulus would take and define similar colors to be those which have their moduli very close to each other (say 5%)

Solution 3

I'd also point out the least squares method, just as something slightly simpler. That is, you take the difference of a number, square it, then sum all these squared differences.

Share:
13,375
Maciek Sawicki
Author by

Maciek Sawicki

http://www.linkedin.com/in/macieksawicki http://twitter.com/viroos

Updated on June 27, 2022

Comments

  • Maciek Sawicki
    Maciek Sawicki almost 2 years

    I have an array of around 200 colours in RGB format. I want to write a program that takes any RGB colour and tries to match a colour from the array that is most "similar".

    I need a good definition for "similar", which is as close as possible to human perception.

    I also want to show some information about matching accuracy. For example black-white: 100% and for a similar colour with a slightly different hue: -4%.

    Do I need to use neural networks? Is there an easier alternative?