MATLAB: How to make a histogram plot show as many lines (bars) instead of one long line showing the high points

histogram

I'm working on a function that takes in a grayscale image, turns it into a matrix, then takes that info and turns it into a histogram plot. I finally got it working but my histogram plot looks like the first image (blue), and it's supposed to look like the second (black). Anyone know what I should change to fix it? My code is below
% plotting the image data into a histogram %
function p = histogram(image)
histogram = histogram_matlab(image);
plot((0:1:255),histogram);
xlabel('intensity value');
xlim([0,255]);
ylim([0 max(histogram)]);
ylabel('PMF');
end
%computing the grayscale image %
function h = histogram_matlab(imageSource)
openImage = imread(imageSource);
[m,n] = size(openImage);
h = zeros(256);
for i = 1:m
for j = 1:n
p = double(openImage(i,j))+1;
h(p) = h(p)+1;
end
end
total_pixel = m*n;
h = h./total_pixel;
end

Best Answer

Without looking at the code, I've already seen that you used `plot` instead of `histogram` or `bar` function. You see, when you use `plot` this way, it gives you a line through all the points. I think you're looking for something like
bar((0:1:255),histogram,'k'); %'k' is black
It will look something like this (tested with a random image)
  • More info on `bar` here
  • More info on build-in `histogram` function here
  • If you have the 'Image Processing Toolbox', check imhist