Face detection in color images Verslag. Domien Nowicki 0522689 Bjorn Schobben 0522953

Vergelijkbare documenten
Hertentamen 8D040 - Basis beeldverwerking

Tentamen Beeldverwerking TI2716-B Woensdag 28 januari

OEFENINGEN PYTHON REEKS 5

Wetenschappelijk Rekenen

Tentamen 8D040 - Basis beeldverwerking. 24 juni 2011, uur

Informatica: C# WPO 9

Ontwerp van een beeldverwerkingsprocedure voor kwantificering en karakterisering van vlokken en draden in actief slibsystemen.

Functie beschrijving: Het automatisch aanmaken van een raai-volgende contour

Tentamen 8D040/41 - Basis beeldverwerking. 25 juni 2010, uur

ALL SKY FOTO'S PROCEDURE

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Workshop XIMPEL TV Winoe Bhikharie Vrije Universiteit Amsterdam / info@ximpel.net

Het JPEG compressie algoritme, IS

Snelle algoritmen voor Min en Max filters

Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s

PROJECT 1: Kinematics of a four-bar mechanism

Tentamen 8D040 - Basis beeldverwerking

Parking Surveillance. foreground/background segmentation - objectherkenning. Examen Beeldverwerking Pieter Vancoillie

Eye Feature Detection Towards Automatic Strabismus Screening

PROJECT 2 - MAZE DRIVE - OFFERTE RICK VAN VONDEREN

n-queens minimale dominantie verzamelingen Chessboard Domination on Programmable Graphics Hardware door Nathan Cournik

Wetenschappelijk Rekenen

Opgave 2 ( = 12 ptn.)

Autonoom vinden van een object met een quadcopter

Normering en schaallengte

Oplossingen Datamining 2II15 Juni 2008

Computer Vision: Hoe Leer ik een Computer Zien?

Van DSRL naar CCD Narrowband en RGB. Dick van Tatenhove

Wetenschappelijk Rekenen

Random-Getallen. Tristan Demont en Mark van der Boor en

6.0 Voorkennis AD BC. Kruislings vermenigvuldigen: Voorbeeld: 50 10x ( x 1) Willem-Jan van der Zanden

The Color of X-rays. Spectral Computed Tomography Using Energy Sensitive Pixel Detectors E.J. Schioppa

Oefeningenles beeldverwerking

Informatica: C# WPO 11

Niveaudetectie van gevulde wijnflessen

3. Structuren in de taal

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

Proef-tentamen Algoritmiek Datum en tijd

Een kleurmodus bepaalt welk kleurmodel wordt gebruikt om een afbeelding weer te geven en af te drukken. kleurmodi bepalen:

Deel 1. Wat is HDR fotografie?.

WELKOM BIJ UNICODING PROCESSING. Unicoding 1. Handleiding docent LES 1 DEEL A: Vormen, coördinaten en kleuren

algoritmiek - antwoorden

Prijslijst Januari 2008 Genoemde prijzen zijn Inclusief 19% BTW

Bloemdetectie aardbeiplanten voor plaatsspecifiek spuiten tegen Botrytis

Toepassingen op discrete dynamische systemen

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Beknopte uitwerking Examen Neurale Netwerken (2L490) d.d

Tentamen Data Mining

NOdoG: afkorting van: no dot gain (geen puntaangroei) initiatief van Medibel+ in samenwerking met Agfa, C-Sharp, Online Grafics en Sagam

Wetenschappelijk Rekenen

Deep Space Carving. Verslag van: Roelant Schouten Merlijn Steingröver David Persons. Begeleider: Leo Dorst

Tweede Programmeeropgave Numerieke Wiskunde 1 De golfplaat Uiterste inleverdatum : vrijdag 16 mei 2003

adgrav OVERZICHT LED BARS ADVIES VERKOOP PRIJZEN VERSIE: JANUARI 2010 voor de volledige technische informatie zie website:

Ontwikkeling van een algoritme om eigen handen te detecteren in eye-tracker beelden

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

DEC SDR DSP project 2017 (2)

Communicatietheorie: Project

Raamwerk voor Optimale Globale Belichting

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Verbanden en functies

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Opgaven elektrische machines ACE 2013

Inleiding Digitale Techniek

Belang van kleurcorrectie

Cover Page. The handle holds various files of this Leiden University dissertation.

Labo 2 Programmeren II

