mikrocontroller.net

Forum: Offtopic Histogrammegalisierung


Autor: Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Zu dem Thema Histogrammegaliserung hab ich eine Aufgabe. Diese bereitet 
mir große Probleme. Wie kommt man von H(f) zu der Tabelle in Aufgabe 
4???

Was ist damit eigentlich gemeint: Da die Grauwerte von Null gezählt 
werden ist vom obigen gerundeten ganzzahligen Wert eins abzuziehen.

Was bedeutete diese Gleichung:
g=1/1/16 * Summe(h(f))=16*H(f) ???

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jemand ein anderes Forum, wo diese Aufgabe besser reinpasst?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der Histogrammegalisierung ist mir noch so ein Rätsel.
Das Skript, das ich dazu habe, ist ehrlich gesagt sehr schlecht.
Hat jemand eine gute Quelle, wo man sich das besser kalr machen kann?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such nach Histogram Equalization, da findest du haufenweise Erklärungen.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andreas. Da hab ich gleich mal nachgeschaut. Ich konnte nichts 
gescheites dazu finden.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann diese komische Kuh eigentlich auch was anderes, als beliebige Leute 
anpinkeln? Kriegt sie selber denn garnichts auf die Reihe?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin noch immer nicht weitergekommen. Weis von euch jemand, woher man ein 
gutes Skript zum Thema Histogrammegalisierung mit Beispielen?

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon wrote:
> Bin noch immer nicht weitergekommen.

Ich kann dir hier die Theorie nicht erklären (vor allen Dingen
weil ich sie selber nicht kenne), aber es ist doch nicht
schwer aus den Zahlen den Rechengang zu extrahieren:

Du hast die Pixelverteilung:
0   4350
1   28780
2   34506
...

Mit der Gesamtzahl der Pixel (686 * 484 = 332024 ) ergibt sich daher
eine 'prozentuale' Verteilung

0 4350    4350 / 332024 = 0.0131
1 28780                   0.08668
2 34506                   0.1039
....

Das ist die Tabelle h(f)

Würde man sich das als Graphik anzeigen lassen (x: Grauwert,
y: Häufigkeit) dann ergibt sich eine Balkengrafik, bei der jeder
Balken die Häufigkeit eines Grauwertes angibt.

Jetzt summiert man für jeden Grauwert seine Häufigkeit und die
Häufigkeit aller Grauwerte die kleiner sind.

0   0.0131                                0.0131
1   0.0131 + 0.08668                      0.09978
2   0.0131 + 0.08668 + 0.1039             0.20368
3   ...............
...
15                                        1.0

Das ist die Tabelle H(f)

trägt man diese Zahlen wieder in einer Grafik auf, dan repräsentiert
jeder Balken den Anteil aller Pixel deren Grauwerte kleiner oder
gleich dem Grauwert an einer bestimmten Stelle im Diagramm ist.
Es ergibt sich die bekannte Kurve, die links bei y = 0 anfängt
und rechts bei y = 1 endet. Im Idealfall ist diese Kurve eine
Gerade von einem Eckpunkt zum anderen (oder was damit gleich
bedeutend ist: Im ersten Diagramm sind alle Balken gleich hoch).

Um den Ausgleich zu machen, sagt die Vorschrift, berechnest du
g = 16 * H(f)

Setz einfach mal für f = 15 ein.
Es ergibt sich g = 16 * 1.0 = 16
Da dein maximaler Grauwert aber 15 und nicht 16 ist, wird noch 1
abgezogen.

Also berechnet sich die neue Tabelle zu:

0  :  16 * 0.0131 = 0.2096   -> gerundet -> 0  -> 1 abziehen = -1
   (einen Grauwert von -1 gibt es aber nicht, daher: 0)
1  :  16 * 0.0998 = 1.5968   -> gerundet -> 2  -> 1 abziehen =  1
2  :  16 * 0.2037 = 3.2592   -> gerundet -> 3  -> 1 abziehen =  2
...

Und damit erhältst du die Tabelle aus Aufgabe 4

malt man hier wieder ein Diagramm, dann sollten (hoffentlich) die
Daten besser an der ersehnten Diagonalen liegen (alle Grauwerte
sind gleich häufig vertreten).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab nochmal bei einer Zigarette über das Verfahren nachgedacht.
Ist eigentlich ziemlih einfach.

H(f) sagt dir, wieviele Pixel kleiner oder gleich einem
bestimmten Grauwert sind.
So sagt die H(f) Tabelle beispielsweise, dass 56% aller Pixel
einen Grauwert von 8 oder kleiner haben. Dieses Histogramm ist
schon relativ gut, daher lass mich ein neues Bild erfinden:
10 * 10 Pixel, 8 Graustufen
0 10
1 40
2 30
3 20
4  0
5  0
6  0
7  0

Das Bild spielt sich praktisch ausschliesslich im dunklen Bereich
ab. Die H(f) sind dann
0/0.1  1/0.5  2/0.8  3/1.0  4/1.0  5/1.0  6/1.0  7/1.0

Das H(f) sagt uns, dass bspw. 50% aller Pixel einen Grauwert von
0 bis 1 haben, während sich die anderen 50% im Bereich 2 bis 7
tummeln.
Das ist aber sicher nicht optimal. 50% der Pixel sollten auch
50% aller Grauwerte belegen. Die 50% sollten daher bei einem
Grauwert von 0.5 * 8 (-1) = 3 erreicht werden. Und genau
das macht dann die g-Formel. Sie berechnet, bei welchem Grauwert
ein vorgegebener Anteil an Pixel vorhanden sein sollte.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank  Karl heinz Buchegger für deine Hilfe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.