-4

Ich habe eine Reihe von Bildern mit abnehmender Helligkeit, die ich gerne mit Histogramm-Entzerrung korrigieren würde. Ich histeq auf einige Testdaten angewandt zu lernen, wie die FunktionHistogramm-Entzerrung liefert unerwartete Ergebnisse

% Image that I would like to apply histogram equalization to 
C = gallery('wilk',21); 
figure, imagesc(C) 

E = histeq(C); 
figure, imagesc(E); 

funktioniert jedoch, wenn ich am Ausgang der histeq aussehen, bekomme ich ein Ergebnis, das nur zwei eindeutige Werte hat: 0.873 und 1.000. Wie kommt es, dass die Ausgabe nicht den gesamten Bereich der Eingabe umfasst? Ich würde erwarten, dass es mehr als zwei eindeutige Werte in der Ausgabe gibt.

enter image description here

+1

Warum gehst du nicht einfach tun 'imhist'? Er akzeptiert ein Bild und gibt ein Histogramm in einer Figur aus. Was kommt 'unique (C)' auch zurück, nachdem das Histogramm ausgeglichen wurde? – rayryeng

+0

Bitte zeigen Sie Ihren Histogramm-Ausgleichscode an. In der Zwischenzeit, hast du 'histeq' versucht? – rayryeng

+0

Ah. Ich habe gerade bemerkt, was die Eingabe jetzt ist. Es funktioniert nicht, weil die Eingabe, die Sie angeben, Mist für die Histogrammentzerrung ist. Der dynamische Bereich und die Intensitätsverteilung sind sehr klein, was den Bereich sprengen wird, sobald Sie ihn "normalisieren". Wir empfehlen Ihnen, sich vor der Verwendung der Histogrammentzerrung zu informieren. Versuchen Sie dies auf einem tatsächlichen Bild, bevor Sie fortfahren. Verwenden Sie beispielsweise das Image Processing Toolbox-Bild: 'C = imread ('pout.tif');'. – rayryeng

Antwort

2

Gemäß der Dokumentation für histeq, wenn der Eingang vom Typ double oder single es wird erwartet, dass im Bereich sein: [0, 1].

Intensitätswerte in dem entsprechenden Bereich: [0, 1], um Bilder der Klasse Doppel, [0, 255], um Bilder der Klasse uint8 und [0, 65535] für Bilder der Klasse uint16.

Ihre Daten nicht normalisiert und ist vom Typ double,

whos C 

% Name  Size   Bytes Class  Attributes 
% 
% C   21x21    3528 double  

[min(C(:)), max(C(:))] 
% 0 10 

Sie müssen es zuerst normalisiert. Sie können mat2gray, dies zu tun:

E = histeq(mat2gray(C)); 

enter image description here

+1

Sie sind wahrscheinlich mit 'imshow' geplant. 'imshow' macht die Figuren zur tatsächlichen Größe (in Pixel), so dass sie klein sind, da sie 21x21 sind. Außerdem wird standardmäßig eine' graue' Colormap verwendet. Verwende 'imagesc'. – Suever

+3

@Masi Was du gerade geschrieben hast macht für mich keinen Sinn. Es ist schwer zu sagen, was das Richtige mit Ihren Daten zu tun hat, da wir es nicht sehen können. Vielleicht stellen Sie eine neue Frage, die speziell für die Bildverarbeitung ist und zeigt, was Sie versucht haben, Ihre Daten zu korrigieren. Nehmen Sie auch die Daten selbst auf und zeigen Sie die erwartete Ausgabe an. Diese Frage bezog sich einfach auf deinen Mißbrauch von 'histeq' – Suever

+0

Wie kannst du entscheiden, welches' hgram' spezifische Matrix in 'histeq (Matrix)' anwenden soll? Wenn "Größe (Matrix)" 1 2093809 ist. Ich möchte hier keine flachen Histogramme bekommen. - - Um 'n = Größe zu erzeugen (pTFD, 2); hgram = one (1, n) * prod (Größe (pTFD))/n; 'ist ressourcenintensiv. –

Verwandte Themen