Detecting a blob of color in an image

Malfist picture Malfist · Jan 24, 2011 · Viewed 9.6k times · Source

I have an image that is a depth heatmap that I've filtered out anything further away than the first 25% of the image.

It looks something like this: enter image description here

There are two blobs of color in the image, one is my hand (with part of my face behind it), and the other is the desk in the lower left corner. How can I search the image to find these blobs? I would like to be able to draw a rectangle around them if possible.

I can also do this (ignore shades, and filter to black or white): enter image description here

Answer

jprete picture jprete · Jan 24, 2011

Pick a random pixel as a seed pixel. This becomes area A. Repeatedly expand A until A doesn't get any bigger. That's your area.

The way to expand A is by looking for neighbor pixels to A, such that they have similar color to at least one neighboring pixel in A.

What "similar color" means to you is somewhat variable. If you can make exactly two colors, as you say in another answer, then "similar" is "equal". Otherwise, "similar" would mean colors that have RGB values or whatnot where each component of the two colors is within a small amount of each other (i.e. 255, 128, 128 is similar to 252, 125, 130).

You can also limit the selected pixels so they must be similar to the seed pixel, but that works better when a human is picking the seed. (I believe this is what is done in Photoshop, for example.)

This can be better than edge detection because you can deal with gradients without filtering them out of existence, and you don't need to process the resulting detected edges into a coherent area. It has the disadvantage that a gradient can go all the way from black to white and it'll register as the same area, but that may be what you want. Also, you have to be careful with the implementation or else it will be too slow.