Computer Vision: Hoe Leer ik een Computer Zien?

Richtlijnen voor het gebruik van het logo

Er is nog heel wat voor nodig om van alle losse HTML-code

Tentamen 8D040 - Basis beeldverwerking. 24 juni 2011, uur

Informatica: C# WPO 13

5,7. Samenvatting door een scholier 903 woorden 28 september keer beoordeeld. Informatica. Samenvatting Informatica Hoofdstuk 2

Informatica: C# WPO 12

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Inleiding MATLAB (2) november 2001

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen

Beeldverwerking. Beeldverwerking

Prijslijst Januari 2014

Addendum Syllabus Programmeren voor Natuuren Sterrenkunde /17: Opdracht 10

Wat is perceptie? Artificiële Intelligentie 1. Visuele perceptie. Perceptie. een probleem? De camera obscura

Examen Algoritmen en Datastructuren III

Informatica: C# WPO 4

Maken en controleren van rasters met neerslaghoeveelheden

Portret Bewerkingen.

2IV10 Oefentoets uitwerking

Software Test Documentation

Informatica: C# WPO 10

Strip figuurtje inkleuren in Photoshop

EXAMEN INFORMATIETHEORIE I (5JJ40 / 5K020) 25 maart 2004, 9u00 12u00-1 -

Random Sampling Strategies for Robust Motion Estimation

Verwijderen van kleurzweem met Photoshop.

Modeluitwerking Tentamen Computationele Intelligentie Universiteit Leiden Informatica Vrijdag 11 Januari 2013

Examen Datastructuren en Algoritmen II

Percentage afwijkingen groter dan vijf decibel

Wetenschappelijk Instituut Volksgezondheid. Verwerking van gecensureerde waarden

SPSS Introductiecursus. Sanne Hoeks Mattie Lenzen

Eerste serie opgaven Systeemtheorie

Hoe je een structuur op een oneffen oppervlak aanbrengt

Uitwerking tentamen Analyse van Algoritmen, 29 januari

[Hanssen, 2001] R F Hanssen. Radar Interferometry: Data Interpretation and Error Analysis. Kluwer Academic Publishers, Dordrecht 2001.

Transcriptie:

Face detection in color images Verslag Domien Nowicki 0522689 Bjorn Schobben 0522953

Inhoudstabel Inleiding... 3 Gezichtsdetectiealgoritme...3 Gezichtsmasker aanmaken...4 Belichting compensatie... 5 Niet-lineaire transformatie naar Y/Cb/Cr kleurruimte...6 Huidskleurdetectie door ellips model... 6 Gezichtskandidaten aanmaken...7 Eye en Mouth map aanmaken...7 Features zoeken...8 Voorbeelden... 10 Gelepasfoto.jpg... 10 Familie.jpg... 11 Lindsay.jpg...11 Ballmer.jpg...11 Mieke.jpg... 12 Brigit.jpg... 12 Referenties... 12

Inleiding Het doel van dit project is het implementeren van een kleurgebaseerd gezichtsdetectiealgoritme dat beschreven staat in [1] met behulp van Matlab. Gezichtsdetectiealgoritme Het gezichtsdetectiealgoritme zal een input beeld aannemen, en zal daarop de verschillende kandidaat gezichten, ogen en monden op markeren. We kunnen het algoritme opdelen in verschillende fasen, waarbij we elke fase apart zullen bespreken: - Gezichtsmasker aanmaken - Gezichtskandidaten aanmaken - Eye en Mouth map aanmaken - Features zoeken Eerst wordt er een globaal gezichtsmasker aangemaakt op basis van de huidskleur. Dit masker wordt opgedeeld in verschillende blobs, waarbij elke blob die groot genoeg is beschouwd wordt als een gezichtskandidaat (bij onze implementatie is een gezichtskandidaat minimum 13x13 groot). Van elk zo een gezichtskandidaat worden de oog kandidaten en mond kandidaten gezocht, en gemarkeerd op de tekening. Het hele proces kan samengevat worden tot 1 matlab functie: Matlab: function markedimg = FaceDetection(img) img input (n x m x 3) RGB beeld waar gezichtsdetectie moet uitgevoerd op worden markedimg output (n x m x 3) RGB beeld waar gezichten op gemarkeerd werden Voor het markeren hebben we enkele hulpfuncties geschreven: Matlab: function markedimg = MarkCandidates(img, candidates, color) img input (n x m x 3) RGB beeld waar gezichtsdetectie moet uitgevoerd op worden candidates input (k x 2) matrix van kandidaat posities color input (1 x 3) RGB markeer kleur markedimg output (n x m x 3) RGB beeld waar kandidaten op gemarkeerd werden Matlab: function markedimg = MarkBoundingBox(img, color, topleftx, toplefty, bottomrightx, bottomrighty) img input (n x m x 3) RGB beeld waar gezichtsdetectie moet uitgevoerd op worden color input (1 x 3) RGB markeer kleur topleftx, input Coördinaten van de bounding box toplefty, bottomrightx, bottomrighy markedimg output (n x m x 3) RGB beeld waar de bounding box op gemarkeerd werd

