# Thread: How to find closest overall color match

1. ## How to find closest overall color match

I want to create an image made up of many separate images of similar but different flowers. I want to select the ones that are the closest in overall color to each other. I can do this by just looking at them, but I wondered if there might be a formula I could use to assess them mathematically.

The IV Histogram feature is handy for finding the average RGB values over a selected area. If I do that for each image, is there a formula that will allow me to calculate some sort of difference between each image and some target?

In the table below, the target RGB values are in row 4 (100 150 200 = blue). In rows 6-12, various RGB values are compared. Column F has a simple sum of differences. Column G has a sum of the squares of those differences (least squares).

 R/C C D E F G H 3 R G B Comments 4 100 150 200 Target values 5 R G B Sum(Diff) Sum(Sqrs) 6 100 150 200 0 0 =Target 7 200 250 0 0 245 Reverse of target 8 101 151 201 +3 2 +1 each 9 99 149 199 -3 2 -1 each 10 101 149 201 +1 2 +1 or -1 each 11 130 150 200 +30 30 +30 in R 12 110 160 210 +30 17 +10 each 13 110 140 210 +10 17 +10 -10 +10

Row 6 has the target values and both errors are zero.

Row 7 has R & G at +100 and B at -200, so the sum of differences (F7) is zero. I think this disqualifies that method.

Rows 8-10 play with differences of 1 (plus or minus).

Rows 11-13 play with a total difference of 30 either all in one value or spread around.

The sum of differences seems like a crude measure. The sum of squares seems somewhat better.

Is there a metric that I can (easily) apply to a collection of images to determine whine ones will appear to the eye as the most similar in overall color?

Thanks  Reply With Quote

2. ## This is a hard problem. Looks like you ultimately want to use Lab color space. Maybe the square root of squared differences in a/b is good enough.

https://en.wikipedia.org/wiki/Color_difference

If you move across a basic RGB(HSL) color picker, you can see flat areas on it that change the numbers a lot, but look about the same (for example, large green/cyan area, which would encompass green leaves). But next to it is sharp yellow/red containing a lot of hues. The RGB space is clearly not perceptually uniform.

230,170,030 ████
205,230,030 ████ = 65 diff RGB

075,050,072 ████
087,-24,081 ████ = 76 diff Lab, 75 Lab (just a/b)

089,230,030 ████
030,230,070 ████ = 71 diff RGB

081,-63,073 ████
080,-70,061 ████ = 14 diff Lab, 14 Lab (just a/b)

Maybe crop the middle portion of each picture to crudely separate the subject flower from the background and downsample to 1 pixel to obtain the average color of it. Downsampling should be done in linear gamma.

Square root of squares is the right method. But the less sophisticated column F method should probably use sum of absolute differences (squaring makes differences positive for you).  Reply With Quote

3. ##  Originally Posted by j7n This is a hard problem....
Wow, great information. I think my least squares method is good enough for me for now. But when I get some free time, I want to check out some of the point you make.

Thanks  Reply With Quote