Wat je kunt proberen
- Verplaats Gecodeerd kanaal C en vergelijk de gemeten lineaire waarde met beide verlopen.
- Kies Bij zwart en beweeg door het breekpunt C = 0.04045.
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 kleurbewerkingen 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
}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
