
Het eerste gedeelte van deze tutorial gaat over zogenaamde Pixelfilters. Dit zijn filters die informatie uit 1 pixel nodig hebben, en in principe geen informatie uit andere pixels nodig hebben.
Deze filters zijn betrekkelijk makkelijk te begrijpen.
Wel wordt er van uit gegaan dat er enige kennis van RGB aanwezig is. In al deze voorbeelden gebruiken we RGB/8 maar je kunt ze ook toepassen in RGB/16, echter zullen dan de waardes er anders uitzien.
Inhoud:
- Grayscale
Negatief
Brightness
Color balance
Contrast
Pixelfilter: Grayscale
Een redelijk simpele bewerking is het omzetten van een kleurenfoto naar een zwart/wit foto.
Een zwart/wit foto binnen het RGB/8 spectrum heeft op elk kanaal de zelfde waardes.
Bijvoorbeeld
(0,0,0) = zwart
(22,22,22) = donker grijs
(120,120,120) = grijs
(180,180,180) = lichtgrijs
(255,255,255) = wit
Het omzetten van een kleur ( RGB/8 ) naar een grijswaarde gebeurd door het gemiddelde te nemen van de drie kanalen en dit gemiddelde te zetten in alle kanalen.
Dit gebeurd door de volgende formule te gebruiken: Grijswaarde = (R + G + B ) / 3;
Hierna wordt de grijswaarde in alle kanalen gezet, dus R = Grijswaarde; G = Grijswaarde; B = Grijswaarde
Als we als voorbeeld nemen een pixel met de kleuren (221,176,82) ( RGB/8 ) krijgen we de volgende ingevulde formule:
Code: Selecteer alles
Grijswaarde = (221 + 176 + 82) / 3; Grijswaarde = 160
R = 160; G = 160; B = 160;
Code: Selecteer alles
Grijswaarde = (78 + 105 + 77) / 3; Grijswaarde = 87
R = 87; G = 87; B = 87;