De verschillende gevonden gezichtskandidaten worden omkaderd met een rode kleur, de oog kandidaten worden gekleurd met een groene stip, en de mond kandidaten met een blauwe stip. Bij onze implementatie is het maximum aantal oog kandidaten 8, en het maximum aantal mond kandidaten 5. In het voorbeeld hier rechts, is het maximaal aantal kandidaten voor ogen en monden gevonden. Figuur 1: Gedetecteerd gezicht Gezichtsmasker aanmaken In deze fase wordt een binair gezichtsmasker aangemaakt op basis van de huidskleur. Om de huidskleur te bepalen, wordt dit probleem opgedeeld in verschillende deeltaken: - Belichting compensatie - Niet-lineaire transformatie naar Y/Cb/Cr kleurruimte - Huidskleurdetectie door ellipsmodel Omdat het bekomen gezichtsmasker nog gaten kan vertonen, worden deze opgevuld zodat het gezichtsmasker een mooi oppervlak is. Matlab: function [Mask, Y, NLCb, NLCr] = FaceMask(img) img input (n x m x 3) RGB beeld waar binair masker wordt van aangemaakt Mask output (n x m x 1) binair gezichtsmasker Y output (n x m x 1) Y beeld map, met doubles in range 16..235 NLCb output (n x m x 1) Y-onafhankelijk Cb beeld, met doubles in range NLCr output (n x m x 1) Y-onafhankelijk Cr beeld, met doubles in range Figuur 2: Oorsponkelijk beeld Figuur 3: Gezichtsmasker met gaten Figuur 4: Gezichtsmasker

In het voorbeeld wordt het haar hier ook gezien als huidskleur, dit komt omdat niet alleen blanke huidskleur, maar ook zwarte huidskleur wordt gedetecteerd. Belichting compensatie Eerst moeten de overheersende kleuren door belichting (color bias) worden gecorrigeerd, zodat huidskleurdetectie beter zal werken. We kijken hoeveel pixels van de top 5% luma (pixels met Y waarde >= 223.5/255) in het beeld aanwezig zijn, indien dit meer dan 100 is gaan we verder met de belichting compensatie. We noemen deze pixels white reference pixels, en berekenen de gemiddelde R, G en B waarden hiervan. Vervolgens gaan we het volledige het input beeld compenseren door elke pixel zijn R, G, en B te vermenigvuldigen met (1/M) waarbij M = gemiddelde R, G of B waarde. Elke waarde die groter is dan 1 wordt gelijk gesteld aan 1. Matlab: function rgbout = LightingCompensate(rgbin) rgbin input (n x m x 3) RGB beeld rgbout output (n x m x 3) RGB beeld dat belichting gecompenseerd werd, met doubles in range 0..1 Figuur 5: Pasfoto met gele overheersende kleur Figuur 6: Gezichtsmasker met gaten, en zonder belichting compensatie Figuur 7: Gezichtsmasker zonder belichting compensatie Figuur 8: Pasfoto met belichting compensatie Figuur 9: Gezichtsmasker met gaten, met belichting compensatie Figuur 10: Gezichtsmasker, met belichting compensatie

