Areafilters
Ik had beloofd dat ik ooit nog een tutorial zou schrijven over areafilters. Het heeft een flinke poos geduurd, maar hier is het dan.In deze tutorial zal ik uitleggen wat Areafilters zijn, hoe bepaalde areafilters werken, met de bijbehorende wiskunde. Er komt geen inleidend verhaaltje over de basiswerking van pixelmanipulatie.
De voorgaande tutorial: [Tutorial] Pixelfilters is dan ook verplichte voorkennis om dit enigzins te kunnen begrijpen!
De zogenaamde kernels in deze tutorial kun je invoeren door in photoshop de volgende functie te gebruiken: Filter -> Other -> Custom
Inhoud
- Spatial filtering
- Low-Pass filters
- Unsharp masking
- High-Pass filters
- Edge detection
- Samenvatting spatial filtering
Spatial filtering
De meest gebruikte manier van areafiltering zijn zogenaamde spatial filters. In deze vorm van filtering hangt de uitkomst van een bepaalde pixel af van de waardes van zijn omliggende pixels. Hier direct het verschil met de vorige tutorial, daar waren berekeningen voor elke pixel apart. Nu moet er ook rekening gehouden worden met zijn buren.Vaak wordt een weighted average gebruikt. De manier om dit makkelijk te gebruiken is om een grid te maken, met hierin de factoren waarin we rekening mee gaan houden.
1/9 | 1/9 | 1/9 |
1/9 | 1/9 | 1/9 |
1/9 | 1/9 | 1/9 |
Waarbij de coördinaten van dit vlak lopen van -1,-1 tot 1,1. De pixel in het midden heeft dus al coördinaten 0,0. Vanaf nu zullen we deze matrix van 9 (of meer) vlakken, de kernel gaan noemen.
We gaan even een beetje rekenen met de boven staande kernel, waarbij alle factoren in de kernel 1/9 zijn.
Als we directe waarden in deze kernel plaatsen, krijgen we bijvoorbeeld:
6 | 2 | 9 |
4 | 7 | 4 |
3 | 8 | 2 |
Vanaf nu zullen kernels met witte achtergrond de factoren weergeven. En kernels met een lichtgrijze achtergrond zullen daadwerkelijke pixelwaardes weergeven.
We willen weten wat de output van de pixel moet worden. De doelpixel is dus 0,0 (en in dit geval dus 7) We willen uitrekenen wat de nieuwe waarde van deze pixel moet worden.
De volgende berekening rolt hier uit:
code:
1
| (1/9 * 6) + (1/9 * 2) + (1/9 * 9) + (1/9 * 4) + (1/9 * 7) + (1/9 * 4) + (1/9 * 3) + (1/9 * 8) + (1/9 * 2) = 5 |
De pixelwaarde wordt dus na onze berekening 5. Bij een foto worden hier natuurlijk de RGB waarden ingevuld
In de kernel is 0,0 altijd! de pixel die we willen berekenen. We belopen de foto door van links boven naar rechtsonder.
We weten nu dus hoe spatialfilters te werk gaan. Er wordt een weighted average gemaakt, en zodoende krijgt elke buurpixel van 0,0 een bepaald gewicht in het resultaat van pixel 0,0.
De verhoudingen in de kernel hoeven niet allemaal het zelfde te zijn!
Low-Pass filters
Een lowpass filter heeft een blurrend effect, ze bevatten een kernel met symetrische waardes. Een voorbeeld van een kernel die een blur geeft:1/15 | 2/15 | 1/15 |
2/15 | 3/15 | 2/15 |
1/15 | 2/15 | 1/15 |
We gaan nu eens zien wat dit filter precies doet. Ik zal alle filters laten zien met het volgende plaatje:

Orginele foto
Als we de bovenstaande kernel hierop 'los' laten, krijgen we het volgende resultaat:

1/20 | 1/20 | 1/20 |
1/20 | 12/20 | 1/20 |
1/20 | 1/20 | 1/20 |
Als we deze kernel toepassen:

De regels voor een low-pass filter zijn dus vrij simpel. De factoren moeten symmetrisch zijn, en het totaal moet op 1 uitkomen.
Unsharp masking
Gek genoeg kunnen we met een low-pass filter de foto scherper laten lijken! Dit heet unsharp masking, en is bij velen van jullie al bekend.Dit wordt gedaan door een low-pass resultaat af te trekken van het orgineel met een 2x zo hoge waarde.
Als P0 is de pixelwaarde in de orginele foto, en P1 is de pixelwaarde van de foto na de low-pass filter. Dan is het resultaat daarvan:
code:
1
| (2 * P0) - P1 |
High-pass filters
Een high-pass filter werkt hetzelfde als een low-pass filter, met dezelfde regels dat de factoren symmetrisch zijn, en dat de som 1 is.Het verschil is dat een high-pass filter, hoog frequente verschillen wel door laat, en een low-pass filter niet (blur dus).
Over het algemeen heeft een high-pass filter een hoog factor voor de middelste pixel, met negatieve factoren hierom heen.
-1/4 | -1/4 | -1/4 |
-1/4 | 12/4 | -1/4 |
-1/4 | -1/4 | -1/4 |
Als we dit toepassen op onze voorbeeld foto:

Zoals je kunt zien, is het een beetje verscherpt.
Als we deze kernel pakken:
-1/8 | -3/8 | -1/8 |
-3/8 | 24/8 | -3/8 |
-1/8 | -3/8 | -1/8 |
Komt daar dit resultaat uit:

Edge detection
Doormiddel van edge detection, kunnen bepaalde objecten binnen een foto geindenticeerd worden. Je kunt het resultaat hiervan ook nog gebruiken voor specifiekere sharpening resultaten.Prewitt gradient edge detection
Bij deze manier van edge detection, is er een bepaalde richting waarin scherper worden.Een kernel die hier bij past is:
1 | 1 | 1 |
1 | 2 | -1 |
1 | -1 | -1 |

Als we een wat extremere kernel pakken, wordt het wat duidelijker.
10 | 10 | 10 |
10 | 10 | -20 |
10 | -20 | -20 |

Alle factoren opgeteld, komen uit op 0.
Laplacian edge detection
Deze manier van edge detection, is symmetrisch. En dus niet in één richting zoals de bovenstaande methode. Hij lijkt dan ook heel erg op een high-pass filter, met het verschil dat het totaal niet optelt tot 1 maar tot 0.-5 | -5 | -5 |
-5 | 40 | -5 |
-5 | -5 | -5 |

Samenvatting spatial filters
Hierboven staat een kleine verzameling van de mogelijkheden die je hebt met spatial filtering. Experimenteer lekker veel zou ik zeggen!- Positieve factoren in het midden, versterken de huidige waarde van de pixel
- Negatieve waarden aan de randen verscherpen
- Asymmetrische kernels, geven assymetrische resultaten
- Als de som van een kernel 1 is, dan heeft het resultaat de zelfde belichting, Groter dan 1 wordt het resultaat lichter. Kleiner dan 1 wordt het resultaat donkerder.
Feedback kan geplaatst worden in dit topic: Tutorials feedback topic
Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?