2013-05-13 7 views
26

Ich bin für eine einfache Gammakorrekturformel für Graustufenbilder mit Werten zwischen 0 und 255Gammakorrektur Formel:.^(Gamma) oder.^(1/Gamma)?

sucht Lassen Sie sagen, dass die Gamma meines Bildschirms beträgt 2,2 (es ist ein LCD-Bildschirm ist, so kann ich es wohl schätzen müssten mit ein komplizierteres Verfahren, aber nehmen wir an, mein Bildschirm verhält sich gut).

Welche der folgenden Formeln wäre die richtige?

(1) Korrigiert = 255 * (Bild/255).^2.2

OR

(2) Korrigiert = 255 * (Bild/255).^(1/2,2)

(das sind bestimmt Matlab-Codes, aber ich hoffe, dass sie auch für Nicht-Matlab-Leute verständlich sind)

Ich habe mich im Internet umgesehen, aber beide Formeln gefunden. Ich vermute, dass (2) der richtige ist, und meine Verwirrung ist auf die Tendenz zurückzuführen, "Gammawert" die Umkehrung des tatsächlichen Gammawerts zu nennen, aber ich würde wirklich ein Feedback von Leuten schätzen, die wissen, worüber sie sprechen. Danke.

:-)

+1

haben Sie Recht zu fragen. Das ist alles sehr verwirrend. –

Antwort

22

Die Gammakorrektur steuert die Gesamthelligkeit eines Bildes. Bilder, die nicht korrigiert werden, können entweder ausgebleicht oder zu dunkel aussehen. Angenommen, ein Computermonitor verfügt über eine 2.2 Power-Funktion als Kurve für die Intensität der Spannung. Dies bedeutet nur, dass, wenn Sie eine Nachricht an den Monitor senden, dass ein bestimmtes Pixel eine Intensität von x haben sollte, wird tatsächlich ein Pixel mit einer Intensität von x 2.2 angezeigt. Da der Bereich der Spannungen an den Monitor gesendet wird zwischen 0 und 1 bedeutet dies, dass der angezeigte Intensitätswert kleiner als gewünscht ist. Ein solcher Monitor soll ein Gamma von 2.2 haben.

Also in Ihrem Fall

Corrected = 255 * (Image/255)^(1/2.2). 
+1

Danke, das war sehr einfach! Einen schönen Tag noch – user42174

19

Beide Formeln verwendet werden, ein Gamma zu kodieren, und ein bis Gamma zu dekodieren.

Gamma-Codierung wird verwendet, um die Qualität der Schattenwerte zu erhöhen, wenn ein Bild als ganzzahlige Intensitätswert gespeichert wird, so gamma zu tun kodieren Sie die Formel:

encoded = ((original/255)^(1/gamma)) * 255 

Gamma-Decodierung wird verwendet, um das Original zu restaurieren Werte, so dass für die Formel lautet:

original = ((encoded/255)^gamma) * 255 

Wenn der Monitor die Gamma-Decodierung der Fall ist, möchte man die erste Formel verwenden, um die Bilddaten zu codieren.

+3

gut, aber VORSICHTIG. In Ihrer ersten Formel "Original" ist ein SYNTHESIZED-Wert von beispielsweise einem Renderer. (Raytracing, Raster was auch immer). und ist im linearen (physischen) Raum. Wenn "Original" das Pixel eines Fotos oder eine Textur ist, dann wenden Sie KEINE FORMEL an, da diese bereits Gamma-kodiert sind. Wenn Sie das tun, werden Sie einfach zwei Dinge tun. Und hier wird es kompliziert, wenn Sie Texturen als Eingabe eines Renderers haben? Sie müssen linearisieren, indem Sie zuerst Formel 2 anwenden, dann rechnen, dann gamma-ify zurück zum Speicher. –

+0

Woher weiß man, welcher Gammma-Wert in dem von der Logitech-Kamera aufgenommenen Bild verwendet wird? – Abc

+1

@Abc: Normalerweise ist der Gammawert 2,2 für ein Bild, das auf einem normalen Bildschirm angezeigt werden soll. Dies ist normalerweise ein JPEG-Bild, das die sRGB- oder Adobe RGB-Farbräume verwendet. – Guffa

Verwandte Themen