2017-12-30 30 views
0

Ich versuche, ein vertikales Histogramm eines binären Bildes zu machen. Ich möchte die Funktionen von MATLAB nicht verwenden. Wie es geht?Histogramm des binären Bildes in MATLAB

Ich habe diesen Code versucht, aber ich weiß nicht, ob es richtig ist oder nicht:

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 

Das Bild ist:

The picture

Das Ergebnis:

vertical histogram

Warum kann ich den Wert nicht sehen? von schwarzen Pixeln im Histogramm?

+0

Sie können diesen Link http://ciphervision.com/ für eine detaillierte Implementierung und Demo in Javascript besuchen. – flamelite

Antwort

1
% 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]); 

Ausgang:

BW Histogram

Für das, was Ihren Code betrifft, ist es nicht zu zählen schwarze Pixel, da sie einen Wert von 0 und Ihren Loop-Start von 1 haben ... es wie folgt umschreiben :

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 

Aber denken Sie daran, dass auf einem binären Bild alle Byte Vorkommen gezählt (das kann nur conta in 0 oder 1 Werte) ist irgendwie sinnlos und wird Ihr Histogramm fehlt Lesbarkeit. Als Randnotiz sollten Sie vermeiden, image als Variablenname zu verwenden, da dies an existing function überschreiben würde.

+0

Belluzo: Ich wollte das vertikale Histogramm eines binären Bildes, so dass ich als nächstes zählen kann, wie viele Buchstaben auf dem Bild basierend auf dem Histogramm stehen, ist es mit Ihrer Methode möglich? und danke – dEs12ZER

+0

Was? Anzahl der Buchstaben ?! Sie können sie nicht mit diesem Ansatz zählen ... –

+0

Ich habe den Beitrag bearbeitet Sie können das echte Binärbild sehen, es zählt 11 Zeichen, ich habe ein Projekt, in dem ich ein vertikales Histogramm des Binärbildes machen sollte, und danach das, ich sollte eine Methode implementieren, die die Anzahl der Zeichen im Bild zählt, können Sie eine Lösung vorschlagen? – dEs12ZER

0

Wie in den obigen Kommentaren unter @beaker erwähnt, bezieht sich vertikales Histogramm in solchen Fällen im Allgemeinen auf eine vertikale Projektion. Hier ist ein Weg, dies zu tun:

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]) 

Sie können weiter für 0->1 Übergänge überprüfen die Anzahl der Zeichen zu zählen sum(diff(I5)>0) verwendet, die in diesem Fall 13 als Antwort gibt.

Verwandte Themen