Niet alle RGB-kanalen dragen in gelijke mate bij aan de waargenomen helderheid. Het menselijk oog heeft veel meer voor groen gevoelige kegeltjes dan voor rood of blauw, waardoor veranderingen in het groene kanaal een veel grotere impact hebben op hoe licht of donker een kleur lijkt. Luminantie‑weging past correctiefactoren toe om voor deze asymmetrie te compenseren.
De ITU-R BT.709-coëfficiënten
De standaard luminantiecoëfficiënten voor sRGB (uit de HDTV-specificatie) zijn:
Groen draagt meer dan 71% bij aan de waargenomen helderheid, rood ongeveer 21% en blauw slechts 7%. Daarom lijkt puur blauw (#0000FF) veel donkerder dan puur groen (#00FF00), ook al staat in beide gevallen één kanaal maximaal open.
Gewogen Euclidische afstand
Een veelgebruikte verbetering op de naïeve Euclidische RGB-afstand is om de kanalen te wegen naar hun bijdrage aan de luminantie. Compuphase’s “redmean”-benadering is een populaire, goedkope aanpak:
function weightedColorDistance(
r1: number, g1: number, b1: number,
r2: number, g2: number, b2: number,
): number {
const rMean = (r1 + r2) / 2
const dR = r1 - r2
const dG = g1 - g2
const dB = b1 - b2
return Math.sqrt(
(2 + rMean / 256) * dR * dR +
4 * dG * dG +
(2 + (255 - rMean) / 256) * dB * dB
)
}Toepassingen
- Toegankelijkheids-contrastcontroles (WCAG gebruikt relatieve luminantie om contrastverhoudingen te berekenen)
- Grijswaardenconversie (desaturatie die de waargenomen helderheid behoudt)
- Verbeterde paletgroepering in onze kleurextractie-pijplijn
