1/4
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No analytics yet
Send a link to your students to track their progress
Gabor filters
Gabor-filters worden in hoofdstuk 6 besproken als een van de belangrijkste methoden om lineaire kenmerken (linear features) van een textuur te berekenen.
Wat is een Gabor filter? Een Gabor-filter (vernoemd naar Dennis Gabor) is een wiskundig filter waarvan de impulsrespons bestaat uit een sinusoïdale golf die gemoduleerd (vermenigvuldigd) wordt met een Gaussiaanse omhulling (envelope).
Als je dit visueel voorstelt (zoals in de 3D-grafieken in de slides), ziet het eruit als een patroon van parallelle ribbels of strepen dat naar de randen toe langzaam uitdooft tot een vlak gebied. De frequentierespons van dit filter is simpelweg de Fourier-transformatie van deze impulsrespons.
De 5 Parameters De kracht van een Gabor-filter is dat je het wiskundig exact kunt afstellen om te zoeken naar héél specifieke textuurpatronen in een afbeelding. Dit doe je met vijf parameters:
Golflengte (λ): De golflengte van de sinusoïde (dit bepaalt in feite hoe dik de strepen van het filter zijn).
Oriëntatie (θ): De hoek waaronder de strepen staan (bijvoorbeeld horizontaal, verticaal of diagonaal).
Faseverschuiving (ψ): Bepaalt de exacte positionering van de golf. Een niet-nul faseverschuiving maakt de vorm van het filter asymmetrisch.
Sigma / Breedte (σ): De standaardafwijking van de Gaussiaanse omhulling. Dit bepaalt hoe breed het uitdovende gebied is (de effectieve grootte van het filter).
Spatial aspect ratio (γ): Bepaalt de ruimtelijke verhouding, oftewel de ellipticiteit van het filter (of het focusgebied mooi rond is of eerder ovaal uitgerekt).
Praktijktoepassing: Filter Banks In de praktijk van Computer Vision gebruik je vrijwel nooit slechts één Gabor-filter, omdat een textuur opgebouwd kan zijn uit lijntjes in allerlei richtingen en groottes. In plaats daarvan gebruik je een Gabor filter bank.
Dit is een grote set van filters (bijvoorbeeld 40 stuks) die allemaal net een andere schaal (grootte) en oriëntatie (hoek) hebben.
Door je afbeelding over deze hele bank aan filters te schuiven, krijg je voor elke pixel een reeks filterreacties. Deze reacties vormen samen de feature vector (kenmerkvector) die de lokale textuur wiskundig beschrijft.
De slides tonen bijvoorbeeld hoe zo'n Gabor filter bank gebruikt wordt voor het analyseren van texturen op een wegdek of voor het automatisch detecteren van bloedvaatjes (microvessels) in medische beelden door de pixel-level features te clusteren.
Textons
Textons zijn in feite de fundamentele basisbouwstenen of "prototypes" waaruit een textuur is opgebouwd. Binnen de pijplijn van textuuranalyse vormen ze een effectieve techniek om de enorme hoeveelheid data te verkleinen (feature reduction) door de meest representatieve textuurpatronen te clusteren.
Het proces om textons te vinden en te gebruiken verloopt in de volgende stappen:
1. Een Filter Bank toepassen Men laat eerst een uitgebreide set filters (een filter bank) over de afbeelding lopen om wiskundige kenmerken te berekenen. Dit kan bijvoorbeeld een set van 40 Gabor-filters zijn, of de specifieke set die Malik et al. gebruikte, welke bestaat uit Difference of Gaussians (op 3 schalen, 6 oriëntaties en 2 fases) gecombineerd met 4 center-surround filters. Na deze stap levert de output van de filter bank voor élke pixel in de afbeelding een eigen kenmerkvector (feature vector) op met daarin al zijn specifieke filterreacties.
2. Clustering (Prototypes zoeken) Omdat het rekenkundig onwerkbaar is om met al deze duizenden unieke vectoren te classificeren, wordt er een clustering-algoritme zoals K-means of mean shift op losgelaten. Dit algoritme zoekt in de data naar K centrale clusters; dit zijn de meest voorkomende of representatieve wiskundige patronen in de afbeelding. Deze K gevonden prototypes worden de textons genoemd. Samen vormen ze een soort lokaal visueel woordenboek van je afbeelding.
3. Pixels vervangen door hun Texton Zodra de textons bepaald zijn, wordt de originele data vereenvoudigd. De complexe en zware filterreactie van élke individuele pixel wordt nu simpelweg vervangen door de index van het texton (het prototype) dat er wiskundig het meest op lijkt. Hierdoor worden pixels gegroepeerd en ontstaat een zogenaamde texton-kaart (waarbij pixels gemapt zijn naar texton channels).
Mogelijke uitbreidingen Hoewel de klassieke textons vaak enkel op filterreacties leunen, geven de slides aan dat je de feature vector van een texton nog specifieker kunt maken voor bepaalde taken, zoals het classificeren van welk stuk van een afbeelding het wegdek is. Hiervoor kan de vector succesvol uitgebreid worden met extra informatie, zoals de ruimtelijke locatie in beeld (x,y), kleurinformatie (RGB), en specifieke rand- of hoekinformatie
Co-occurence matrix
De Co-occurrence matrix (vaak GLCM of Gray-level Co-occurrence Matrix genoemd) is een belangrijke methode om niet-lineaire textuurkenmerken uit een afbeelding te halen door te kijken naar de relaties tussen paren van pixels.
Waar methoden zoals Gabor-filters wiskundige golven over de afbeelding leggen, telt de co-occurrence matrix heel concreet hoe vaak specifieke combinaties van grijswaarden op een bepaalde afstand van elkaar voorkomen.
Hier is een uitleg van hoe dit concept werkt op basis van de cursus:
1. De berekening (Het tel-proces) Stel dat je een kleine afbeelding A hebt waarvan de pixels een beperkt aantal grijswaarden bevatten, bijvoorbeeld van 1 tot en met q.
Je kiest vooraf een specifieke offset (een ruimtelijke verschuiving), gedefinieerd door Δi (verticale stap) en Δj (horizontale stap). Bijvoorbeeld: de offset (1,0) betekent dat je elke pixel gaat vergelijken met zijn directe onderbuurman.
Je creëert een lege matrix van q×q groot.
Vervolgens scan je de volledige afbeelding. Je telt hoe vaak het voorkomt dat een pixel met grijswaarde k direct (volgens de ingestelde offset) wordt gevolgd door een pixel met grijswaarde l. Dit totale aantal schrijf je op in cel (k,l) van je matrix.
2. Combineren voor robuustheid Om een textuur beter en completer te beschrijven en niet slechts gevoelig te zijn voor lijntjes in één richting, worden co-occurrence matrices met verschillende offsets in de praktijk vaak gecombineerd. Men telt bijvoorbeeld de matrix van de verticale buren (C1,0) op bij de matrix van de horizontale buren (C0,1) om één gezamenlijke matrix te vormen: C=C0,1+C1,0.
3. Hoe "lees" je deze matrix? De vorm en spreiding van de waarden in deze matrix vertelt de computer exact wat voor textuur het is:
Als het een glad of uniform oppervlak betreft (zoals een perfect stuk asfalt op een weg), lijken buurpixels enorm op elkaar. De telling in de co-occurrence matrix zal daardoor sterk gecentreerd zijn op een strakke diagonale lijn.
Ligt het stukje beeld op een rand (boundary) of een chaotisch stuk ruis, dan zullen buurpixels vaak abrupt van elkaar verschillen. De tellingen in de matrix verspreiden zich dan veel wijder en waaien uit over de andere cellen.
4. Van matrix naar feature vector (Haralick Descriptoren) Om deze ruwe matrix daadwerkelijk te gebruiken in machine learning (classificatie), is het matrixrooster zelf te onhandig.
Eerst wordt de matrix genormaliseerd (zodat alle waardes breuken of percentages worden in plaats van absolute tellingen).
Vervolgens gebruikt men wiskundige formules om de structuur van deze genormaliseerde matrix samen te vatten in een paar compacte getallen. Deze getallen noemen we de Haralick texture features.
Veelgebruikte Haralick-kenmerken zijn de homogeniteit, het contrast, de variantie, eerste-orde momenten en de entropie.
Deze compacte waarden vormen uiteindelijk je feature vector. (Tip voor het examen: In de voorbeeldvragen op het einde van de slides zit een praktische oefening waarbij je voor een mini-afbeelding van 3×3 zelf handmatig de co-occurrence matrix C1,0 moet opstellen).
Histograms of LBPs
Het stuk over Histograms of LBPs (Local Binary Patterns) legt uit hoe je de LBP-methode gebruikt om een heel beeldgebied (een patch) statistisch te beschrijven, zodat een computer kan herkennen om welke textuur het gaat.
Hier is hoe dit stap voor stap in zijn werk gaat:
1. Korte herhaling: Wat is één LBP? Bij de LBP-methode wordt de intensiteit van één centrale pixel vergeleken met de pixels die er in een cirkel (met een bepaalde straal) omheen liggen. Als de buurpixel lichter of even licht is, krijgt hij een '1', is hij donkerder dan krijgt hij een '0'. Al deze eentjes en nulletjes vormen samen een binair getal, wat resulteert in een decimale waarde (meestal tussen 0 en 255).
2. Van pixels naar een Histogram In plaats van naar één pixel te kijken, neemt men nu een groter stukje van de afbeelding (een patch). Voor dit hele stukje telt men simpelweg hoe vaak elke specifieke LBP-waarde voorkomt. Deze tellingen zet men uit in een staafdiagram: het histogram.
In het voorbeeld van de cursus worden de 256 mogelijke LBP-waarden gegroepeerd in 32 bins (waarbij elke staaf/bin 8 opeenvolgende LBP-waarden vertegenwoordigt).
Dit histogram vertelt je dus statistisch gezien: "Hoeveel procent van dit beeldstukje bestaat uit platte vlakjes, hoeveel procent uit scherpe puntjes, en hoeveel procent uit randjes?".
3. Waarom is dit nuttig voor classificatie? Omdat elke textuur uit een andere verhouding van deze basispatroontjes bestaat, krijgt elke textuur een compleet eigen, unieke histogram-vorm. De slides tonen dit aan met een duidelijk voorbeeld van een straatbeeld: de LBP-histogrammen die berekend zijn op stukjes wegdek (road patches) zien er overduidelijk anders uit dan de histogrammen van de bomen of auto's ernaast (non-road patches).
4. Een belangrijke verbetering: Rotatie-invariante LBPs De standaard LBP-methode raakt in de war als de foto gedraaid wordt. Men lost dit op door rotatie-invariante LBPs te maken. Hierbij stopt men alle geroteerde versies van exact hetzelfde patroon (bijv. de code 00011000 is een gedraaide versie van 01100000) wiskundig samen in één en dezelfde bin. Hierdoor hou je nog maar 36 bins over. Ook wordt er onderscheid gemaakt tussen uniforme en niet-uniforme patronen. Het grote voordeel is dat je histogram (en dus je textuurherkenning) nu onafhankelijk is geworden van de hoek van de camera.
5. De uiteindelijke beslissing (Classificatie) Om de computer uiteindelijk automatisch te laten beslissen of een patch bijvoorbeeld "wegdek" is of niet, moet hij histogrammen met elkaar vergelijken. Hiervoor gebruikt men statistische afstandsmaten, zoals de Kullback-Leibler (KL) distance, die berekent hoeveel het histogram van je onbekende patch afwijkt van een vooraf aangeleerd "prototype" histogram. Als de KL-afstand klein genoeg is (bijv. d<0.3), behoort de patch tot die textuurklasse.
Histograms vergelijken
Zodra je via LBPs of textons een histogram hebt opgebouwd voor een bepaald beeldstukje (patch), wil je dit histogram gebruiken om een beslissing te maken: tot welke textuurklasse behoort dit stukje (bijvoorbeeld "wegdek" of "geen wegdek")?
Om dit te doen, bespreekt dit deel van het hoofdstuk hoe je histogrammen wiskundig met elkaar kunt vergelijken en classificeren.
1. De Kullback-Leibler (KL) distance De meest besproken methode in de slides is de Kullback-Leibler (KL) distance. Dit is een statistische afstandsmaat die berekent hoeveel een bepaalde waargenomen kansverdeling (jouw onbekende histogram q) afwijkt van een referentieverdeling (het "prototype" histogram p).
Wat het meet: Het meet in feite de "verloren informatie" als je het benaderende histogram q zou gebruiken in plaats van de ware verdeling p. Vanuit de informatietheorie bekeken, komt dit overeen met het verwachte aantal bits dat nodig is om samples uit p te coderen met een code die eigenlijk geoptimaliseerd is voor q.
Belangrijke wiskundige eigenschap: De KL-distance is geen echte, geometrische afstand. Een echte afstand moet namelijk symmetrisch zijn (de afstand van A naar B is gelijk aan B naar A), maar bij de KL-afstand geldt dat d(p,q)=d(q,p). De berekende waarde is overigens wel altijd nul of groter (niet-negatief).
2. Hoe werkt de classificatie in de praktijk? Je neemt het histogram van je onbekende patch (Q) en berekent de KL-afstand ten opzichte van het referentie-histogram (P, bijvoorbeeld een referentie van een perfect stukje wegdek). Vervolgens gebruik je een drempelwaarde (threshold): als de afstand klein genoeg is (bijvoorbeeld d(P,Q)<0.3), dan beslist de classifier dat de patch tot de klasse 'wegdek' behoort.
3. Alternatieve afstandsmaten Hoewel de KL-afstand veelgebruikt is, somt de cursus ook enkele bekende alternatieven op om histogrammen te vergelijken:
Jeffrey divergence: Een variant op de KL-afstand die wél symmetrisch is gemaakt.
Earth Mover's Distance (Wasserstein distance): Een intuïtieve methode die berekent wat de minimale "kosten" zijn om de "aarde" (de inhoud van de histogram-staven) te verplaatsen totdat het ene histogram de exacte vorm van het andere aanneemt.
Chi-square en de Bhattacharyya distance.
4. Alternatieven via algemene Machine Learning In plaats van de afstand tot een enkel prototype te berekenen, kun je histogrammen ook rechtstreeks in machine learning classifiers stoppen:
Random Forests: Hierbij "kijken" de beslissingsbomen rechtstreeks naar de specifieke inhoud van individuele histogram-bins (staafjes).
k-Nearest Neighbors (kNN) of k-means clustering: Om prototypes te vinden of patches te clusteren.
Support Vector Machines (SVMs): Hierbij behandel je het volledige histogram als één lange wiskundige feature vector en laat je de SVM een scheidingslijn zoeken. De slides merken wel op dat k-means en SVMs standaard gebruik maken van normale (Euclidische) afstanden, wat voor histogram-data statistisch gezien soms minder betekenisvol is dan de eerder genoemde afstandsmaten.