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