color histogram?

Wilhelm Sanke sanke at hrz.uni-kassel.de
Fri Jul 8 18:24:36 EDT 2011


On Fri Jul 8, 2011, Jim Ault jimaultwins at yahoo.com wrote:


> On Jul 7, 2011, at 11:08 PM, Chipp Walters wrote:
>
> > Hey guys, I'm building another education app for a state school
> > system, and
> > this time I'm creating a skinnable themed desktop, which kids can
> > add their
> > own wallpaper to. I'm wondering if anyone has a quick routine to
> > calculate
> > the 'main' colors of an image-- so I could automatically theme the
> > button
> > colors and some other objects.
> >
> > If not, I'll have to write my own. Thx.
> >
>
>
> You could take a look at Wilhem Sanke's ImageData Toolkit at
>      http://www.sanke.org/MetaMedia/Samples.htm
>
> and here is a blast from the past you might appreciate Chipp
>
> http://runtime-revolution.278305.n4.nabble.com/ANN-quot-Imagedata-Toolkit-2-quot-released-td349536.html
>
> Hope this helps.
>
> Jim Ault
> Las Vegas

and
Chipp Walters chipp at chipp.com answered:


> Thanks Jim. That is a blast from the past. In fact, I'm pretty sure I 
> wrote
> the first convolve matrix which Wilhelm used for his earlier work. I wrote
> it to create blurred shadows for ButtonGaget and to help with some image
> compositing.
>
> I suspect I'll have to write my own imagedata parser and do the necessary
> math. It takes time... ;-(


Hello Chipp,

You know that I have mentioned you as the author of the first convolve 
matrix fully scripted in Metacard/Revolution time and again at various 
places. For example, I refer to you in the script of button "scripted 
version" in my stack "Imagedata Toolkit Preview 3" 
<http://www.sanke.org/Software/ImagedataToolkitPreview3.zip>, and - as 
another example - I have given a detailed description of the transition 
steps from your original script to a speed-optimized version I use today 
(to which Mark Waddingham also contributed) even a few weeks ago in my 
post <""Blurred vision" of Rev Newsletter, Apr 21"> to this list on 
April 26, 2011.

Concerning your question how to

"calculate the 'main' colors of an image-- so I could automatically 
theme the  button colors and some other objects"

with the help of a histogram

I am not exactly sure what you intend to do, Are you looking for one or 
several "main colors" of an image to use with your buttons and other 
objects? And how to you intend to proceed from the various possible 
representations of a color histogram (for each of the RGB values, for 
the gray or even the hue values in HSV) to get one or several "main colors"?

A general recipe to create histograms can be found in Wikipedia under items

  "image histogram" and "color histogram". Maybe you could also use the 
free "Gimp" program and use the histogram data of an image from there?

To write your own histogram tool should be relatively easy in principle:

- Get the RGB values of each pixel of an image (or a selected area of an 
image).
- count the number of occurences for each color of the RGB triple and 
for each value 0 to 255
- show the accumulated numbers for each value category 0 to 255 in a chart.

Thus you can get separate histograms for each of the three RGB colors or 
one for the gray values when you average the RGB values before.

To find one single "main" color of an image, you could sum up all values 
for the three components R, G, and B separately and calculate the 
average for each component.

Another approach would be to get the "hue" values of the image pixels 
using Scott Raney's RGBtoHSV function to be found in the Metacard "Color 
Chooser" and Livecode's "revcolorchooser" stacks (the latter of which is 
no longer actively used in the Livecode IDE, but has remained in the 
"Toolset" folder).
Raney's function unfortunately is very slow when it comes to calculate 
all pixels of a medium-sized image, I prefer faster RGBtoHSL and 
HSLtoRGB functions that I have ported to Livecode from examples found in 
the net.

I have so far not had a reason to use color histograms in my different 
image-processing stacks, but experimented with a number of other 
routines to set general parameters of images like "white balance", "mid 
balance", "black balance", "gamma correction", "dynamic range", 
"saturation", "set chroma", "brighten/darken", "contrast", "shift hues" 
etc. etc.-

I take it that most of the things I mentioned in this context here are 
certainly not new to you, but if you could be a bit more specific about 
what you intend to achieve I could possibly also come up with an idea or 
two.

Best regards,

Wilhelm Sanke






More information about the use-livecode mailing list