I need to automatically identify two kinds of objects in a large amount of images. Both objects are wooden with natural variations in their colors. But one is light and the other dark. Also, photos are taken in slightly different lighting conditions.
So I have two sets of color values (RGB-values of pixels belonging to each object): One "light wood set" and one "dark wood set". There are also some overlaps, i.e. pixels from dark wood which have identical color values as some pixels from light wood. Overlaps I can simply skip, that is not the important problem here.
What I have done, is to manually cut out pixels from dark and light wood respectively from some sample images. I create an "RGB-cube" consisting of all possible colors (as combinations of red, green, blue: 256^3). I donate the value "dark", "light", "overlapping" or "neither" to each and everyone of those possible colors. Presenting this RGB-cube graphically, I find two (irregular) clouds each representing its kind of wood. (Small) parts of them overlap each other.
When a pixel from a non-sampled image arrives, I look up its color value in the RGB-cube to see if that specific color value has been identified as "light wood" or "dark wood" (or both or neither) from my previous samples.
My chief problem is that these "clouds" have holes in them. The 256^3 space is large compared to the number of colors I can sample. The images I can sample do not contain all colors which truly should belong to the light set in all images. I would like values in the RGB-cube which are (almost) surrounded by the "light set" to be identified as members of the "light set".
How should I go about this problem? How do I fill the holes in the "color clouds" of the two sets of wood?