Lichtheid en verzadiging aanpassen in RGB

RGB, lichtheid en verzadiging

Om RGB en HSL in elkaar om te rekenen bestaan er goede websites en is VBA-code eenvoudig te programmeren. Zelf omrekenen is nooit nodig. De onderstaande is alleen bedoeld als illustratie van hoe het principe werkt. 

De weergave van kleuren in HSL is iets inzichtelijker dan die in RGB, maar ze zijn relatief eenvoudig in elkaar om te rekenen. De lichtheid en de verzadiging van een gegeven RGB-waarde veranderen is eenvoudig. De lichtheid wordt gedefinieerd als het gemiddelde van de kleinste en grootste waarde in de RGB-vector. Verzadiging wordt gedefinieerd als de verhouding puur verzadigd licht (bestaande uit maximaal twee kleuren) en het bijgemengde grijs (met gelijke R, G en B).

Lichtheid veranderen in RGB

L<128

Om lichtheid te veranderen in waarden onder L=128 moeten alleen de RGB-waarden verhoudingsgewijs worden aangepast.

Om de kleur (255,60,0) met L=128 aan te passen naar L=64 kunnen de RGB-waarden gehalveerd worden (180,30,0).

L>128

Als de kleur lichter wordt dan L=128, gaat het met bijmengen van wit licht.

Om de kleur(255,60,0) met L=128 een lichtheid te geven van L=200, moeten we eerst de lichtste kleur in het resulterende mengsel berekenen, in dit geval R. De resulterende lichtheid is het gemiddelde van de grootste en de kleinste waarde van de RGB-getallen. Dus 200=(255+B)/2. B=145. De kleur B is afkomstig van het bijgemengde witte licht (145,145,145). Het resultaat wordt RGB(255,G,145). Als we daar het witte licht van aftrekken houden we het oorspronkelijke licht over: RGB(110,G,0). Omdat we de R/G verhouding kennen kunnen we nu ook G van het oorspronkelijke licht voor de menging uitrekenen: G=110*(60/255)=26. RGB(110,26,0). Voegen we daar het witte licht bij, dan resulteert een RGB(255,171,145).

Verzadiging veranderen in RGB

Van een RGB-waarde de verzadiging veranderen kan eenvoudig op basis van de waarden van de maximale en minimale verzadiging. Neem de hierboven berekende kleur RGB(255,171,145). Deze is 100% verzadigd met een lichtheid van L=200 oftewel 78%. De totaal onverzadigde kleur met dezelfde lichtheid is RGB(200,200,200). Wil ik de 40% verzadigde versie berekenen dan krijgt ik 0,4*RGB(155,171,145) + 0,6*RGB(200,200,200) = RGB(222,188,178). Dat is dan de kleur (255,60,0) met een lichtheid van 78% en een verzadiging van 40%.

 

Uit een gegeven RGB de lichtheid en de verzadiging berekenen.

Een onverzadigde kleur heeft drie RGB-waarden groter dan 0, terwijl een verzadigde kleur altijd één waarde van 0 heeft. Om de RGB-waarden te splitsen in het kleur-deel en het grijs-deel moeten we alleen naar de kleinste waarde van R, G en B kijken. Die geeft de waarde van het grijs-deel aan. Voorbeeld RGB (20, 85, 40). De kleinste waarde is hier 20. Daaruit volgt dat er een totaal onverzadigd (grijs) deel is toegevoegd van RGB(20,20,20). Het kleur-deel is dan RGB (0, 65, 20). 

De lichtheid wordt gegeven door het gemiddelde van de kleinste en de grootste waarde in de RGB-getallen. In het geval van RGB (20, 85, 40) in de lichtheid 105/2=52,5 of in procenten 100*52,5/255 = /255=21%. Een volledig onverzadigde (‘grijze’) versie van de kleur RGB(20,85,40) is daarom 21% van de RGB(255,255,255) oftewel (54,54,54). Het toegevoegde grijs-deel RGB(20,20,20) is dus 20/54 of 38% van RGB(54,54,54). De verzadiging is dus 100-38=62% in dit geval. 

De pure kleur (100% verzadigd, lichtheid 50%) berekenen

Bij een lichtheid van 50% is de grootste waarde van R,G en B altijd 255. Ik moet de RGB-getallen in dit geval vermenigvuldigen met 255/65. Als is van de kleur RGB(20,85,40) de verzadiging naar 100% en de lichtheid naar 50% breng dan is de resulterende waarde RGB(0,255,78), een punt op de rand van de kleurencirkel. Voor het omrekenen van RGB naar RYB kan deze pure kleur als uitgangspunt genomen worden om die vervolgens weer te corrigeren voor lichtheid en verzadiging. 

Omrekening van RGB naar HSL: de volledige formules

Zie voor de omrekening van RGB naar HSL en omgekeerd deze pagina: https://nl.wikipedia.org/wiki/HSL_(kleurruimte) 

Ook handig zijn https://www.rapidtables.com/convert/color/rgb-to-hsl.html en https://www.rapidtables.com/convert/color/hsl-to-rgb.html
Daar kan je de omrekening zelf doorvoeren en worden ook de gebruikte formules getoond.

______________