Oefeningenles beeldverwerking Histogram Wat is een histogram hoe kunnen we een histogram opstellen? Welke afbeelding hoort bij welk histogram? Waarom? Een histogram geeft voor elke grijswaarde het aantal piels met die waarde weer. Voor een 56 kleuren afbeelding doe je dus : int hist[56]; forint i;i < width; i forint j;j < height; j hist[getpielvalueij]; In de linkse afbeelding is er niet echt grijswaarde die primeert de achtergrond is ook niet uitgesproken wit. We verwachten dus in het histogram verschillende piekjes waaronder eentje voor de achtergrondkleur eentje voor de kleur van de donkere camera in de achtergrond De linkse afbeelding correspondeert dus met het rechtse histogram. In de rechterafbeelding domineren duidelijk kleuren. De zwarte camera
resulteert in een piek links in het histogram de rechter piek in het histogram correspondeert met de lichte achtergrond. Thresholding Thresholding werkt als volgt : Veronderstel een threshold T en een pielwaarde p. Dan berekenen we in het nieuwe beeld een pielwaarde p als volgt : If p < T then p else p 55 Dit kunnen we dus gebruiken om specifieke grijswaarden uit het beeld te verwijderen. Hieronder volgen een aantal thresholds voor de rechtste afbeelding hierboven voor respectievelijk T T8 en T5. Het is dus duidelijk niet zo eenvoudig de juiste threshold te kiezen om de volledige camera en alleen de camera op die manier uit beeld te halen. Hoe kan je gebruik maken van het histogram om thresholds te bepalen? Kunnen we bij de linkse afbeelding ook zo tewerk gaan? Waarom wel / niet? Voor de afbeelding met de camera is het histogram min of meer bruikbaar om de threshold te bepalen. In dat histogram zitten immers slechts pieken die heel erg duidelijk zijn. De ene piek correspondeert met de meest voorkomende achtergrondkleur de andere piek correspondeert met de meest voorkomende camera kleur. ls we de threshold precies tussen beide pieken kiezen dan is de kans het grootst dat alle camera piels wel en alle achtergrond piels niet geselecteerd worden. In dit geval ligt dat punt ergens tussen 3 en. De andere afbeelding bevat te veel piekjes in het histogram maw de grijswaarden van de verschillende objecten liggen dichter te dicht - bij elkaar. Filters We gaan het effect van een aantal filters na in deze oefening. Wat is het basisprincipe van filters?
/9 /9 /9 /9 /9 /9 /9 /9 /9 /6 /6 /6 /6 /6 /6 - - - - /6 /6 /6 - - - - - 5 - - Wat doet elk van de bovenstaande filters? Waarom precies? Welke filter hoort bij welke afbeelding? Onderstaande afbeelding is alvast de originele.
. We beschouwen de convolutie van een kernel functie K met een afbeelding. De resulterende afbeelding B * K wordt als volgt bepaald : B i ma j ma i i min j j min K i j. i j De convolutie is een smmetrische en transitieve operator. Dit laatste betekent dat C * K * K * K * K ofwel dat het sequentieel toepassen van filters equivalent is aan het toepassen van één filter die de convolutie is van de twee filters. Prewitt Gaussian Laplacian Unsharp Masking Sobel verage verage Gaussian Prewitt Sobel Laplacian Unsharp Masking Filters in de afbeeldingtabel Filters in de kerneltabel verage Neemt het gemiddelde over de negen piels binnen het window. Het beeld is iets minder scherp nauwelijks te zien. Kleine ruis in het beeld wordt evenwel weggewerkt. Gaussian veraging beschouwt alle piels in het window als even belangrijk. De gaussian filter kent een groter gewicht toe aan piels dichter bij de targetpiel volgens een i normaalverdeling Ce j σ met C.5 en σ.85 Prewitt Deze filter tracht randen te vinden in de afbeelding. We beschouwen de filter steeds in dimensie dus voor een afbeelding maken we een horizontale en een verticale filter. Randen hebben grote eerste afgeleiden. Zij een afbeelding. Maar in het punt is die afgeleide niet gedefiniëerd. Bovenstaande formules zijn geldig tussen ] [ en ] [
nders gezegd de afgeleide wordt steeds een beetje te veel naar rechts berekend. Om dit te vermijden nemen we als de afgeleide van naar in het punt ofwel het verschil tussen en - ofwel het gemiddelde van en. Beide benaderingen resulteren in volgende epressies op een constante factor na : De resulterende waarden kunnen zowel positief als negatief zijn. Het corresponderende beeld bevat de absolute waarden van het resultaat. Dit geldt ook voor de andere beelden die het resultaat voorstellen van het toepassen van een filter dat negatieve waarden kan opleveren. Sobel De Sobel filter werkt analoog maar kent een groter gewicht toe aan piels dichter bij de targetpiel gelegen. Laplacian De Laplacian veronderstelt dat een edge niet een erg grote eerste afgeleide heeft maar dat er een sterke stijging is in de intensiteitsverandering. Daarvoor moeten we dus de tweede afgeleide beschouwen. [ ] [ ] [ ] [ ] Unsharp Masking Het versterken van de randen kunnen we bekomen door het beeld bekomen door de laplacian negative edges af te trekken van het originele beeld. R -
Combinatie van filters De laplace filter is zeer gevoelig voor ruis in de afbeelding. Daarom wordt de laplacian filter vaak gecombineerd met de gaussian. De resulterende filter is een pak minder gevoelig voor ruis en heet de Marr-Hildreth filter. Reken deze filter uit. 8 6 * 6 We rekenen deze convolutie uit in stapjes. De tweede operand werd telkens gespiegeld en verschoven zodat het resultaat bekomen wordt door het vermenigvuldigen van overeenkomstige elementen van beide matrices en de producten op te tellen zoals een scalair product. Merk op dat de spiegeling afkomstig van de mintekens in de convolutieformule hier geen effect heeft aangezien de filters smmetrisch zijn. > 8 > 5
> > En zo voort Een aantal filters hebben een duidelijke oriëntatie zoals de Prewitt en Sobel filter. Kunnen we gebaseerd op die filter een filter maken die minder/niet oriëntatie gevoelig is? Links zie je het resultaat na toepassing van de horizontale filter in het midden van de verticale en rechts het resultaat na combinatie van beide filters. Het is niet mogelijk een filter te ontwerpen dat door louter convolutie met een beeld randen detecteert ongeacht hun oriëntatie. Indien het horizontale en verticale filter opgeteld worden ontstaat een filter dat gevoelig is voor randen in één van de twee diagonaalrichtingen welke hangt af van de combinatie van tekens in de filters ga dit zelf na. ls we echter een niet-lineaire operatie toelaten kunnen we zeer eenvoudig alle randen in een beeld detecteren. ls we eerst het horizontale en verticale filter apart toepassen en dan de absolute waarden van het resultaat optellen dan krijgen we een oriëntatie-ongevoelige randdetector zoals te zien is in het derde beeld.