PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie würdet ihr den Kontrast eines Bildes erhöhen?



axeljaeger
14-10-2003, 17:24
Für eine kleine Sache mit Bildbearbeitung suche ich nach einer Möglichkeit, den Kontrast eines Bildes zu erhöhen. Meine Theorie ist, das ich einfach alle hellen Sachen heller und alle dunklen Sachen dunkler machen muss. Das hab ich gemacht, und zwar mit einer Funktion f(x), die für jeden Wert > 0.5 einen größeren Wert als das Argument zurückgibt und für jeden Wert kleiner als 0.5 einen kleineren Wert als das Argument zurückgibt. Ich habe die Funktion -2x^3+3x^2 verwendet, die die Anforderung erfüllt. Die Ergebnisse überzeugen, nur leider kann ich die Intensität des Effektes nicht einstellen. Mein zweiter Versuch war eine etwas kompliziertere Funktion 5. Grades, die aber zu unkontrolierbar wurde. Ich habe jetzt vor, das ganze mit Bezierkurven zu lösen, gestern abend ist mir aber aufgefallen, das in Photoshop die Sache mit frei einstellbaren Kurven schon unter Tonwert fällt. Für Kontrast haben die nur einen mickrigen Schieberegler. Sollte es etwa üblich sein, für den Kontrast nur ein Gerade als Funktion zu nehmen, die durch 0.5|0.5 geht, nur entsprechend steiler, so das Randbereiche auch größer als 1.0 sein können und dann enstsprechend abgeschnitten werden? Ich hofffe, ich hab mich nicht zu unverständlich ausgedrücktmit dem, was ich sagen wollte. Ich reis mich auch nicht drum, das von Hand zu programmieren. Links zu Theorie, wie aber auch zu Kontrast sind willkommen.

oracle2025
15-10-2003, 13:59
hm, wenn ich annnehme das ich ein graustufen bild habe, bei dem jeder Pixel einen Wert zwischen -1 und +1 annehmen kann.

Dann multipliziere ich einfach jeden Pixel mit einem wert zwischen 0 und irgendwas, um den kontrast anzupassen. Dabei schneide ich Ergebnisse die größer als 1 sind ab.

wenn deine eingangsdaten nicht zwischen -1 und +1 liegen, dann kannst du sie ja vorher umrechnen, und für mehrfarbbilder machst du das halt für jeden Farbanteil einzeln.

ich weiß nicht ob das so funktiniert, habs mir nur eben so überlegt.

axeljaeger
15-10-2003, 14:16
Ich hab die Eingangsdaten von 0 - 255 und rechne sie im Moment nach 0 - 1 um.

oracle2025
15-10-2003, 16:53
und funktionierts wenn du's so wie in meinem Vorschlag machst??

wraith
15-10-2003, 17:04
Hier ist ein Kontraststretchingalgorithmus,denn hatten wir mal in Hardware implementiert.

B: Anzahl der Codebits pro Grauwert
Phigh: obere Grenze des Wertebereichs
Plow: untere Grenze des Wertebereichs

b[m,n] =
0,falls a[m,n] <= Plow
(2^B - 1)* (a[m,n] - Plow)/(Phigh - Plow),falls Plow < a[m,n] < Phigh
2^B - 1,falls a[m,n] >= Phigh

axeljaeger
15-10-2003, 17:22
Ich habs noch nicht ausprobiert, das wird aber sicher funktionieren. Heut ist mir leider was dazwischen gekommen und ich muss mich erstmal mit Hardwareprogrammierung auseinandersetzen