0

I have calculated 3 histograms for an rgb image using imhist function in Matlab, one for each channel. I want to plot these histograms on the same graph, where for instance, the histogram for the first (red) channel stretches on the x axis from 0 to 255, the histogram for the second channel stretches from 256 to 511, and finally the histogram for the third channel stretches from 512 to 767. How can I do this?

dahlia
  • 21
  • 4
  • You really want to have them in the same graph? Or you want 3 subplots in one figure? – Matt Jun 20 '15 at 11:53

1 Answers1

2

Assuming uint8 precision, each call to imhist will give you a 256 x 1 vector, and so you can concatenate these together into a single 768 x 1 vector. After, call bar with the histc flag. Assuming you have your image stored in im, do this:

red = imhist(im(:,:,1));
green = imhist(im(:,:,2));
blue = imhist(im(:,:,3));
h = [red; green; blue];
bar(h, 'histc');

As an example, using the onion.png image that's part of the image processing toolbox:

im = imread('onion.png');

This is what the image looks like:

Using the above code to plot the concatenated histogram produces this graph:

enter image description here

rayryeng
  • 102,964
  • 22
  • 184
  • 193
  • 1
    Yeah, I made a mistake, what I meant to say was 0-255, and so on. This worked wonderfully. Thank you! – dahlia Jun 20 '15 at 14:22