[Tutorial] Areafilters

Pagina: 1
Acties:
  • 142 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 22:36

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/91/91/9
1/91/91/9
1/91/91/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:
629
474
382

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/152/151/15
2/153/152/15
1/152/151/15


We gaan nu eens zien wat dit filter precies doet. Ik zal alle filters laten zien met het volgende plaatje:
Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/orig.jpg
Orginele foto

Als we de bovenstaande kernel hierop 'los' laten, krijgen we het volgende resultaat:
Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/lowpass_1.jpg


1/201/201/20
1/2012/201/20
1/201/201/20

Als we deze kernel toepassen:
Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/lowpass_2.jpg

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/412/4-1/4
-1/4-1/4-1/4


Als we dit toepassen op onze voorbeeld foto:
Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/highpass_1.jpg
Zoals je kunt zien, is het een beetje verscherpt.

Als we deze kernel pakken:
-1/8-3/8-1/8
-3/824/8-3/8
-1/8-3/8-1/8

Komt daar dit resultaat uit:
Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/highpass_2.jpg


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:
111
12-1
1-1-1

Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/edge_1.jpg

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

Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/edge_2.jpg
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
-540-5
-5-5-5

Afbeeldingslocatie: http://www.thundernet.nl/filespace/got/area/edge_3.jpg


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.
In deze tutorial zijn we dieper ingegaan op zogenaamde spatial filters. Er zijn nog veel meer soorten area-filters. Maar deze zal ik later uitdiepen.



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?


Acties:
  • 0 Henk 'm!

  • inquestos
  • Registratie: November 2001
  • Laatst online: 11-09 23:01
...

[ Voor 98% gewijzigd door inquestos op 18-02-2007 01:28 . Reden: sorry, pas toen ik het postte zag ik dat het hier niet de bedoeling was ]

Fotografie: | Flickr | Canon 5DII + 20mm + 35mm + 50mm + 100mm || Hardlopen: Strava PR 5km: 20:26 10km: 44:35 HM 1:39:58


Acties:
  • 0 Henk 'm!

  • jules
  • Registratie: Oktober 2002
  • Niet online

jules

leend3rs.nl

Nooit geweten dat je met wiskunde ook foto's kon bewerken. Mooie post, moet me er nog eens dieper in gaan verdiepen om te kijken waar dit voor gebruikt kan worden. Volgens mij is dit wiskunde A, maar met aardig wat B kennis op zak valt er ook nog wel wat van te bevatten ;).

Waar gebruik je het zelf voor als ik vragen mag?

Foto Portfolio Follow me on Twitter!