Niet-lineaire transformatie naar Y/Cb/Cr kleurruimte Dan wordt het belichting gecompenseerde RGB beeld omgevormd naar een niet-lineaire (Yonafhankelijke) Y/Cb/Cr kleurruimte. Dit gebeurd volledig volgens de formules in de paper, en met de gevolgde errata ervan. Om het RGB beeld te converteren naar Y/Cb/Cr maken we gebruik van de Matlab functie rgb2ycbcr. Matlab: function [Y, NLCb, NLCr] = NLTransform(rgbmap) rgbmap input (n*m x 3) RGB beeld map, met doubles in range 0..1 Y output (n*m x 1) Y beeld map, met doubles in range 16..235 NLCb output (n*m x 1) Y-onafhankelijk Cb beeld map, met doubles in range NLCr output (n*m x 1) Y-onafhankelijk Cr beeld map, met doubles in range Voor de niet-lineaire transformatie hebben we enkele hulpfuncties geschreven die de formules, zoals beschreven in de paper, evalueren. (waarbij Cx = Cb of Cr): Matlab: function NLCx = CxAccent(Y, Cx) Y input (n*m x 1) Y beeld map, met doubles in range 16..235 Cx input (n*m x 1) Cx beeld map, met doubles in range NLCx output (n*m x 1) Y-onafhankelijk Cx beeld map, met doubles in range Matlab: function cx = CxStreep(Y) Y input (n*m x 1) Y beeld map, met doubles in range 16..235 cx output (n*m x 1) Geëvalueerde Cx functie zoals in de paper Matlab: function wcx = WCx(Y) Y input (n*m x 1) Y beeld map, met doubles in range 16..235 wcx output (n*m x 1) Geëvalueerde WCx functie zoals in de paper Huidskleurdetectie door ellips model Vervolgens wordt de Y-onafhankelijke Cb en Cr beeld mappen gebruikt om te detecteren als we te maken hebben met een huidskleur of niet. Dit gebeurd door de Y-onafhankelijke Cb en Cr beeld mappen om te zetten naar ellips coördinaten, en dan moet men nagaan als deze coördinaten zich bevinden in de huidskleur ellips. Deze formules hebben we ook gebruikt van de paper, evenals de constanten voor de huidskleur ellips.

Matlab: function MaskMap = IsSkinColor(NLCb, NLCr) NLCb input (n*m x 1) Y-onafhankelijk Cb beeld map, met doubles in range NLCr input (n*m x 1) Y-onafhankelijk Cr beeld map, met doubles in range MaskMap output (n*m x 1) binair gezichtsmasker beeld map Het verkregen beeldmap wordt terug omgezet naar een 2-dimensionaal beeld (n x m x 1), om er makkelijker mee te kunnen werken. Gezichtskandidaten aanmaken Eens het gezichtsmasker aangemaakt is, kunnen we verschillende gezichtskandidaten (blobs) onderscheiden door gebruik te maken van de Matlab functie bwlabel. Vervolgens zoeken we de bounding box voor elke kandidaat, en snijden we deze gezichtskandidaat eruit, voor verdere verwerking. Deze kandidaat uitsnij code is geimplementeerd in de functie FaceDetection, die al eerder aan bod kwam. Matlab: function [topleftx, toplefty, bottomrightx, bottomrighty] = BoundingBox(Mask) Mask input (n x m x 1) binair masker topleftx, toplefty, bottomrightx, bottomrighty output coördinaten van de bounding box van het masker De functie BoundingBox maakt gebruik van de Matlab functie regionprops. In het voorbeeld hier rechts ziet men een aantal gezichtskandidaten omkaderd in een rode kleur. Figuur 11: Gezichtskandidaten Eye en Mouth map aanmaken Eens een gezichtskandidaat uitgesneden werd, gaat men hiervoor de Eye en Mouth map aanmaken. Deze Eye en Mouth maps werden aangemaakt zoals dat werd beschreven in de paper. Voor de dilatie en erosie hebben we gebruik gemaakt van een cirkel als structuring element, in plaats van een hemispheric structuring element, omdat dit makkelijker om mee te werken was.

