Ga naar hoofdinhoud
BVDART Logo

Gamma-expansie

Gamma-expansie zet gecodeerde kleurwaarden om naar waarden evenredig met licht. sRGB heeft daarvoor een lineair deel bij zwart en een machtsdeel daarboven.

Onderzoek de sRGB-decodeercurve van middentonen tot het lineaire begin.

Gelijke codestappen
Gelijke lichtstappen
Stuksgewijze sRGB-decodeercurve en gekozen kanaal101Gecodeerd kanaal CLineair licht
Curveweergave
C 0.50000 → 0.21404 lineair((C + 0.055) / 1.055)^2.4Breekpunt C = 0.04045

Beide verlopen lopen van zwart tot de gekozen C en eindigen bij hetzelfde weergegeven grijs. Het ene verdeelt opgeslagen waarden gelijk; het andere verdeelt licht gelijk en codeert dit voor het scherm. Decoderen is een bekende overdrachtsfunctie, anders dan de creatieve gammacorrectie in het Lab.

De twee toonverlopen veranderen met het gekozen kanaal: gelijke code- en lichtstappen bereiken hetzelfde grijs. Daarna zoomt de curve in bij zwart. Gebruik een regelaar om het over te nemen.

Wat je kunt proberen
  1. Verplaats Gecodeerd kanaal C en vergelijk de gemeten lineaire waarde met beide verlopen.
  2. Kies Bij zwart en beweeg door het breekpunt C = 0.04045.
Open in het Lab ↗

Waar je op kunt letten: C = 0,5 decodeert naar ongeveer 0,214. Bij zwart gebruikt sRGB een lineair segment; gelijke stappen in opgeslagen waarden en in licht geven verschillende verlopen.

Zo werkt het

Voor een kanaal C tussen nul en één geldt tot 0,04045 de formule C / 12,92. Daarboven geldt ((C + 0,055) / 1,055)^2,4. Dat is nauwkeuriger dan sRGB als één macht van 2,2 te behandelen.

Lineaire waarden zijn nodig voor zinvolle belichtingsveranderingen en relatieve luminantie. Gecodeerd 0,5 wordt ongeveer 0,214, niet 0,5. Rekenen in beide domeinen levert daarom andere mengingen en verlopen op.

Gebruik het in het Lab

Belichting in het Lab rekent stops in lineair licht. De algemene Gamma-correctie is een creatieve toonregeling en verschilt van het decoderen van een bekende overdrachtsfunctie.

Grenzen & verschillen

Decodeer reeds lineaire data niet nogmaals. De indruk van een foto hangt ook af van opnameverwerking en kijkomstandigheden.

Verdieping

De RGB-waarden die in digitale beelden worden opgeslagen, zijn geen lineaire weergave van lichtintensiteit. Ze zijn gamma-gecodeerd — gecomprimeerd via een machtscurve — om aan te sluiten bij de niet-lineaire gevoeligheid van het menselijk zicht en om efficiënter om te gaan met beperkte bitdiepte. Voor je wiskundig correcte kleur­bewerkingen uitvoert, moet je deze codering eerst omkeren via gamma-expansie.

Waarom Gamma Bestaat

Het menselijk zicht is gevoeliger voor verschillen in donkere tonen dan in lichte tonen. Gamma-encoding reserveert meer van het beschikbare bitbereik voor donkere waarden, waar onze ogen beter onderscheid maken. Een 8‑bit kanaal dat lineair licht opslaat, zou zichtbare banding in schaduwen vertonen; met gamma-encoding worden die 256 stappen gelijkmatiger over onze waarneming verdeeld.

De sRGB-overdrachtsfunctie

De standaard sRGB-gammacurve is geen eenvoudige machtsfunctie. Ze heeft een lineair segment rond nul en een machtssegment voor de rest:

function srgbToLinear(c: number): number {
  // c is 0–1 (sRGB encoded)
  return c <= 0.04045
    ? c / 12.92
    : Math.pow((c + 0.055) / 1.055, 2.4)
}

function linearToSrgb(c: number): number {
  // c is 0–1 (linear light)
  return c <= 0.0031308
    ? c * 12.92
    : 1.055 * Math.pow(c, 1 / 2.4) - 0.055
}
typescript

Impact op afstandsberekeningen

Als je de Euclidische afstand direct op gamma-gecodeerde waarden berekent, worden kleurverschillen in donkere tinten overdreven en in lichte tinten samengedrukt. Een afstand van 10 tussen twee donkere grijzen oogt veel significanter dan een afstand van 10 tussen twee lichte gelen. Eerst linearizeren zorgt ervoor dat gelijke afstanden overeenkomen met gelijke fysieke verschillen in lichtenergie.

Veelvoorkomende valkuil

Het middelen van twee sRGB-kleuren door simpelweg op te tellen en door 2 te delen levert een resultaat op dat te donker is. Dit komt doordat optellen in sRGB niet lineair is — je moet eerst linearizeren, middelen en daarna opnieuw encoderen. Dit geldt voor elke vorm van blending, interpolatie of afstandsberekening.

Wanneer je het kunt overslaan

Voor palette-extractie via kleurclustering (zoals in onze Studio-tools) is het doel perceptuele overeenkomst in plaats van fysieke nauwkeurigheid. In dat geval is direct werken in sRGB met een royale afstandsdrempel vaak voldoende en veel sneller. De fysieke fout is acceptabel omdat de groepsdrempel die al grotendeels opvangt.

Verwante Lab-categorieën

Bronnen & naslag

Gids bijgewerkt