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?
Asked
Active
Viewed 1,870 times
0
-
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 Answers
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:

rayryeng
- 102,964
- 22
- 184
- 193
-
1Yeah, 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