Bij de chroma eye map hebben we gebruik gemaakt van de Matlab functie histeq, om de histogram equalisatie uit te voeren. Matlab: function [EM, MM] = ConstructEyeMouthMaps(Y, Cb, Cr, FaceMask) Y input (n x m x 1) binair masker Cb input (n x m x 1) (Y-onafhankelijk) Cb beeld, met doubles in range Cr input (n x m x 1) (Y-onafhankelijk) Cr beeld, met doubles in range FaceMask input (n x m x 1) binair masker beeld EM output (n x m x 1) Eye-map beeld, met doubles in range 0..1 MM output (n x m x 1) Mouth-map beeld, met doubles in range 0..1 We hebben ook een hulpfunctie geschreven die een beeld kan normalizeren, omdat dit een veel gebruikte operatie was bij het opbouwen van de eye en mouth maps. Matlab: function normalizedimg = Normalize(img, factor) img input (n x m x 1) beeld, eender welke range factor input Gewenste hoogste waarde in het beeld normalizedimg output (n x m x 1) genormalizeerd beeld, in range 0..factor Figuur 12: Oorsponkelijk beeld Figuur 13: Eyemap Figuur 14: Mouthmap Features zoeken Vervolgens moeten we uit zo een Eye map, of Mouth map de posities van de features (kandidaat ogen/mond) kunnen uithalen. Dit doen we door pyramide decompositie en iteratieve thresholding. We berekenen het aantal pyramide levels zoals beschreven in de paper. In onze implementatie hebben wij ook Fc = 7 en Fe = 12.

Nu dat we het aantal pyramide levels weten, berekenen we op basis daarvan de pyramide breedte en lengte voor elke level. We maken hiervoor gebruik van de Matlab functie linspace. Vervolgens berekenen we de alpha levels voor elke level, met de begin en eind alpha beschreven in de paper. Ook hiervoor maken we gebruik van de Matlab functie linspace. We berekenen ook de drempel waarde (threshold) voor elke level, op basis van de alpha zoals beschreven in de paper. Dan beginnen we door de gegeven Eye- of Mouth-map te herschalen naar het kleinste pyramide level formaat. Hiervoor maken we gebruik van de Matlab functie imresize. Vervolgens maken we een binair beeld aan door het herschaalde beeld te splitsen op basis van de drempelwaarde voor de huidige pyramide level, gevolgd door morfologische sluiting. Vervolgens gebruiken we de Matlab functie bwlabel om te tellen hoeveel features (blobs) er gevonden zijn. Indien dit gelijk of meer is dan het gewenste aantal maximum features, stopt het algoritme, en worden de huidig gevonden features teruggegeven. Indien dit niet zo is, wordt het beeld vergoot naar de volgende pyramide level, en gebeurd het hele proces opnieuw. De positie van elke feature wordt berekend door het zwaartepunt te berekenen van deze feature (blob). Ook wordt er aan elke feature een gewicht gehangen, waarbij een feature met vele heldere pixels een groter gewicht krijgt dan een feature met minder heldere pixels. Op deze manier worden de features gesorteerd op grootste gewicht eerst, zodat de posities van features die teruggegeven worden, de posities van de meest heldere en grootste features zijn die we gevonden hebben. Voor het sorteren hebben we de Matlab functie sortrows gebruikt. Matlab: function candidates = FeaturePyramid(FaceMask, Map, MaxFeatures) FaceMask input (n x m x 1) binair gezichtsmasker beeld Map input (n x m x 1) Eye- of Mouth-map beeld, met doubles in range 0..1 MaxFeatures input Aantal features dat maximaal gevonden moet worden candidates output (m x 2) matrix met posities van de features Matlab: function [ThresholdImage, FeatureCount] = CreateThreshold(Map, Th) Map input (n x m x 1) Eye- of Mouth-map beeld Th input Drempelwaarde ThresholdImage output (n x m x 1) binair drempel beeld, met morfologische sluiting FeatureCount output Aantal features dat gevonden werd

Matlab: function [xcenter, ycenter] = CalculateCenterPoint(Mask) Mask input (n x m x 1) binair masker beeld xcenter, ycenter output Coördinaten van het zwaartepunt van het masker Figuur 15: Pyramide levels Voorbeelden Gelepasfoto.jpg De ogen en mond zijn te vinden bij de kandidaten, alhoewel de neus ook gevonden werd als een mogelijke mond kandidaat.

Familie.jpg De verschillende gezichtskandidaten overlappen met meerdere gezichten, dit komt omdat de verschillende gezichten dicht bij elkaar zijn, en ze als 1 geheel gezien worden. Ook zijn de oog en mond maps niet zo goed gelukt, omdat de ogen en mond zeer klein zijn. Lindsay.jpg Ballmer.jpg

Mieke.jpg Brigit.jpg Referenties [1] R.-L. Hsu, M. Abdel-Mottaleb, and A. K. Jain, "Face detection in color images," IEEE Trans. Pattern Analysis and Machine Intelligence, vol. 24, no. 5, pp. 696-706, May 2002. http://citeseer.ist.psu.edu/article/hsu02face.html.