Bij het omzetten van een foto naar grijswaarden wordt ook vaak de Channelmixer gebruikt. Dit proces is dan een combinatie van 2 filters, namelijk Color Balance filter, en Grayscale filter.
Eerst wordt de pixel door de color balance filter gehaald, en daarna omgezet naar een grijswaarde.
De color balance filter wordt verderop in deze FAQ uitgelegd.
Pixelfilter: Negatief
Het filter om een negatief van de foto te maken is erg simpel.
In elk kanaal wordt de waarde van de maximale waarde afgetrokken.
De formule is dus X = 255- X; (waar X een kleurkanaal is (dus R, G of B )
Als we het RGB spectrum als een kubus afbeelden:

dan is de negatieve waarde van een bepaalde kleur aan het tegenovergestelde punt van de kubus.
Als we bijvoorbeeld de volgende waardes hebben: (255,0,128) ( RGB/8 )
Code: Selecteer alles
R = 255 - R; R = 255 - 255; R = 0
G = 255 - G; G = 255 - 0; G = 255
B = 255 - B; B = 255 - 128; B = 127
[small]In photoshop: Image -> Adjustment -> Invert (Ctrl + i)[/small]


Pixelfilter: Brightness
Om een foto lichter of donkerder te maken, hebben we het brightness filter.
Dit filter vermenigvuldig alle RGB waardes met een waarde.
Deze waarde kunnen we bepalen dmv een bepaald percentage in hoeverre we een pixel lichter of donkerder willen maken.
Het percentage kan lopen van -100% tot 100%
De formule ziet er als volgt uit: X = X + percentage * (255 - X); om het omgekeerde te doen (dus een foto donkerder te maken).
Gebruiken we de volgende formule: X = X - (percentage * X);
Een gekozen percentage van 100 betekend dat alle waardes het lichtst mogelijk worden (alles krijgt dan waarde 255). Bij een percentage van -100 krijgt alles de waarde 0.
Stel we willen een foto 20% lichter maken. het percentage is dan +0.20. Als we een waarde hebben van (52,66,23)( RGB/8 ) krijgen we de volgende ingevulde formule:
Code: Selecteer alles
R = 52 + 0.20 * (255 - 52); R = 93
G = 66 + 0,20 * (255 - 66); G = 104
B = 23 + 0,20 * (255 - 23); B = 69
Code: Selecteer alles
R = (1 - 0.60) * 52; R = 21
G = (1 - 0.60) * 66; G = 26
B = (1 - 0.60) * 23; B = 9


Pixelfilter: Color balance
Kleurbalans is in principe dezelfde bewerking als Brightness, echter hebben we nu per kanaal een andere factor.
De algemene formule hiervan is R = (1 + r_factor) * R; G = (1+ g_factor) * G; B = (1+ b_factor) * B;
Stel we nemen (150,113,052) ( RGB/8 ) als waarde en als factoren(percentage) r_factor = 0.50; g_factor = -0.50; en b_factor = -0.02;
Als het je opvalt, kun je zien dat de formule die we net aangaven nu niet klopt, omdat deze niet goed kan omgaan met negatieve factors.
Dus we krijgen bij een positieve factor: R = (1 + r_factor) * R; bij een factor van 0 of kleiner dan 0 krijgen we: R = R + r_factor * (255 - R);
(255 is hier max. waarde in 8 bits kleurenpalette)
Code: Selecteer alles
r_factor = 50; g_factor = -50; b_factor = -0.02;
R = ( 1 + r_factor) * R; ingevuld: R = ( 1 + 0.50) * 150; R = 225
G = G + g_factor * (255 - G); ingevuld: G = 113 + -0.50 * (255 - 113); G = 42
B = B + b_factor * (255 - B); ingevuld: B = 052 + -0.02 * (255 - 052); B = 48
[small]In photoshop: Image -> Adjustments -> Channel Mixer[/small]


Colorbalance wordt ook vaak gebruikt bij de zwart/wit conversie van een foto. Omdat je met colorbalance dan net het tikkie extra contrast kunt geven aan een foto. In principe wordt er dan na de berekening van color balance, de grayscale conversie gedaan.
[small]In photoshop: Image -> Adjustments -> Channel Mixer (en monochroom aanvinken)[/small]


Wat zoals je ziet, je zwart/wit foto een compleet andere indruk kan laten geven.
Pixelfilter: Contrast
Contrast is de onderscheiding tussen 2 of meer kleuren.
Zo is er veel contrast tussen wit en zwart, want ze zitten elk aan het complete uiteinde van het kleurenspectrum. En tussen oranje en geel zit minder contrast, omdat ze dichterbij elkaar zitten in het kleurenspectrum.
Als we het meer onderscheid willen maken tussen 2 kleuren, kunnen we hier een bepaalde bewerking voor uitvoeren. We verhogen dan het contrast.
Waar het dus op neer komt, is dat je kleuren verder uitelkaar trekt. Een lichte tint maak je lichter, een donkere tint donkerder.
Verminder je het contrast, komen de kleuren dichterbij elkaar naar het midden van het spectrum. Vergroot je het contrast gaan ze verder naar de uiteinden in het spectrum.


[small]Een foto, en de weergave van het histogram van die foto. Zoals je kunt zien, zijn alle kleuren verdeeld over het hele spectrum[/small]
Eerst moeten we het midden van het spectrum berekenen, dit is niet gewoon 127 zoals je misschien verwacht. Maar het is het midden van het gebruikte spectrum in een foto.
r_mid = (r_Max + r_Min) / 2
g_mid = (g_Max + g_Min) / 2
b_mid = (b_Max + b_Min) / 2
r_scale = factor / (r_Max - r_Min)
g_scale = factor / (g_Max - g_Min)
b_scale = factor / (b_Max - b_Min)
x_diff = XR - x_mid) * x_scale
X = 127 + x_diff
Als hier uit komt dat R <0> 255 dan wordt het 255 (lichtst mogelijke waarde)
Dit geld ook voor Groen en Blauw.
Contrast kunnen we alleen niet uitleggen door gewoon een RGB/8 waarde te pakken van een willekeurige pixel, omdat we de uiterste waarden gebruikt in alle pixels moeten weten.
Stel dus dat de uiterste waarden in een bepaalde foto de volgende zijn:
r_Max = 240; r_Min = 23
g_Max = 251; r_Min = 40
b_Max = 220; r_Min = 50
We gaan nu eerst r_mid, g_mid en b_mid berekenen.
Code: Selecteer alles
r_mid = (r_Max + r_Min) / 2; ingevuld: r_mid = (240 + 23) / 2; r_mid = 132;
g_mid = (g_Max + g_Min) / 2; ingevuld: g_mid = (251 + 40) / 2; g_mid = 146;
b_mid = (b_Max + b_Min) / 2; ingevuld: b_mid = (220 + 50) / 2; b_mid = 135;
r_mid = 132; g_mid = 146; b_mid = 135
Het volgende wat we moeten berekenen is de schaal. Hiervoor hebben we een factor nodig, Als voorbeeld nemen we een factor waarde van 900, dit trekt het Contrast een flink stuk omhoog, en alle kleuren uit elkaar.
Code: Selecteer alles
r_scale = factor / (r_Max - r_Min); ingevuld: r_scale = 900 / (240 - 23); r_scale = 4.15;
g_scale = factor / (g_Max - g_Min); ingevuld: g_scale = 900 / (251 - 40); g_scale = 4.27;
b_scale = factor / (b_Max - b_Min); ingevuld: b_scale = 900 / (220 - 50); b_scale = 5.29;
r_scale = 4.15; g_scale = 4.27; b_scale = 5.29;
Vanaf nu gaan we het per pixel berekenen. De hiervoorgaande berekeningen waren voor over de hele foto, vanaf nu is het dus weer een echte Pixel-filter.
Als voorbeeld pakken we een pixel met de volgende kleurwaardes: (120, 88, 110) ( RGB/8 )
Code: Selecteer alles
r_diff = (R - r_mid) * r_scale; ingevuld: r_diff = (120 - 132) * 4.15; r_diff = -50;
g_diff = (G - g_mid) * g_scale; ingevuld: g_diff = (88 - 146) * 4.27; g_diff = -235;
b_diff = (B - b_mid) * b_scale; ingevuld: b_diff = (110 - 135) * 5.29; b_diff = -132;
volgende stap is X = 127 + x_diff te berekenen. Vergeet niet de regel van als een waarde <0> 255 is dat deze 255 wordt.
Code: Selecteer alles
R = 127 + r_diff; ingevuld: R = 127 + -50; R = 77;
G = 127 + g_diff; ingevuld: G = 127 + -235; G = -108; -> G = 0;
B = 127 + b_diff; ingevuld: B = 127 + -132; B = -5; -> B = 0;
Wat is er nu zonet gebeurd? We hadden een pixel, welke waardes lager waren dan de gemiddelde waardes uit het spectrum (r_mid, g_mid en b_mid) dus de kleuren zouden verder naar beneden getrokken worden.
[small]In photoshop: Image -> Adjustments -> Brightness/Contrast[/small]


