# How to classify images based on the amount of colors in the image?

I have a problem where all images have the same object; however, these objects can either have number_of_colors<=3 OR number_of_colors>3 and images are not labeled.

My attempt starts by converting RGB to LAB and Consider only the A & B to find the color coverage of that image. I was thinking of it as an area on the AB space. So for every image, I found the range of A and B (i.e max(A)-min(A), max(B)-min(B)) and multiplied them together to get the area, assuming it's a rectangle. Then I threshold using this feature.

Here is the confusion matrix:

• TP: 0.41935483871, FN: 0.0645161290323
• FP: 0.0967741935484, TN: 0.41935483871

### Here is the basic routine the should work per image

    LAB = rgb_to_lab(data_rgb[...,0],data_rgb[...,1],data_rgb[...,2])
A = LAB[1]
B = LAB[2]

minA,maxA = np.min(A),np.max(A)
minB,maxB = np.min(B),np.max(B)

diff_A = maxA - minA
diff_B = maxB - minB

area = diff_A * diff_B
# p is the normalized area
p = area/(200*200.)
# Found 0.5 to be the best possible threshold
if p >0.53:
print 'class 1 - colors > 3'
else:
print 'class 2 - colors <= 3'


Please let me know if my intuition is correct and why it isn't working. I have no experience in image processing. I would love to know what is the standard way to do this. I could manually find the range of each color in Hue after converting to HSV but it seems too specific which might not handle all the colors in the test set.