2017-10-23 3 views
0

Also ich möchte die RGB-Werte eines Bildes in einem Histogramm platziert und dann wird dieses Histogramm mit anderen Bild Histogramm verglichen werden. Derzeit dies der Code ist:Vergleichen von Histogrammen von RGB-Werten aus Bild in Matlab

if (size(cimg, 3) ~= 3) 
error('rgbhist:numberOfSamples', 'Input image must be RGB.') 
end 
nBins = 256; 
rHist = imhist(cimg(:,:,1), nBins); 
gHist = imhist(cimg(:,:,2), nBins); 
bHist = imhist(cimg(:,:,3), nBins); 
hFig = figure; 
%figure 

subplot(1,2,1);imshow(cimg) 
subplot(1,2,2); 
hold on 
h(1) = stem(1:256, rHist); %hold on 
h(2) = stem(1:256 + 1/3, gHist, 'g'); 
h(3) = stem(1:256 + 2/3, bHist, 'b'); 
hold off 
set(h, 'marker', 'none') 
set(h(1), 'color', [1 0 0]) 
set(h(2), 'color', [0 1 0]) 
set(h(3), 'color', [0 0 1]) 
axis square 

Der Code gibt das Bild zusammen mit seinem RGB-Histogramm-Wert, wie kann ich das Histogramm verwendet Sie es mit anderen Histogrammen zu vergleichen, so dass ich möglicherweise das Bild klassifizieren könnte fast die als mit gleiche Farben wie bei einem anderen Bild?

Antwort

1

Sie könnten Kullback Leibler Divergence verwenden, um den Abstand zwischen 2 Histogrammen zu berechnen.
Dies ist einfach, da Sie das Histogramm als Verteilung behandeln können.

Da die KL-Divergenz nicht symmetrisch ist, könnte man sie zweimal berechnen (nämlich [X, Y] und [Y, X]) und den Mittelwert nehmen.

Verwandte Themen