/ / Crea diagramma istogramma senza imhist - matlab

Crea un diagramma dell'istogramma senza imhist - matlab

Sto cercando di creare un istogramma di un'immagine senza usare la funzione imhist. Come posso replicare questo senza usare imhist?

originalImage = imread("hips.png");
imhist(originalImage); title("Histogram with Matlab");

So che dovrei creare un array 2D e andare su ogni pixel con un ciclo 2 per loop, ma non so cosa fare dopo.

Grazie.

risposte:

3 per risposta № 1

È possibile utilizzare la funzione hist per ottenere il numero di pixel per ciascun valore di frequenza. Quindi è necessario implementare la parte di disegno.

Il codice è mostrato di seguito:

function myimhist(img)
img = im2uint8(img);

[count,bin] = hist(img(:), 0:255);
stem(bin,count, "Marker","none")

hAx = gca;
set(hAx, "XLim",[0 255], "XTickLabel",[], "Box","on")

%# create axes, and draw grayscale colorbar
hAx2 = axes("Position",get(hAx,"Position"), "HitTest","off");
image(0:255, [0 1], repmat(linspace(0,1,256),[1 1 3]), "Parent",hAx2)
set(hAx2, "XLim",[0 255], "YLim",[0 1], "YTick",[], "Box","on")

%# resize the axis to make room for the colorbar
set(hAx, "Units","pixels")
p = get(hAx, "Position");
set(hAx, "Position",[p(1) p(2)+26 p(3) p(4)-26])
set(hAx, "Units","normalized")

%# position colorbar at bottom
set(hAx2, "Units","pixels")
p = get(hAx2, "Position");
set(hAx2, "Position",[p(1:3) 26])
set(hAx2, "Units","normalized")

%# link x-limits of the two axes
linkaxes([hAx;hAx2], "x")
set(gcf, "CurrentAxes",hAx)
end