dEs12ZER
dEs12ZER

Reputation: 848

Histogram of binary image in MATLAB

I'm trying to do a vertical histogram of a binary image. I don't want to use MATLAB's functions. How to do it?

I have tried this code but I don't know if it's correct or not:

function H = histogram_binary(image)
[m,n] = size(image);
H = zeros(1,256);
for i = 1:m
    for j = 1:n
        H(1,image(i,j)) = H(1,image(i,j))+1;
    end
end

The image is:

The picture

The result:

vertical histogram

Why can't I see the value of black pixels in the histogram?

Upvotes: 0

Views: 1427

Answers (2)

Saurabh Saini
Saurabh Saini

Reputation: 196

As mentioned by @beaker in the comments above, vertical histogram in such cases generally refers to a vertical projection. Here is a way to do this :

I = imread('YcP1o.png'); % Read input image
I1 = rgb2gray(I); % convert image to grayscale
I2 = im2bw(I1); % convert grayscale to binary
I3 = ~I2; % invert the binary image
I4 = sum(I3,1); % project the inverted binary image vertically
I5 = (I4>1); % ceil the vector 
plot([1:1:size(I,2)],I5); ylim([0 2])

You can further check for 0->1 transitions to count the number of characters using sum(diff(I5)>0) which gives 13 as answer in this case.

Upvotes: 0

Tommaso Belluzzo
Tommaso Belluzzo

Reputation: 23675

% Read the binary image...
img = imread('66He7.png');

% Count total, white and black pixels...
img_vec = img(:);
total = numel(img_vec);
white = sum(img_vec);
black = total - white;

% Plot the result in the form of an histogram...
bar([black white]);
set(gca(),'XTickLabel',{'Black' 'White'});
set(gca(),'YLim',[0 total]);

Output:

BW Histogram

For what concerns your code, it is not counting black pixels since they have a value of 0 and your loop start from 1... rewrite it as follows:

function H = histogram_binary(img)
    img_vec = img(:);
    H = zeros(1,256);

    for i = 0:255
        H(i+1) = sum(img_vec == i);
    end
end

But keep in mind that counting all the byte occurrences on a binary image (that can only contain 0 or 1 values) is kinda pointless and will make your histogram lack readability. On a side note, avoid using image as a variable name, since this would override an existing function.

Upvotes: 1

Related Questions