Ich mache eine Übung, bei der ich das Histogramm eines Bildes durch Ablesen des Wertes jedes Pixels darstellen muss. Dann ist es meine Idee, jede Farbschicht (r, g, b) zu durchlaufen und für jedes Pixel den Wert in einer Matrix zu speichern. Der folgende Code läuft aber da sieht es nicht richtig aus und ich bin mir nicht ganz sicher warum. Das erste Problem ist, dass das Diagramm kein Histogramm mit vertikalen Balken und gestapelten Werten ist (wie kann ich das erreichen) und das zweite Problem ist, dass das Diagramm seltsam ist, da es scheint, als würden die gleichen Werte für r, g und b angewendet ist nicht möglich mit den Bildern, die ich benutze. Hilfe? Vielen Dank!Matlab-Histogramm (mit for-Schleifen)
clc;
clear;
%% init values
% loading initial image
init_img = imread('face-1.jpg');
% rgb matrixes
r = zeros(256, 1);
g = zeros(256, 1);
b = zeros(256, 1);
%% main loop
% for each colour (r-g-b)
for a = 1:size(init_img, 3)
% loop through eache layer of the image
for i = 1:size(init_img, 1)
for j = 1:size(init_img, 2)
if(a == 1)
for n = 1:size(r,1)
if(n == init_img(i, j, 1))
% get value (x) from n(th) row, column 1
x = r(n, 1);
r(n, 1) = x+1;
end
end
elseif(a == 2)
for n = 1:size(g,1)
if(init_img(i, j, 1) == n-1)
% get value (x) from n(th) row, column 1
x = g(n, 1);
g(n, 1) = x+1;
end
end
elseif (a == 3)
for n = 1:size(b,1)
if(init_img(i, j, 1) == n-1)
% get value (x) from n(th) row, column 1
x = b(n, 1);
b(n, 1) = x+1;
end
end
end
end
end
end
%% plot
plot(r, 'Red');
hold('on');
plot(g, 'Green');
hold('on');
plot(b, 'Blue');
, warum Sie nicht nur die auf dem Bild hist Funktion ? –
Sie zeichnen keine Histogramme, sondern die Plot-Funktion, die nur einzelne Punkte darstellt. Verwenden Sie hist oder bar, um die gewünschten Diagramme zu erhalten. – Eppicurt