Wat nu als we een pixel hebben, met kleurwaardes die hoger zijn dan het gemiddelde van het gebruikte spectrum? Dan zouden de kleuren een hogere waarde moeten krijgen dan ze hadden.
Om dit nu te testen, nemen we een pixel met volgende waardes: (160,155,210) ( RGB/8 )
De waardes zijn boven de gemiddelde waarden die we berekend hadden (r_mid, g_mid en b_mid) maar lager dan de hoogste waardes binnen het spectrum (r_max, g_max en b_max).
Code: Selecteer alles
r_diff = (R - r_mid) * r_scale; ingevuld: r_diff = (160 - 132) * 4.15; r_diff = 116;
g_diff = (G - g_mid) * g_scale; ingevuld: g_diff = (155 - 146) * 4.27; g_diff = 38;
b_diff = (B - b_mid) * b_scale; ingevuld: b_diff = (210 - 135) * 5.29; b_diff = 397;
Volgende stap is weer de uiteindelijke waarde berekenen
Code: Selecteer alles
R = 127 + r_diff; ingevuld: R = 127 + 116; R = 243;
G = 127 + g_diff; ingevuld: G = 127 + 38; G = 165; -> G = 0;
B = 127 + b_diff; ingevuld: B = 127 + 397; B = 524; -> B = 255;
[small]In photoshop: Image -> Adjustments -> Brightness/Contrast[/small]

