On Sat, 10 Sep 2011, Sebastian Valenzuela wrote:
I am in the process of writing an algorithmic piece where I take pictures, determine the most prevalent color in that picture, then store that as a number in an array. I would then call on these numbers to determine the triggering of samples. Is there an object in Pure Data that can determine the most common color in an image? If so, how does it work?
To be able to do this, you need to be defining how to clusterise your colours. For example, if you just classify them by their exact value, you might get a lot of a very specific shade, and select that, and miss the fact that there is another shade that looks very close to a lot of other shades in the picture, and so, by different criteria, it would be the most common.
What would match the perception of the human eye and most people's expectation, is something that picks the average of a bunch of very similar shades. That's not very obvious to do.
[cv/#KMeans] (from GridFlow's OpenCV wrappers) does something like that : it categorises the pixels in your image to make a palette (among multiple possible uses). Then you can use GridFlow's [#cluster_avg] to find the average colour of each palette item.
However, the palette items are not the best that can possibly be chosen, because it's impossible to guarantee it, and it's hard to do a good job in a short time. So sometimes it could pick too many palette items for the same kind of colours, and mislead you in finding the most used kind of colour.
| Mathieu Bouchard ---- tél: +1.514.383.3801 ---- Villeray, Montréal, QC