Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best algorithm for matching colours.

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?

like image 709
Maciek Sawicki Avatar asked Nov 05 '09 05:11

Maciek Sawicki


People also ask

What is best matching algorithm?

BM25 [5] is the Best Matching ranking algorithm that ranks the documents according to its relevance to the given search query.

How do you match two colors together?

Match complementary colors. When you place them next to each other, they help each other stand out and the combination looks appealing. Complementary colors of the same brightness and hue will always work well together. Popular complementary combinations include blue and orange, purple and yellow, and green and pink.


2 Answers

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.

like image 81
hobbs Avatar answered Sep 22 '22 03:09

hobbs


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%)

like image 21
KJ Saxena Avatar answered Sep 25 '22 03:09

KJ Saxena