2016-07-23 7 views
2

Ich versuche, Histogramm-Entzerrung von mir selbst zu kodieren, aber die Ergebnisse unterscheiden sich von der eingebauten Funktion in Matlab histeq. Irgendwelche Vorschläge warum ist das passiert ?. Ich habe den Code und die Ergebnisse angefügt. output imagesoutput histogramsHistogramm-Entzerrung Ergebnisse

%% Histogram Equalization 
close all 
clear all 
%% 
I = imread('Iris_virginica.jpg'); 
grayI = rgb2gray(I); 
[m,n] = size(grayI); 
L = 256; 
[counts,x] = imhist(grayI); 
myCDF = cumsum(counts)/(m*n); 
equalizedI = (L-1)*myCDF(double(grayI)+1); 
equalizedI = uint8(equalizedI); 
histMyOut = imhist(equalizedI); 
builtInEqualizationI = histeq(grayI); 
histBuiltInEqu = imhist(builtInEqualizationI); 
%% 
figure 
subplot(1,3,1), stem(x,counts), title('Histogram'); 
subplot(1,3,2), stem(x,myCDF), title('Commulative Distribution'); 
subplot(1,3,3), stem(x,imhist(equalizedI)), title('Equalized'); 

figure 
subplot(1,3,1),imshow(grayI), title('Input image'); 
subplot(1,3,2), imshow(equalizedI), title('Equalized image (mine)'); 
subplot(1,3,3), imshow(builtInEqualizationI), title('Equalized image (matlab)'); 

figure 
subplot(1,3,1), stem(x,counts), title('Histogram'); 
subplot(1,3,2), stem(x,histMyOut), title('Equalized Histogram (mine)'); 
subplot(1,3,3), stem(x,histBuiltInEqu), title('Equalized Histogram (matlab)'); 

difference = abs(equalizedI-builtInEqualizationI); 
figure, imshow(difference,[]); 

Antwort

2

histeq verwendet standardmäßig 64 Bins Ihr Histogramm entzerren. Sie verwenden die Standardimplementierung histeq. Versuchen Sie folgendes:

builtInEqualizationI = histeq(grayI, 256); 

... um 256 Bins für die Entzerrung anzugeben, da Ihr manueller Code so viele Bins für die Entzerrung verwendet. Der zweite Parameter überschreibt den Standardwert und informiert histeq, so viele Bins für die Entzerrung zu verwenden.

+0

Ja, die Ergebnisse sind jetzt sehr nah, aber der Unterschied zwischen den beiden Bildern ist immer noch nicht null. – Misaki

+0

Wahrscheinlich aufgrund von Gleitkommafehlern. Aktualisieren Sie Ihren Post dann. – rayryeng

+0

Ich habe die Nicht-Null-Bins im Histogramm von der Matlab-Funktion gezählt und sie sind nicht 32 !. Wie kann ich die Anzahl der Bins in meiner Implementierung hinzufügen? – Misaki