Hogeschool West-Vlaanderen Master Industri¨ele Wetenschappen: Electronica-ICT Voorzitter: prof. ir. F. De Pauw
Studie van voetgangerdetectie met thermografische camera door Robin devos
Promotoren: prof. ir. F. De Pauw, ir. B. Decock
Scriptie ingediend tot het behalen van de academische graad van Master in de Industri¨ ele Wetenschappen: elektronica-ICT optie MIT Academiejaar 2012–2013
VOORWOORD
i
Voorwoord Eerst wil ik FLIR (voormalig Traficon) bedanken om mij de kans te geven deze masterproef te doen. Meerbepaald wil ik ir. Bernard Decock bedanken voor zijn begeleiding tijdens de voorbereidende stage. Hierdoor is mijn interesse in het onderwerp gegroeid en is mijn motivatie om aan deze masterproef te werken gekomen. Samen met prof. ir. Filip De Pauw (Howest) wil ik hen bedanken voor de hulp ik heb gekregen. Dankzij hun inzicht, opmerkingen en suggesties heb ik dit kunnen realiseren. Graag had ik ook mijn ouders willen bedanken voor hun onophoudelijk steunen, zonder hen zou ik hier niet staan. Ze waren een rots in de branding en zijn dat nog steeds. Tot slot zou ik ook mijn vriendin Emma Engels bedanken. Tijdens de moeilijke tijden kon ik altijd op haar rekenen om me de nodige afleiding te geven. Als de motivatie ver te zoeken was, gaf ze mij terug moed en hoop om verder te doen. Verder wil ik nog een aantal mensen bedanken die hier niet bij naam vermeld zijn maar toch op een of andere manier voor mij een uitlaatklep geweest zijn, mij gesteund hebben, en mij mee gemaakt hebben tot de mens die ik nu ben. Bedankt.
Robin Devos, mei 2013
TOELATING TOT BRUIKLEEN EN PUBLICATIE OP DSPACE
ii
Toelating tot bruikleen en publicatie op DSpace
“De auteur geeft de toelating deze scriptie, evenals alle nuttige en praktische informatie omtrent deze scriptie, op te nemen in een daartoe speciaal opgezette DSPace databank (http://dspace.howest.be) en deze databank via internet toegankelijk te maken voor alle mogelijke ge¨ınteresseerden. De auteur geeft eveneens toelating de scriptietekst te gebruiken voor afgeleide producten, zoals daar zijn: abstractenverzamelingen en catalogi. Tenslotte geeft de auteur ook de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopi¨eren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.”
Robin Devos, mei 2013
Studie van voetgangerdetectie met thermografische camera door Robin Devos Scriptie ingediend tot het behalen van de academische graad van Master in de Industri¨ ele Wetenschappen elektronica-ICT: optie MIT Academiejaar 2012–2013 Promotoren: prof. ir. F. De Pauw, ir. B. Decock Hogeschool West-Vlaanderen Associatie Universiteit Gent Master Industri¨ele Wetenschappen: Electronica-ICT Voorzitter: prof. ir. F. De Pauw
Samenvatting Deze paper onderzoekt de mogelijkheid om een voetgangersdetector te ontwikkelen met een gegeven thermografische camera. Hiervoor moet eerst een studie van bestaande detectie technieken worden gemaakt. Uit deze studie worden nuttige methoden geselecteerd om uiteindelijk een proof of concept algoritme te ontwikkelen. Dit algoritme moet aantonen dat het mogelijk is om een detector te maken met de gegeven videocamera. Het uiteindelijke algoritme gebruikt een voorgrond segmentatie techniek, de detector registreert met andere woorden enkel bewegende voetgangers. Van de voorgrond wordt een motion history image genomen en bij de voorgrond opgeteld. Op die manier wordt een robuuster object gecre¨eerd waarbij de blobs meer 1 geheel vormen. Ook krijgen voertuigen een bredere basis en kunnen deze eenvoudiger worden uitgefilterd. Uit het samengevoegd beeld van voorgrond met de motion history image worden er blobs gemaakt, per object zou er nu 1 blob moeten zijn. Deze blobs moeten aan enkele voorwaarden voldoen vooraleer ze effectief kunnen worden gevisualiseerd. De detectie van voetgangers gebeurt op basis van menselijke karakteristieken, rekening houdend met het perspectief en de plaatsing van de camera. Vindt er een detectie plaats, dan wordt deze gevolgd aan de hand van de overlapping van de bounding boxes tussen 2 opeenvolgende frames.
Het uiteindelijk algoritme werd getest door alternatieve methoden te gebruiken of bepaalde stappen uit te sluiten in het process, om zo tot een conclusie te komen. Het algoritme behaalt een sensitiviteit van 20% met een precisie van 54,6%. De resultaten van de detector tonen aan dat het niet kan dienen als proof of concept voor deze thermografische camera. Het ontwikkelde algoritme kan een basis vormen voor een verdere uitbreiding op het proof of concept algoritme.
Trefwoorden Detectie, infrarood, voetgangers, OpenCV, algoritme, C++
Study of pedestrian detection with thermographic camera Robin Devos Supervisor(s): prof. ir. Filip De Pauw, ir. Bernard Decock Abstract—The research presented in this paper examines the usability of a given thermographic camera[5] for a pedestrian detection algorithm. To examine this, there must be a study of existing techniques used for detection. A proof of concept algorithm was made using the techniques from the study. The developed algorithm isn’t adequate as a useful detector but proves the possibility to build a detector for the given camera. The created algorithm could be used as a baseline for future detectors. Keywords—Detection, infrared, thermal, pedestrians, OpenCV
I. I NTRODUCTION HE current detection system is using a color camera and the detections are based on detection blocks, put manually in the scene. They want to change this system by replacing the colored image camera by a thermographic camera and replacing these detection blocks. The given thermographic camera isn’t a high-class camera, it would be used for commercial purposes thus it must be affordable. Therefor a study must be made to research the possibility to create a detection algorithm for the given thermographic camera. The purpose of this paper is to make a study of the current existing methods used in the field of detection. The researched techniques can be used in the proof of concept algorithm. With the developed algorithm it should be an indicator if it is worthwhile to develop a commercial detection algorithm. The method of developing the algorithm started with a state of the art study of current existing techniques in the field of detection. Several of these researched techniques will be used in the design of one or more prototypes, which must be coded. A test framework will be created for an easy testing of the given footage. After fine-tuning the algorithms, these will be tested with the made test framework. The final accumulated results will be calculated to the form of statistics, these include precision, sensitivity, specifity and accuracy.
T
II. A LGORITHM DEVELOPMENT The final detector exists of several techniques. A. Background subtraction Before using the background subtraction, a Gaussian filter is used to remove some basic noise. A clear distinction is made between moving and non-moving objects in the video by using a background subtraction. Most pedestrians will be classified as moving objects only if a pedestrians stops for about 10 seconds it will fade to the background until the pedestrian moves again. The used method is an improved adaptive gaussian mixture model for background subtraction by Zivkovic[1] because it yields good results in real-time.
B. Motion History Image The difference between the contrast of moving objects and the background is often small therefor the foreground segmentation frequently results in objects with broken down blobs. This issue is mostly resolved by adding a motion history image to the foreground segmentation. By adding this step, the blobs are more joined together and fast moving objects are better recognized because of their long tail following them. C. Blobs The blobs resulting from the joined foreground an motion history images will have noise. To remove this noise, an estimation of the blob is made by a filled polygon shape. These blobs may not be too big or too small, small blobs are often just noise in the image and big blobs are most likely no pedestrians. A blob shouldn’t be on the edge of a frame because incomplete or partially visible blobs are more prone to be detected as false positive. D. Detection The detection of pedestrian comes from their human characteristics, people are taller than they are wide. A better selection of blobs is made by including the perspective of blobs in a scene thus adding a size threshold to blobs. If a person is far or under the camera their height/width ratio becomes less noticable, this condition should be weakened if that is the case. By combining these statements it is possible to make a simple low-class detector. E. Tracking A tracking algorithm was developed to follow detections. A pedestrian must first be detected in an amount of frames before the person will get a bounding box and will genuinly be classified as detected. If the overlay between bounding boxes in a sequence of frames is large enough, it will be defined as the same bounding box thus the bounding box is being tracked. III. T EST FRAMEWORK The given footage consists of 21 video’s with a ground truth file for each video. Before the actual testing can begin, a detector needs to create his own log file with all the detected objects. Both log files will be compared to each other frame by frame to register true and false positives and negatives. For each video the results of the test will be accumulated to get an average efficiency of the specified algorithm.
(in %) Viola Jones Prototype 1 Prototype 2 Prototype 3 Prototype 4
sensitivity 1,4 9,3 10,3 12,1 8,4
specificity 99,8 89,3 88,6 89,4 87,7
precision 90,2 44,3 42,7 50,4 40,4
accuracy 41,0 51,0 53,1 53,0 48,3
TABLE I T HE RESULTS OF THE DIFFERENT PROTOTYPES .
IV. D ETECTOR RESULTS A. Viola Jones This prototype doesn’t use any preprocessing. The detection happens directly on the thermographic imagery. The used model is the personclassifier of OpenCV. The Viola Jones algorithm[4] has a very low sensitivity (table I). But has a good precision. The accuracy is relatively high, even with a low sensitivity. This is because of the many true negatives. This prototype will not be used. B. Own made detector B.1 First prototype
Fig. 1. Schematic representation of the prototypes.
The first prototype exists of the essential components of a detector (figure 1). Only the blue blocks are used, the red blocks are additions for other prototypes. The detection is made by human characteristics and a basic tracking algorithm is used. The results (table I) are rather low. The specificity has a good value. B.2 Adding blob creation By adding this step to the first prototype, a first red block is added (figure 1) and creates the second prototype. It results in a higher sensitivity (table I). The precision and specificity are lower but the sensitivity is the most important value. This step stays implemented because of its positive effect. B.3 Adding blob conditions The third prototype is made by adding this step, a second red block, to the second prototype (figure 1). These conditions are used to make a preselection of the visible blobs. These must have an appropriate size. Another condition removes blobs if they come at the border of the frame. The results of this step are overall improving (table I). C. Adding a motion history image The fourth prototype adds the motion history image (MHI) step to the third prototype. This prototype uses all the red and blue steps (figure 1). The bad results (table I) might be due
to the foreground segmentation technique. Before this step is removed, other foreground techniques will be evaluated. C.1 Alternative foreground segmentation (in %) Sigma delta Grimson[3] Zivkovic[1]
sensitivity 8,4 17,3 19,9
sensitivity 87,7 88,7 87,9
precision 40,4 52,5 54,6
accuracy 48,3 58,8 59,1
TABLE II T HE RESULTS USING ALTERNATIVE FOREGROUND SEGMENTATION .
The schematic of the fourth prototype is kept (figure 1), only the foreground segmentation technique is changed. It is obvious that the algorithm of Zivkovic is the best choice as foreground segmentation. D. Detector without MHI (in %) final detector without MHI
sensitivity 19,9 16,3
specificity 87,9 89,4
precision 54,6 53,5
accuracy 59,1 58,6
TABLE III T HE COMPARISON WITH THE FINAL DETECTOR .
These results (table III) prove that a motion history image could be useful. This depends on the used foreground segmentation technique. For the final detector the MHI step is implemented, due to its positive effect. The final detector is shown in figure 2, the results in table III.
Fig. 2. Schematic representation of the final detector.
V. C ONCLUSION After an elaborate study of existing techniques used for detecting, a proof of concept detection algorithm was made. The results of the detector reveal that it can not be used as a proof of concept for this thermographic camera. The developed algorithm could be used as a baseline for a further elaboration of the proof of concept detection algorithm. R EFERENCES [1] Zoran Zivkovic, Improved Adaptive Gaussian Mixture Model for Background Subtraction, IEEE Computer Society, 2004. [2] Jose M. Milla, Sergio L.Toral, Manuel Vargas, Federico Barrero, Computer Vision Techniques for Background Modeling in Urban Traffic Monitoring, Urban Transport and Hybrid Vehicles, pp. 192, Sciyo, Croatia, Sep. 2010. [3] Chris Stauffer, W.E.L. Grimson, Adaptive background mixture models for real-time tracking, IEEE Computer Society Conference on Computer Vision and Pattern Recognition, vol. 2, pp. 246-252, 1999. [4] Paul Viola, Michael J. Jones, Robust Real-Time Face Detection, Int. J. Computer Vision 2004, vol. 57, pp. 137-154, Hingam, USA, may 2004. [5] FLIR, Datasheet FC-Series, www.flir.com
INHOUDSOPGAVE
vii
Inhoudsopgave Voorwoord
ii
Toelating tot bruikleen en publicatie op DSpace
iii
Overzicht
iv
Extended abstract
vi
Inhoudsopgave
viii
Gebruikte afkortingen
xi
1 Inleiding 1.1 FLIR . . . . . . . 1.2 Probleemstelling 1.3 Onderzoeksvraag 1.4 Indeling . . . . .
. . . .
1 1 2 2 2
. . . . . . . . . . . . .
3 3 4 4 4 6 13 16 16 20 21 23 26 27
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2 Literatuurstudie en technologieonderzoek 2.1 OpenCV . . . . . . . . . . . . . . . . . . . . . 2.2 Detectie-technieken . . . . . . . . . . . . . . . 2.3 Feature tracking . . . . . . . . . . . . . . . . . 2.3.1 Morfologische transformaties . . . . . . 2.3.2 Segmentatie . . . . . . . . . . . . . . . 2.3.3 Tracking . . . . . . . . . . . . . . . . . 2.4 Object herkenning . . . . . . . . . . . . . . . 2.4.1 Viola Jones . . . . . . . . . . . . . . . 2.4.2 Histogram of Oriented Gradients . . . 2.4.3 Fastest pedestrian detector in the west 2.5 Infrarood versus zichtbaar licht . . . . . . . . 2.5.1 Digital detail enhancement . . . . . . . 2.5.2 FC690 . . . . . . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
INHOUDSOPGAVE 2.6
viii
Statistiek . . . . . . . . 2.6.1 Confusion matrix 2.6.2 Sensitivity . . . . 2.6.3 Accuracy . . . . 2.6.4 Precision . . . . .
3 Ontwerp 3.1 Algemeen schema . . 3.2 Algoritme . . . . . . 3.2.1 Preprocessing 3.2.2 Detectie . . . 3.2.3 Tracking . . . 3.3 Testen . . . . . . . .
. . . . . .
. . . . . .
. . . . .
. . . . . .
4 Implementatie 4.1 Algoritme . . . . . . . . . 4.1.1 Preprocessing . . . 4.1.2 Detectie algoritme 4.1.3 Tracking . . . . . . 4.2 Test opstelling . . . . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
. . . . .
. . . . . .
. . . . .
5 Resultaten 5.1 Viola Jones . . . . . . . . . . . . . . . . . . . . . . 5.2 Eigen gemaakte detector . . . . . . . . . . . . . . . 5.2.1 Eerste prototype . . . . . . . . . . . . . . . 5.2.2 Met blob creatie . . . . . . . . . . . . . . . 5.2.3 Met blob voorwaarden . . . . . . . . . . . . 5.2.4 Met motion history image . . . . . . . . . . 5.2.5 Alternatieve voorgrondsegmentatie techniek 5.2.6 Detector zonder MHI . . . . . . . . . . . . . 6 Besluit en toekomstperspectieven 6.1 Besluit . . . . . . . . . . . . . . . 6.2 Toekomstperspectieven . . . . . . 6.2.1 Studie . . . . . . . . . . . 6.2.2 Detectie algoritme . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . . . . . .
. . . .
. . . . .
28 28 28 29 29
. . . . . .
30 30 31 31 31 33 33
. . . . .
34 34 34 38 42 43
. . . . . . . .
46 46 47 47 47 48 49 49 50
. . . .
51 51 51 51 52
A Broncode A.1 Preprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.1 Connectie van onderlinge componenten en visualiseren rekening houdende met de grootte beperkingen en de rand . . . . . . . . . . . .
54 54 54
INHOUDSOPGAVE A.2 Detectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.1 Detectie aan de hand van menselijke eigenschappen A.3 Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3.1 Een eenvoudig tracking algoritme . . . . . . . . . .
ix . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
57 57 58 58
Bibliografie
61
Lijst van figuren
64
Lijst van tabellen
66
Lijst van codefragmenten
66
Lijst van codefragmenten
67
GEBRUIKTE AFKORTINGEN
Gebruikte afkortingen AdaBoost
Adaptive Boosting
BG
Background
BRIEF
Binary Robust Independent Elementary Features
FAR
Far Infrared
FAST
Features from Accelerated Segment Test
FG
Foreground
FPS
Frames Per Second
GMM
Gaussian Mixture Model
HOG
Histogram of Oriented Gradients
IR
Infrarood
MHI
Motion History Image
MIR
Mid Infrared
NIR
Near Infrared
ORB
Oriented FAST and Rotated BRIEF
ROC curve
Receiver Operating Characteristic curve
ROI
Region of Interest
SIFT
Surface-Invariant Feature Transform
SURF
Speeded Up Robust Feature
SVM
Support Vector Machine
VJ
Viola Jones
x
INLEIDING
1
Hoofdstuk 1 Inleiding 1.1
FLIR
Figuur 1.1: Logo Traficon
Figuur 1.2: Logo FLIR
Traficon (figuur 1.1) is een West-Vlaams bedrijf dat in 1992 officieel werd opgericht. De oorsprong van het bedrijf ligt in de universiteit van Leuven in 1979, daar werd het onderzoek gestart om verkeersinformatie te verzamelen via camera’s. Ondertussen is Traficon internationaal uitgegroeid met vestigingen vooral in Europa maar ook in Amerika en Azi¨e. Eind 2012 werd Traficon overgenomen door het Amerikaanse bedrijf Flir Systems (figuur 1.2). FLIR biedt verschillende oplossingen voor diverse verkeerssituatie’s en biedt een vorm van toezicht in het verkeer. De output van deze detectiesystemen kan onder meer zorgen voor een betere regeling van de verkeerslichten, hij kan ook naar een verkeerscontrolecentrum worden verzonden waar de situatie daar wordt ge¨evalueerd.
1.2 Probleemstelling
1.2
2
Probleemstelling
FLIR is ge¨ınteresseerd of thermografische videocamera’s met succes kunnen gebruikt worden bij het oplossen van verkeersproblemen. Meer bepaald wil men weten of, voor recent aangekochte camera’s, het mogelijk is een detectie algoritme te onwikkelen voor voetgangers. De huidige oplossing die FLIR aanbiedt, gebeurt door detectiestroken manueel te markeren. Als iets of iemand hierop in de juiste richting beweegt, resulteert dit in een detectie. Het doel van deze thesis is nagaan of het mogelijk is om een detectie-algoritme te maken in het thermografisch vlak.
1.3
Onderzoeksvraag
Aan de hand van een proof of concept detectie algoritme wil men onderzoeken of het mogelijk is om voetangersdetectie te doen met een thermografische camera. Om dit proof of concept algoritme te ontwikkelen is er in eerste plaats een studie nodig van de hedendaagse detectietechnieken. Het algoritme moet in staat zijn om zoveel stilstaande als bewegende voetgangers te detecteren met de mogelijkheid tot tellen, volgen, lokalisatie,. . .
1.4
Indeling
Na deze inleiding worden de hedendaagse technieken bestudeerd literatuur (hoofdstuk 2), dit zonder onderscheid te maken tussen kleur en infrarood beelden. Die kennis wordt in het volgend hoofdstuk omgevormd tot enkele ontwerpen van prototypes (hoofdstuk 3). Vervolgens worden deze prototypes ge¨ımplementeerd (hoofdstuk 4, de beste wordt gekozen om te testen. De resultaten van het geteste algoritme is te vinden in hoofdstuk 5. Als laatste maak ik de conclusie over het onderzoek en welke verdere mogelijkheden er zijn in dit gebied (hoofdstuk 6).
LITERATUURSTUDIE EN TECHNOLOGIEONDERZOEK
3
Hoofdstuk 2 Literatuurstudie en technologieonderzoek 2.1
OpenCV
OpenCV of Open Source Computer Vision[1] is een uitgebreide bibliotheek, gericht op het bewerken van grafische media. Omdat OpenCV een open-source ontwikkeling met een actieve gebruikersbasis, blijven de functies en algoritmes groeien. Enkele van zijn toepassingsgebieden: segmentatie, object herkenning, gebaren herkenning, motion tracking,. . .
Figuur 2.1: Logo OpenCV[1]
OpenCV is crossplatform en wordt ondersteund voor Unix/Linux, Windows, Mac, Android met als programmeertalen C, C++ of python. Naast de originele OpenCV zijn er veel wrappers beschikbaar, hierdoor zijn ook talen als C# (EmguCV), Ch (Ch OpenCV), Java (JavaCV) en meer beschikbaar.
2.2 Detectie-technieken
2.2
4
Detectie-technieken
Om objecten uit afbeeldingen te filteren, bestaan er 2 algemene technieken, beide met hun eigen voor- en nadelen. Een eerste methode ‘feature tracking’ worden een aantal eenvoudige features of karakteristieken van het object bepaald. De eigenschappen die het object karakteriseren zijn vorm, kleur, beweging of gedrag,... Eenmaal de features bepaald zijn, wordt geprobeerd deze te volgen. Indien de track overeenstemt met de gewenste features, dan wordt aangenomen dat deze tracks veroorzaakt werden door het te detecteren object. Een voorbeeld: voetgangers verplaatsen zich altijd via het voetpad. Aan de hand van deze typerende beweging kunnen ze uit beelden worden gefilterd. Objecten zoals dieren, schaduwen, die eenzelfde bewegingszin maken, worden meestal ook als voetgangers gedetecteerd. Er zijn dus meer features nodig zijn dan enkel de beweging om voetgangers te detecteren. De tweede methode ‘Object herkenning’ zal gebruik maken van een aantal features. Een trainingsprogramma zal een combinatie van features aan het object toekennen, deze combinatie wordt de classifier genoemd. Er bestaan verschillende manieren om objecten via deze methode te herkennen. Vaak worden ze gebruikt om specifieke objecten te herkennen, maar niet altijd. Een veelgebruikte manier is om een model gedurende een bepaalde tijd te trainen. Het model is een representatie van het te herkennen object.
2.3
Feature tracking
De meeste basistechnieken worden beschreven in het naslagwerk van Gonzalez, Woods[12].
2.3.1
Morfologische transformaties
Erosie en dilatatie Beide bewerkingen maken gebruik van een structuring element. Dit element wordt op de grenzen van figuren in een afbeelding losgelaten. Er zijn verschillende soorten elementen: vierkant, rechthoek, cirkel, ellips of je kan zelf een element maken. Deze morfologische bewerkingen worden vaak op binaire afbeeldingen toegepast maar dit kan ook op kleurafbeeldingen.
2.3 Feature tracking
5
Bij erosie wordt de figuur gekrompen, dit is een eenvoudige manier om ruis maar ook detail uit een afbeelding te verwijderen. dilatatie gaat de figuren uitzetten dus een eenvoudige manier om details duidelijker te tonen. Voorbeeld van deze bewerkingen zijn te zien in figuur 2.2
Figuur 2.2: Een originele afbeelding(links) gevolgd door een voorbeeld van erosie(midden) en dilatatie(rechts). Beide gebruiken een 3x3 rechthoekig structuring element.
Opening en closing Beide bewerkingen maken gebruik van erosie en dilatatie, enkel de volgorde van gebruik is anders. Opening: Output image = dilatatie( erosie( input image ) ) Closing: Output image = erosie( dilatatie( input image ) ) Opening verzacht de rand van objecten en verwijdert kleine objecten en uitsteeksels. Closing daarentegen vult randen op en verwijdert kleine gaatjes. Beeldpiramides Een input afbeelding wordt gedownsampled of geupsampled. Bij downsampling wordt de afbeelding kleiner en dus ook de resolutie, dit resulteert dus in een minder gedetailleerd beeld. Bij upsampling wordt de afbeelding groter. Indien men een afbeelding eerst zou upsamplen gevolgd door downsamplen zou de afbeelding hetzelfde blijven, de afbeelding krijgt dus geen meer detail. Omgekeerd, eerst downsampling gevolgd door upsampling, zou de afbeelding een vager beeld weergeven dan het origineel.
2.3 Feature tracking
6
Deze techniek wordt gebruikt om objecten terug te vinden op verschillende schalen. In een beeld kunnen 2 gelijke objecten een verschillende grootte hebben door perspectief. In plaats van bij iedere schaal een classifier te maken, kan men de grootte van het beeld wijzigen zodat deze voor de classifier past.
2.3.2
Segmentatie
Segmentatie is het identificeren van objecten in afbeeldingen. Het is ´e´en van de moeilijkste taken in beeldverwerking en zal vaak het succes of falen van een detectiealgoritme bepalen. Dit is dus een belangrijk deel in feature tracking. Binariseren Het resultaat van een binarisatie is een binaire afbeelding. Zoals de naam al laat blijken, heeft deze afbeelding 2 kleurwaardes nl. zwart en wit. Het binariseren zelf gebeurt via een threshold, is de kleurwaarde kleiner dan deze threshold dan wordt de kleurwaarde zwart. Is het groter dan de threshold, dan wordt de kleurwaarde wit. Vaak wordt dit gebruikt om het resultaat van een filter of bewerking duidelijker weer te geven.
Figuur 2.3: Een 8bit afbeelding(links) wordt gebinariseerd(rechts) met een threshold van 150.
Voorgrond segmentatie Deze techniek wil een achtergrond- en een voorgrond-beeld opleveren. Met het achtergrondbeeld wordt de statische scene bedoeld, met de voorgrond, de bewegende objecten in de
2.3 Feature tracking
7
scene. Het resultaat van de voorgrond segmentatie is een binaire afbeelding waarbij de bewegende voorgrond objecten wit gekleurd is. Er zijn veel verschillende methoden, eenvoudige zoals een verschilbeeld tot complexere zoals de sigma-delta methode[10]. Een goede en complete vergelijking van 27 verschillende algoritmes is te vinden op het internet[3]. Enkele methoden worden in figuur 2.5 getoond. Verschilbeeld: het verschil van vorig frame en huidig frame wordt genomen. Gemiddelde: het gemiddelde van alle frames wordt genomen en wordt afgetrokken van het huidige frame. Gewogen gemiddelde: hierbij wordt het gewogen gemiddelde van vorig en huidig frame genomen. Afhankelijk van hun gewicht zullen ze meer of minder doorwegen. Sigma delta: het verschil van 2 frames wordt genomen, het variantiemodel wordt bijgewerkt en aan de hand van dat model wordt beslist of een pixel behoort tot de voorgrond of achtergrond.
De originele afbeelding 2.4 toont een kruispunt waar 2 voetgangers oversteken en in de verte komt nog iemand. De eerste persoon die oversteekt is goed zichtbaar, rechts in het midden. De voetganger verder op is niet goed zichtbaar maar komt in de rechter bovenhoek. De laatste persoon steekt over in de linker boven hoek.
Figuur 2.4: Originele afbeelding om de voorgrond/achtergrond techniek op uit te testen.
2.3 Feature tracking
8
Figuur 2.5: Boven: verschilbeeld(links), gemiddelde(rechts). Onder: gewogen gemiddelde(links, sigma delta(rechts).
Randdetectie Naast randen, kan men ook punten en lijnen detecteren. Ze zijn allemaal gebaseerd op plotse lokale intensiteitsovergangen. Randen kunnen op 2 manieren worden gedetecteerd, door eerste of door tweede orde afgeleiden. De eerste orde afgeleide van een afbeelding is de gradi¨ent, deze kan de sterkte en richting op een locatie in de afbeelding tonen. De gradi¨ent is gedefinieerd als: " # " # ∂f gx ∂x grad(f ) ≡ = ∂f (2.1) gy ∂y Een gradi¨ent wordt gekenmerkt door zijn magnitude(M) en zijn ori¨entatie(α), ze worden als volgt gedefinieerd: q gy M (x, y) = gx2 + gy2 α(x, y) = arctan( ) (2.2) gx
2.3 Feature tracking
9
Figuur 2.6: Een uitvergroot beeld van een afbeelding. Ieder blokje stelt een pixel voorde grijze pixels hebben waarde 0 en de witte pixels hebben waarde 1. Presentatie van een gradi¨ent vector, merk op dat de rand loodrecht op de richting van de gradi¨ent staat.
Om de gradi¨ent te berekenen in een afbeelding, wordt een masker of gradi¨ent operator geconvolueerd over de afbeelding. Deze gradi¨ent operatoren leveren een benadering van de eigenlijke afgeleiden. Er bestaan verschillende operatoren2.7.
Figuur 2.7: Verschillende gradi¨ent operatoren.
Ten opzichte van andere detectoren is de Canny Edge detector wat complexer maar levert wel een veel beter resultaat. Eerst wordt een Gaussian smoothing filter toegepast, want de canny edge detector is gevoelig aan ruis. Dan wordt de Sobel operator toegepast, met het resultaat wordt ook de magnitude en randrichting berekend. De richting wordt nu in
2.3 Feature tracking
10
4 richtingen onderverdeeld nl. 0°, 45°, 90°en 135°. Ieder pixel dat geen rand kan zijn wordt onderdrukt, met andere woorden zijn pixel waarde wordt op 0 geplaatst. Indien er gaten in de randen zitten, worden deze opgevuld.
Figuur 2.8: Voorbeeld van een Canny Edge detectie.
Contourfinder Zoals de naam het al aangeeft zoeken we naar contouren van afbeeldingen. Iedere pixel wordt gezien als een contour, de contour-lengte van deze ongewenste pixels is zeer klein. Deze contouren kunnen gediscrimineerd worden op basis van hun lengte. Een andere methode is om vooraf een erosie op het beeld door te voeren, zo worden de alleenstaande pixels verwijderd. Figuur 2.9 geeft een voorbeeld van zo’n ongewenste pixels in de hoek rechts onderaan.
Figuur 2.9: Voorbeeld contourfinder in C++ via de OpenCV library.
2.3 Feature tracking
11
Template matching In plaats van de histogram van een object te zoeken in frames, zal men een kleinere afbeelding of template gaan zoeken. Deze template wordt over de frame bewogen en de best passende block van de frame wordt gekozen. Hoe goed de template en de block bij elkaar passen kan met verschillende matching methods. Via mean absolute error (MAE) waarbij men de gemiddelde fout tussen template en block berekend. Een andere matching method is mean square error(MSE), wat de gemiddelde fout is maar de fout wordt steeds gekwadrateerd. FAST corner detection FAST corner detection[13] maakt gebruik van 2 verschillende technieken van tracking, namelijk punt-gebaseerd en rand-gebaseerde tracking. Punt features hebben sterke karakteristieken die merkbaar zijn in de variatie van hun gradi¨ent. Ze kunnen in opeenvolgende frames snel terug worden gevonden. Wanneer men punt features volgt dan kunnen deze punten wegdrijven van zijn werkelijke plaats, dit is vooral merkbaar bij een grote verandering van de scene. De oplossing van dit wegdrijven wordt gevonden in de rand detectie. Deze zijn invariant onder verschillende soorten belichtingen en (scene-)veranderingen. Net omdat ze invariant zijn, kunnen ze moeilijk terug worden gevonden in opeenvolgende frames. Men gaat door middel van beide technieken kandidaat corners of keypoints selecteren. Die corners worden getoetst aan zijn omliggende pixels, zie figuur 2.10 Er wordt een cirkel met een radius van 3 pixels rond de kandidaat corner getrokken. Dit levert een cirkel van 16 pixels op. Als minimum 12 van de 16 pixels een grotere of een kleinere pixelwaarde heeft mits threshold, dan is de kandidaat corner respectievelijk een positieve of negatieve corner. Het minimum van 12 werd gekozen omdat dan een snelle test met 4 pixels op pixel 1,5,9 en 13, zie figuur 2.10 uitgevoerd kon worden. Minimum 3 van deze pixels moesten een grotere of kleinere pixelwaarde vertonen. De corner detector zelf heeft een goede performantie maar kent zijn zwakheden. Het werkt niet goed bij een minimum van minder dan 12 van de 16 pixels. De plaatsing van de test pixels (1,5,9 en 13) zorgen voor een veronderstelling van de intensiteitsdistributie. Sommige gedetecteerde corners zijn aangrenzend. In [14] wordt een betere uitvoering verkregen door machine learning op het algoritme toe te passen. Verschillende problemen worden hierdoor verholpen. Bij een test met 1500
2.3 Feature tracking
12
Figuur 2.10: Het vergelijken van de kandidaat corner aan de omliggende pixels[13].
monochromatische frames van 768x288, leverde FAST real-time resultaten van 9,25ms. Gecombineerd met machine learning werden de timing resultaten in het optimaal geval gehalveerd naar 4,31ms. De gebruikte hardware was een 850MHz Pentium III. SIFT / SURF Scale-invariant feature transform[15], de naam laat blijken dat het vinden van features niet afhankelijk is van de schaal. Daarnaast is het ook invariabel aan rotatie, belichting en het standpunt van de camera. Hiernaast zijn SIFT features goed bestand tegen ruis in een afbeelding. Het is gebaseerd op afgeleide benaderingen in een beeld piramide en is een robuuste manier om features te vinden. SIFT gebruikt 4x4 keypoint descriptors van 8 bins, dit leidt tot een 128 element vector. Een keypoint is het punt dat men wel volgen en de descriptor is de beschrijving van dat keypoint. De beschrijving gebeurt aan de hand van 4x4 1D histogrammen bekomen uit een 16x16 array van beeld gradi¨enten. SURF is nauw verwant aan SIFT maar gebruikt 2D Haar wavelet en integraal beeld in plaats van afgeleiden in een beeld piramide. Hierdoor levert SURF een sneller resultaat dan SIFT. ORB Een alternatief voor SIFT of SURF features kan ORB[16] zijn. Het is gebaseerd op de eerder vermelde FAST keypoint detector en de BRIEF descriptor, ORB is dan ook een afkorting voor ’Oriented FAST and Rotated Brief’. FAST is de manier om real-time corner detection te realiseren. De recente techniek BRIEF, gebruikt een binaire string als feature descriptor gebruikt. Het haalt zijn voordeel in de snelheid van het maken en
2.3 Feature tracking
13
vergelijken van descriptoren. ORB maakt gebruik van een variant van BRIEF zodat het ook kan werken met rotated features, oorspronkelijk kon dit niet. Uit testen blijkt dat ORB-features sneller dan de SIFT/SURF-features berekend kunnen worden. Er is echter 1 minpunt ten opzichte van SIFT of SURF, ORB is namelijk niet schaal invariant.
2.3.3
Tracking
Mean-shift Dit algoritme zoekt naar lokale pieken in afbeeldingen. Statistisch gezien is dit een robuuste methode, het zal met andere woorden geen rekening houden met omliggende uitschieters. Het principe van mean-shift is om 2 pixel histogrammen met elkaar te vergelijken, het histogram van het te volgen venster en het histogram van het zoek venster. Wanneer het algoritme een goede match heeft gevonden kan het massamiddelpunt van het zoekvenster worden bepaald en eventueel een bounding box rond worden getekend. CAM-shift Cam-shift is een afkorting voor ‘continuously adaptive mean’-shift. Deze techniek verschilt van mean-shift doordat de grootte van het zoek venster automatisch wordt gewijzigd. Om maar een voorbeeld te geven, als men een gezicht volgt dan wordt dat ook gevolgd bij het dichterbij komen of verder gaan van de camera. Figuur 2.11 toont hoe camshift werkt maar ook zijn problemen, soms wordt enkel de grootst gevonden blob gevolgd. Kalman filter De basis van de Kalman filter ligt in de statistiek en is een geavanceerdere manier om aan tracking te doen. De Kalman filter, filtert ruis uit een dataset om zo een zo goed mogelijke gok te doen. Stel we rijden met de auto en we gebruiken de GPS. Dan stelt het wegvallen van het GPS signaal de ruis voor. Bij het wegvallen van het signaal, kan de Kalman filter een statistische predictie maken waar de auto op het volgend tijdstip mogelijks kan rijden. Er wordt steeds een state vector bijgehouden die de huidige set data bijhoudt en actualiseert. Hiernaast wordt ook de predictie berekend, met beide waarden kan een correctie op de predictie worden gemaakt. Als er plots geen data beschikbaar is, wordt de predictiewaarde gebruikt.
2.3 Feature tracking
14
Figuur 2.11: Voorbeeld van CAM-shift in C# via de EmguCV library.
De Kalman filter is vrij populair. Dit komt omdat het goede resultaten levert en real-time kan worden gebruikt. Als er een basiskennis is van de Kalman filter, zou dit met weinig moeite moeten kunnen worden geprogrammeerd. Stixels Deze manier werd recent ge¨ ntroduceerd en werd voor stereovisie gemaakt. Oorspronkelijk wilde men een snellere manier om diepte informatie uit een stereovisie beeld halen[2]. Het gebruik van stixels werd verder onderzocht om een motion estimation te berekenen[9]. Stixels zou men kunnen vertalen als verticale stokken uit de grond, waarbij de stokken objecten voorstellen.
2.3 Feature tracking
15
Figuur 2.12: Stixel motion estimation pipeline[2].
Men vertrekt van de veronderstelling dat de meeste objecten verticaal zijn, met een beperkte hoogte van 0.5 - 3m. Het grondvlak wordt berekend, alles boven dit grondvlak wordt als object gezien. De stixels worden berekend, naburige stixels kunnen aan eenzelfde object toebehoren of aan iets anders. Als naburige stixels aan eenzelfde object toebehoren, zullen zij een gelijkaardige beweging en diepte hebben. In figuur 2.12, bij het vergelijken van de stixels en de geannoteerde objecten zien we toch dat ze gelijkaardig zijn. Optical flow Optical flow gaat de beweging tussen 2 of meerdere frames gaan berekenen. Er zijn trackbare punten nodig om een beweging te kunnen detecteren, deze punten worden gevonden door feature detectoren. Ook de optische flow tussen 2 blokken kan berekend worden. Via optical flow kan een object van een frame terug worden gevonden in een ander frame, met zijn richting van verplaatsing. Er zijn 2 manieren om de optical flow te berekenen, dense optical flow en sparse optical flow. Dense optical flow zal zelf interessante punten in de opeenvolgende frames vinden. Sparse optical flow gaat er van uit dat er reeds een set punten aanwezig is om te tracken.
2.4 Object herkenning
2.4 2.4.1
16
Object herkenning Viola Jones
Oorspronkelijk was deze methode ontwikkeld als real-time gezichtsherkenningsalgoritme. Viola Jones kan aan de hand van 3 eigenschappen, kenmerkend aan het algoritme, snelle detecties leveren[11].
Figuur 2.13: A en B zijn 2-rechthoeksfeatures, C is een 3-rechthoeksfeature en D een 4rechthoeksfeature.
Een eerste eigenschap is het gebruik van eenvoudige features (figuur 2.13). Er zijn nog veel andere mogelijke features maar Viola Jones gebruikt enkel deze 3 eenvoudige soorten. Deze features hebben geen vaste vorm of ori¨entatie. Ze hebben dus een variabele breedte en hoogte maar blijven wel symmetrisch. De bewerking die wordt uitgevoerd is eenvoudig. Alle pixelwaarden binnen het zwarte oppervlak worden afgetrokken van de waarden binnen het witte oppervlak. De features kunnen snel worden berekend door middel van het integraal beeld. Een integraal beeld is de som van alle pixels in een gebied, bijvoorbeeld het integraal beeld van punt A in figuur 2.14 is: ii(x, y) =
X
i(x0 , y 0 )
(2.3)
x0 ≤ x y0 ≤ y
Hierbij is ii(x,y) het integraal beeld van punt A en i(x’,y’) de originele afbeelding. Om het integraal beeld van rechthoek ABCD te vinden, worden eerst het integraal beeld van alle punten (A, B, C en D) berekend. Rechthoek ABCD is dan C - B - D + A, A wordt hier nog
2.4 Object herkenning
17
Figuur 2.14: Integraal beeld.
bij opgeteld omdat dit gebied 2 maal werd afgetrokken door B en D. Dit integraal beeld kan nu worden gebruikt om een (wit of zwart) oppervlak van een feature te berekenen. Een tweede eigenschap van Viola Jones is het gebruik van AdaBoost. Dit wordt gebruikt om de features te selecteren en de classifier te trainen. Een classifier bepaalt wat een positief of negatief resultaat is. AdaBoost is een iteratief leeralgoritme. Per stap wordt de beste zwakke classifier berekend. Na het bepalen van de zwakke classifiers krijgen de fout geklasseerde samples een zwaarder gewicht. Die samples zullen bij de volgende stap meer doorwegen bij de berekening van de zwakke classifier. Het resultaat is de som van elke zwakke classifier. Mathematisch wordt een zwakke classifier gedefinieerd als: ( 1 if pf (x) < pθ h(x, f, p, θ) = (2.4) 0 otherwise Hierbij is x het detectiewindow. Dit is een sub-window van de afbeelding dat men wil onderzoeken, voorbeeld een 24x24 pixel sub-window. p is de polariteit, f is de feature en θ is de threshold, dat zorgt ervoor dat steeds de beste zwakke classifier wordt gekozen. Dit hele proces om tot de sterke classifier te komen, is stap voor stap te zien in figuur 2.15. De positieve samples of sub-windows, worden weergegeven door een ’+’ en negatieve door een ’-’. Alle samples in het blauwe gebied worden als positief gerekend, in het rode gebied als negatieve. h representeert een zwakke classifier en H de sterke classifier. Gegeven een set positieve en negatieve samples kan men ´e´en feature selecteren die de samples zo goed mogelijk scheiden. Als de grootte van het detectievenster 24x24 is, dan is er een keuze van
2.4 Object herkenning
18
Figuur 2.15: Stappenplan naar een sterke classifier, genomen van Y. Freund.
meer dan 160000 mogelijke features, Bijgevolg is dat een rekenintensief process. Maar het resultaat van de AdaBoost is een kleine ´en effectieve set van features. Een derde en laatste kenmerk van Viola Jones is het gebruik van verschillende sterke classifiers in cascade te plaatsen. Dit wordt de ’attentional cascade’ genoemd, waarbij iedere classifier getraind werd door de eerder vermelde AdaBoost. Een eenvoudige voorstelling van deze cascade zie je in figuur 2.16, hierbij stelt ieder cijfer een sterke classifier voor. Ieder sub-window of detectiewindow start bij de eerste en ook de meest eenvoudige classifier. Bij deze wordt snel een eerste grove selectie gemaakt van het te detecteren object. Is het resultaat van de eerste classifier, false (F) dan wordt deze geweigerd als object. Is het resultaat true (T), dan gaat het sub-window door naar de volgende classifier. Hoe verder men zit in de ketting van classifiers, hoe complexer deze zijn. De attentional cascade van Viola Jones zelf is opgebouwd als volgt: een 1ste classifier met 2 features, de 2e uit 10 features, de volgende uit 25,. . . Hoe complexer de classifiers, hoe rekenintensiever. Het is dus een voordeel van meerdere classifiers in cascade te gebruiken. Als men enkel de laatste en dus meest complexe classifier zou gebruiken voor alle sub-windows, dan zou dat erg lang duren. Indien men eerst een groot deel van de windows weigert door middel van een snelle selectie gevolgd door die complexe classifier, dan heb je al een grote snelheidswinst. Het trainen van hun detector gebeurde met een dataset van 5000 frontale gezichten die willekeurig van het internet werden gehaald. De gezichten zijn dus van verschillende personen, met verschillende belichting, maar de gezichten zijn relatief rechtop. Er zijn dus geen andere poses, Viola Jones kan enkel ´e´en pose detecteren per detector. Alle gezichten zijn verschaalt tot een window van 24x24 pixels. De negatieve samples zijn een dataset
2.4 Object herkenning
19
Figuur 2.16: Attentional cascade.
van ongeveer 350 miljoen sub-windows, die afkomstig zijn van 9500 afbeeldingen zonder gezichten. Het resultaat van alles is een real time detector van 15 FPS bij een resolutie van 384x288 pixels, de gebruikte hardware was een Intel Pentium III.
2.4 Object herkenning
2.4.2
20
Histogram of Oriented Gradients
Dit is een van de meer recentere object herkenningstechnieken en begint een opmars te maken in het domein van objectherkenning. De techniek is gebaseerd op randdetectie door middel van het intensiteits gradientbeeld. Het werd als personendetector op punt gesteld door Dalal et al[5][6].
Figuur 2.17: Stappenplan HOG algoritme[5].
Eerst wordt een input afbeelding genomen ter grootte van het detectiewindow. Vervolgens wordt een gamma- en kleurnormalisatie op uitgevoerd. Dit zorgt ervoor dat de be¨ınvloeding van licht en schaduwen wordt gereduceerd. Hierop volgt een essentieel deel van het geheel algoritme, de berekening van de gradi¨enten. Het beste resultaat werd verkregen met een 1D masker [-1, 0, 1] en [-1, 0, 1]T . De verkregen gradi¨ent wordt spatiaal opgesplitst in cellen. Bij iedere cel wordt een 1D ori¨entatie histogram berekend van alle gradi¨enten binnenin die cel. Hoe sterk ieder gradi¨ent
2.4 Object herkenning
21
wordt meegerekend is afhankelijk van zijn magnitude. De gradi¨enten werden in ongetekende histogrammen onderverdeeld. Deze hebben 9 categorie¨en of bins binnen een bereik van 0°tot 180°. De thesis van Dalal[5] beperkt zich enkel tot deze contrast-ongevoelige features. Vervolgens wordt iedere cel genormaliseerd. Er wordt steeds een blok van 4 omliggende cellen genomen. De waarden van de cellen worden opgeteld en met dit resultaat wordt iedere cel genormaliseerd. De blokken overlappen elkaar, sommige cellen worden dus meermaals genormaliseerd. Het resultaat van de normalisatie is de histogram of oriented gradi¨ents. Als laatste worden alle HOGs verzameld tot 1 gecombineerde feature vector. Deze vector wordt naar een lineaire SVM gestuurd om een classificatie te maken van gedetecteerd en niet-gedetecteerd object. Het resultaat van de detector is een algemene object classifier dat het model wordt genoemd (figuur 2.18). Voor personen detectie is de sensitiviteit 90% bij 10−4 vals positieven per window.
Figuur 2.18: resulterend voetgangermodel: Links: Root-filter (HOG-features). Midden: Partfilter. Rechts: Vervormingskosten. Hoe verder een stuk van zijn verwachte plaats staat, hoe lager zijn score wordt.
2.4.3
Fastest pedestrian detector in the west
Deze detector levert detecties aan een snelheid dat bijna real time is. Het is een hybride model (figuur 2.19: C) dat gebruik maakt van 2 technieken namelijk beeld piramides (figuur 2.19: A) en scale invariant features (figuur 2.19: B). Detectoren die gebruik maken van beeldpiramides gaan de originele afbeelding meermaals schalen om daar het model steeds op toe te passen. Men gebruikt een uitgebreide beeld piramide omdat het model een vaste grootte heeft. Te detecteren objecten met een andere grootte worden zo gevonden
2.4 Object herkenning
22
door het model gevonden. Een voorbeeld van deze vindt men in de detector op basis van histogram of oriented gradients. Detectoren met scale invariant features zullen het model aanpassen aan het object dat gedetecteerd moet zijn. De Viola Jones detector werkt met deze techniek, de features kenmerkend aan het object worden gekozen. Het hybride model past beide technieken toe maar in beperkte mate, er wordt een beperkte beeld piramide gemaakt. Uit ieder geschaald beeld van de piramide wordt een model aan de hand van scale invariant features gemaakt.
Figuur 2.19: [7] detectie aan de hand van: A: Beeld piramides B: Scale invariant features C: een hybride model van zowel Beeld piramides als scale invariant features
Doordat er een kleiner aantal beeld piramides aangemaakt hoeven te worden, wordt de verwerkingssnelheid van het algoritme gereduceerd. Het gebruik van de scale invariant features zorgt voor wat problemen, er worden namelijk gradi¨ent histogrammen gebruikt. De onderzoekers van het algoritme tonen aan dat gradi¨ent histogrammen, die in essentie niet scale invarient zijn, toch door een scale-invariant feature gebruikt kunnen worden. Men kan de gradi¨ent histogrammen van de geschaalde beelden gebruiken om het originele histogram te benaderen mits een kleine foutmarge. De detector is een variant van de channel features detector[8] dat op zich een generalisatie van het Viola Jones algoritme is. In plaats van het integraal beeld te gebruiken, worden er meerdere kanalen gebruikt. Meer bepaald gradi¨ent magnitude, genormaliseerde histogram en LUV kleurkanalen. Deze detector leverde al goede resultaten maar met de omvorming tot het hybride model is de snelheid grofweg 5-10 maal sneller. Naast de snelheid levert de detector goede en accurate detectie.
2.5 Infrarood versus zichtbaar licht
2.5
23
Infrarood versus zichtbaar licht
Infrarood licht verschilt van zichtbaar licht door zijn langere golflengte. Infrarood licht heeft een golflengte binnen 750nm tot 1mm, terwijl zichtbaar licht tussen 390nm en 750nm ligt. Het frequentie spectrum van de zon bestaat na absorbatie door de atmosfeer uit 53% infrarood licht, 44% zichtbaar licht en 3% UV licht. Een volledig beeld van het frequentiespectrum is in figuur 2.20 te zien.
Figuur 2.20: Volledig frequentiespectrum.
Door middel van een infrarood camera wordt de uitgestraalde warmte van objecten zichtbaar gemaakt. Zijn karakteristieken worden in enkele werkstukken[17][18][19] goed omschreven. Het nemen van thermografische beelden wordt niet be¨ınvloed door zichtbaar licht, dit is een van de belangrijkste en ook bekendste kenmerk. Een scene met weinig omgevingslicht vormt een probleem voor een normale zichtbaar licht camera. Indien er toch genoeg licht is, kan de schaduwvorming een probleem vormen bij detectie. Een ir-camera kan gedurende de hele dag en nacht worden ingezet, met weinig last van schaduwvorming. Een algemeen
2.5 Infrarood versus zichtbaar licht
24
voorbeeld van een ir-beeld is te zien in figuur 2.21.Op deze figuur zijn verschillende zaken merkbaar, de personen hebben geen schaduwen. De schaduw van de boom is wel zichtbaar omdat de grond afkoelt omdat het gedurende een lange tijd aan deze schaduw wordt blootgesteld. Er zijn 6 personen duidelijk in beeld, de 2 dichtste personen zijn bleker dan de 3 personen die aan het oversteken zijn. Dat komt omdat het verschil tussen de temperatuur groter is in de schaduw dan op de straat, daardoor is het contrast groter. Na de 3 overstekende personen is de laatste persoon, deze is niet goed zichtbaar. De temperatuur van de persoon en het voetpad is quasi gelijk waardoor de persoon niet goed zichtbaar is.
Figuur 2.21: Infrarood beeld gemaakt met een ir-camera met een bereik tussen 7,5µm en 13,5µm.
Een lichtsverandering is sneller merkbaar dan een temperatuurswijziging. Bij een plotse daling van de temperatuur, koelen de materialen gelijdelijk aan af, afhankelijk van hun inertie. Als een wolk voor de zon komt, is de schaduw meteen zichtbaar. Dit is een
2.5 Infrarood versus zichtbaar licht
25
voordeel bij het gebruik van de voorgrond/achtergrond methode. Deze methode levert het beste resultaat als de achtergrond zo weinig mogelijk verandert. Indien de lichtbron wordt belemmerd, zoals een wolk voor de zon, dan is een normale camera gedurende een bepaalde tijd gevoeliger om fouten te maken. Over het algemeen heeft een ir-camera minder invloed van weersomstandigheden zoals lichte regen of mist, reflecties van de zon worden niet geregistreerd en men kan door rook kijken. Thermografische beelden kan men net als beelden in het visueel spectrum weergeven naar eigen wens. Volgens een kleurpalet zoals in figuur 2.22 of met grijswaarden zoals de andere infrarood figuren. Hier verkiest men om de beelden als grijswaarden weer te geven om de beeldverwerking eenvoudig te houden. Koude objecten worden met een donkere kleur weergegeven, warme objecten met een witte kleur. Door de afwezigheid van kleuren is de interpretatie van objecten eenvoudiger, aan de hand van de vormen kan men een onderscheid maken tussen personen, auto’s, honden,. . . Met andere woorden er is minder detail zichtbaar, je ziet wel dat er een persoon in een beeld staat maar wie het is, is niet merkbaar.
Figuur 2.22: Kleuren infraroodbeeld, rood/wit is warm, zwart/blauw is koud.
Tot hier werden enkel de voordelen van de infrarood licht besproken, er zijn echter ook nadelen. Er werd al vermeld dat een ir-camera gedurende een hele dag kan worden ingezet. Dit klopt maar er zijn enkele scenario’s waardoor objecten moeilijk kunnen worden onderscheiden. Zoals tijdens een warme zomerdag, met als gevolg dat het asfalt opwarmt. Als de temperatuur van het asfalt rond de lichaamstemperatuur zit, worden personen moeilijk zichtbaar gemaakt. In het andere geval, een koude winterdag. Iedereen doet dikke kleren aan, dit zorgt ervoor dat enkel de onbedekte lichaamsdelen, vaak handen en het hoofd, zichtbaar worden. In figuur 2.23 zijn verschillende ir-beelden in verschillende situaties. De soort materie en kleur hebben ook invloed op de uitgestraalde warmte. Niet iedere
2.5 Infrarood versus zichtbaar licht
26
Figuur 2.23: Eerste van links: zonlicht tegen een muur, tweede van links: koude winterdag. Voorlaatste: zware bewolking, laatste: nacht.
materie neemt even snel warmte op, metaal neemt vlugger warmte op dan hout. Hetzelfde geldt voor kleur, zwart warmt sneller op dan wit. Door de huidige technologie van ir-camera’s, hebben ze vaak een lage resolutie. Wat resulteert in een minder gedetailleerd beeld.
2.5.1
Digital detail enhancement
Digital detail enhancement of DDE[20] is een algoritme gebruikt door het bedrijf FLIR om een beter contrast te verkrijgen. Bij histogram equalisatie wordt het contrast de dominante kleur of bij infrarood beelden de dominante temperatuur verdeeld. Bij DDE echter, worden alle temperaturen gelijk verbeterd. De kans om zo objecten met laag contrast te detecteren wordt op deze verhoogd. Dit is dan ook een mogelijke oplossing op het probleem dat figuur 2.21 aantoont. Namelijk een persoon dat in de achtergrond verdwijnt omdat hij quasi dezelfde temperatuur heeft. Figuur 2.24 geeft een voorbeeld van hoe DDE kruisen met laag contrast zichtbaar maakt.
Figuur 2.24: Voorbeeld van DDE, links is het originele beeld, rechts met DDE toegepast. [20]
2.5 Infrarood versus zichtbaar licht
2.5.2
27
FC690
Het beeldmateriaal dat ter beschikking wordt gesteld, werd met de thermografische camera FLIR FC690[21] gemaakt. Zoals eerder vermeld ligt het domein van infrarood tussen 750nm en 1mm. Dit kan worden opgesplitst in 3 categorie¨en. Near Infrared (NIR) ligt tussen 750nm tot 3µm , Mid Infrared (MIR) tussen 3µm en 50µm en Far Infrared (FAR) tussen 50µm en 1mm. De datasheet vermeld het spectrum dat de camera kan detecteren, dit ligt in MIR tussen 7,5µm en 13,5µm . Dit spectrum wordt aangegeven op figuur 2.20 door een rood gebied. Deze camera heeft een resolutie van 640x480 en maakt gebruik van het eerder vermelde DDE algoritme, er zal dus een zeker detail zichtbaar zijn.
2.6 Statistiek
2.6 2.6.1
28
Statistiek Confusion matrix
Naast confusion matrix zijn er nog andere termen zoals matching matrix, contingency table of error matrix. Via deze matrix kan men de performantie van een algoritme visualiseren. Een voorbeeld van een dergelijk confusion matrix wordt in tabel 2.1 getoond. Het voorbeeld gaat over een video waar in totaal 20 voetgangers op te zien zijn.
Werkelijk
Voetganger Geen voetganger
Detectie Geen detectie 16 4 5 0
Tabel 2.1: Voorbeeld van een confusion matrix
Deze confusion matrix vertelt ons hoe goed een detector werkt. Het horizontaal optellen van iedere waarde in een rij, komt neer op het werkelijke aantal van dat type. Idem voor verticaal optellen maar dan voor het gedetecteerde aantal. De detectie levert 16 voetgangers en 5 voetgangers die eigenlijk geen voetgangers zijn. De beschrijving van de resultaten gebeurd aan de hand van volgende termen: True positive: voetgangers die echt voetgangers zijn, dus een correcte detectie. True negative: als er geen detectie gebeurt wanneer er geen voetganger is, is dit correct. False positive: detectie van voetgangers die geen voetgangers zijn. False negative: als een voetganger in beeld kwam werd deze niet gedetecteerd.
In dit geval leren we dat er 16 true positives, 0 true negatives, 5 false positive en 4 false negatives zijn.
2.6.2
Sensitivity
De sensitiviteit van een detector geeft weer hoe goed een detector positieve resultaten kan identificeren. Hoe goed men negatieve resultaten kan identificeren heet specificiteit
2.6 Statistiek
29
of specificity. Specificity wordt hier niet behandeld omdat de negatieve resultaten van detectoren namelijk geen detectie zijn, dit kan dus niet worden geteld. sensitiviteit =
TP TP + FN
(2.5)
Passen we dit toe op het voorbeeld uit tabel 2.1, dan bekomen we een sensitiviteit van 80%. Dit vertelt ons de kans indien er een detectie is dat het gedetecteerde object werkelijk een voetganger is.
2.6.3
Accuracy
De accuraatheid van een detector is het percentage dat de detector een situatie correct kan identificeren. Deze waarde kan een vertekend beeld opleveren, als een element in de teller de overmacht heeft dan is het resultaat toch een hoge accuraatheid. Accuraatheid =
2.6.4
TP + TN TP + FP + TN + FN
(2.6)
Precision
Het deel van de positieve resultaten dat correct is, wordt de precisie genoemd. Dit resultaat kijkt enkel naar de detecties van de detector, dus niet naar de detectie die zouden moeten gebeuren zoals bij de sensitiviteit. P recisie =
TP TP + FP
(2.7)
ONTWERP
30
Hoofdstuk 3 Ontwerp Eerst wordt een beschrijving gegeven van het geheel ontwerp. Dit omschrijft alles wat nodig is voor het tweede deel van deze thesis. Het volgende onderdeel behandelt het ontwerp van het detectie algoritme en het laatste onderdeel omschrijft hoe het algoritme wordt getest.
3.1
Algemeen schema
Figuur 3.1: Algemeen schema van het algoritme.
Het algemeen schema in figuur 3.1 moet een beeld geven hoe het tweede deel van deze thesis wordt aangepakt. FLIR heeft zelf beeldmateriaal ter beschikking. Hieruit worden de voetgangers gedetecteerd door het te ontwikkelen algoritme. Ook worden deze beelden geannoteerd. Dit is een beschrijving van de werkelijke voetgangers die in de beelden voorkomen. De resultaten van zowel het detectie algoritme als de annotatie worden in een log bestand geplaatst. Beide logs moeten vervolgens aan elkaar worden getoetst tijdens het testen. Uit de testresultaten worden er statistieken gevormd waaruit de werking van de detector wordt getoond.
3.2 Algoritme
31
FLIR heeft ook de log bestanden van de geannoteerde beelden ter beschikking. Hierdoor ligt de focus op het detectie algoritme en het test framework.
3.2 3.2.1
Algoritme Preprocessing
Figuur 3.2: Schema van preprocessing.
De beelden moeten eerst een reeks bewerkingen ondergaan (figuur 3.2) vooraleer er effectief gedetecteerd kan worden. Als eerste wordt een voorgrond segmentatie algoritme uitgevoerd. Hieruit kan worden afgeleid dat enkel bewegende voetgangers zullen worden gedetecteerd. Om de ruis van het resulterend voorgrondbeeld te elimineren wordt een opening bewerking uitgevoerd. Ongewenste factoren zoals reflecties of bewegende bomen kunnen hier niet mee worden verholpen. Het voorgrondbeeld bevat nu blobs. Deze blobs representeren de bewegende objecten in een beeld. De bewegende objecten kunnen door een groep blobs worden gerepresenteerd. Daarom worden deze onsamenhangende blobs bijeengevoegd in de blob creatie stap. Als laatste moeten de blobs aan enkele voorwaarden voldoen vooraleer ze gevisualiseerd worden. De blobs mogen niet te groot of te klein zijn en mogen niet op de rand van het beeld gelegen zijn. Randobjecten zijn niet volledig zichtbaar en kunnen incorrecte detecties veroorzaken.
3.2.2
Detectie
Om voetgangers te kunnen herkennen worden 2 algoritmes gekozen. Een eerste gebeurt volgens de karakteristieken van personen en een tweede via objectherkenning. Menselijke karakteristieken In het beschikbare beeldmateriaal zijn personen moeilijk te onderscheiden door het lage contrastverschil. De belangrijkste eigenschap om mensen te detecteren is hun vorm. Een
3.2 Algoritme
32
voertuig is altijd groter in de breedte dan in zijn hoogte, terwijl een persoon altijd groter is in de hoogte dan zijn breedte.
Figuur 3.3: Demonstratief voorbeeld. Links: bovenaanzicht. Midden: meerdere personen. Rechts: verwachte pose.
Bij het detecteren op vorm moet er rekening worden gehouden met enkele zaken (figuur 3.3). Een eerste is de kijkhoek. Als een persoon dicht bij de camera wandelt, wordt er meer een bovenaanzicht van de persoon genomen. Daardoor lijkt de hoogte kleiner te zijn. Een tweede is, als meerdere personen dicht bij elkaar wandelen. Dit zou als 1 persoon worden gedetecteerd omdat de breedte meteen wordt verdubbeld. In beide gevallen wordt de menselijke hoogte-breedte ratio sterk afgezwakt. Object herkenning In de literatuur werden 3 algoritmes over object herkenning onderzocht. Histogram of oriented Gradients[5] Detector van Dollar et al[7] Viola Jones[11]
Histogram of oriented gradients[5] heeft een relatief groot detectievenster en levert geen real-time resultaten. De detector van Dollar et al[7] levert real-time resultaten en heeft een kleiner detectievenster dan HOG. Het is deels gebaseerd op Viola Jones. De keuze ging naar het algoritme van Viola Jones[11]. Deze heeft het kleinste detectievenster. Dit is belangrijk om met het perspectief rekening te houden. Er is al meer onderzoek gedaan met
3.3 Testen
33
het algoritme van Viola Jones, waardoor er meer middelen zoals modellen ter beschikking zijn. Een model kan maar 1 houding detecteren, maar er kunnen meerdere modellen gebruikt worden. De detectie van voetgangers wordt met het personenmodel uitgevoerd dat beschikbaar is gesteld door OpenCV. Het mogelijke probleem bij die classifier zou kunnen zijn, dat het model enkel werkt voor kleurenbeelden. Specifiek voor infrarood beelden is er geen model beschikbaar. Om zo een model te maken is er veel data nodig. Hiervoor is er binnen dit onderzoek geen tijd voorzien.
3.2.3
Tracking
Het tracking algoritme is een basis algoritme, dat een gedetecteerd object zal volgen doorheen de frames. Als dit object ongewenst uit het beeld verdwijnt, zal er geen schatting volgen waar het object zich toch zou kunnen bevinden. Het algoritme moet een bounding box kunnen identificeren en volgen. Als de bounding box in dezelfde omgeving voorkomt als in de vorige beelden, dan zal dit waarschijnlijk dezelfde bounding box zijn. Als een bounding box een bepaalde tijd uit beeld is, dan wordt het volgen afgebroken.
3.3
Testen
Het testen moet ervoor zorgen dat een correct en objectief beeld wordt gevormd van de detector. Iedere detectie wordt gekenmerkt door een rechthoek, een bounding box genaamd, met een x-en y-co¨ordinaat en een breedte en een hoogte. De detecties die plaatsvinden worden in log bestanden geschreven. Dit voor zowel het detectie algoritme als de annotatie. Om te kunnen testen, worden deze log bestanden ingelezen en worden de rechthoeken per frame in een lijst geplaatst. Beeld per beeld worden de detecties uit beide lijsten aan elkaar getoetst en kunnen de detecties worden geclassificeerd als true positive, false positive en false negative. Als er gedurende een bepaalde tijd geen detecties plaatsvinden voor zowel de annotatie als voor de detector, dan is dit per beeld een true negative.
IMPLEMENTATIE
34
Hoofdstuk 4 Implementatie 4.1
Algoritme
Het detectie algoritme is opgebouwd uit 3 delen. In de preprocessing worden eerst een reeks voorbewerkingen op de beelden uitgevoerd. Dan pas kan er worden gedetecteerd. In het laatste deel wordt de tracking van de detecties besproken.
4.1.1
Preprocessing
Voorgrond segmentatie Voorafgaand wordt een Gaussiaansse smoothing filter op de beelden toegepast. Dit verwijdert mogelijke ruis die op de beelden zouden voorkomen. In totaal worden 3 voorgrond algoritmes vergeleken: Sigma delta[10]: werkt met variantiemodel. Zivkovic[22]: Adaptive GMM. Stauffer en Grimson[23]: Adaptive GMM.
In de literatuur werd het sigma-delta algoritme al behandeld. De 2 overige algoritmes werden uit een vergelijkende studie[3] gekozen. De algoritmes hebben niet de beste resultaten, maar worden wel openlijk beschikbaar gesteld. Het algoritme van Stauffer en Grimson is een Gaussian Mixture Model (GMM). Concreet wil dit zeggen dat er meerdere Gaussiaanse
4.1 Algoritme
35
functies worden gebruikt om de achtergrond te bepalen. Het algoritme van Zivkovic is ook een toepassing op dit Gaussian Mixture Model maar zou 20% sneller werken. Een korte vergelijking van deze verschillende voorgrond segmentatie algoritmes is te zien in figuur 4.1.
Figuur 4.1: Per rij is er 1 sc`ene, per kolom is een ander algoritme. Links is het origineel, gevolgd door sigma-delta[10], daarnaast Grimson[23], als laatste Zivkovic[22]
In de eerste sc`ene is de initialisatie van zowel Zivkovic als Stauffer en Grimson bezig. Hierdoor zijn de voertuigen uit de eerste frames zichtbaar in het voorgrondbeeld. Deze voertuigen verdwijnen nadat de initialisatie gedaan is zoals in de tweede sc`ene te zien is. Bij het vergelijken van de algoritmes geeft het sigma delta algoritme het minst de voorgrond terug en levert dus de minste resultaten. Deze stelling wordt gestaafd in het hoofdstuk resultaten. Zelfs met een voorgaande ruisfiltering levert het algoritme van Stauffer en Grimson nog steeds ruis. Als de ruisfiltering sterker wordt toegepast, worden de objecten ook sterker met de achtergrond gemengd. Dit heeft als gevolg dat de objecten minder goed als voorgrond worden geclassificeerd. Zivkovic werkt na het sigma delta algoritme het snelst en levert geen merkbare ruis. De keuze gaat dus naar het algoritme van Zivkovic. Blob creatie en voorwaarden Na de voorgrond segmentatie volgt een opening bewerking om eventuele ruis verder te verwijderen. Ruis kan namelijk valse detecties leveren.
4.1 Algoritme
36
Figuur 4.2: Het origineel(links), onsamenhangende blob door voorgrond segmentatie(midden), terug gegroepeerd met functie(rechts)
Het resultaat van een voorgrond segmentatie is vaak een onsamenhangende blob (figuur 4.2). Het terug groeperen van deze onsamenhangende blobs kunnen valse detecties vermijden. In het boek van Bradski[4] staat een functie beschreven waarin deze functionaliteit wordt toegepast. De onsamenhangende blobs worden door middel van een polygoon samengevoegd tot 1 object. Deze polygoon benadert de vorm van het originele object. De mogelijkheid bestaat om de blobs samen te voegen tot convexe objecten. Zo gaan veel karakteristieken verloren. Een persoon is bijgevolg niet meer herkenbaar. De belangrijkste stappen van de functie wordt in codefragment 4.1 beschreven. De voorwaarden die aan de blobs worden gesteld, zijn ook in die functie(codefragment 4.1) verwerkt. Deze voorwaarden worden aan de hand van parameters aan de functie doorgegeven. De 3 parameters zijn: Minimumgrens: een waarde tussen 0 en 1. Maximumgrens: een waarde tussen 0 en 1. Randgrens: de pixelwaarde tussen de beeldrand en de randgrens.
2 grenswaarden worden meegegeven om te zorgen dat een object niet te groot of te klein is. De grenswaarden liggen tussen 0 en 1. Ze worden gebruikt om een percentage van de omtrek van het beeld te nemen. Een object mag dan niet groter of kleiner zijn dan het percentage van de beeldomtrek. Voor het beeldmateriaal ligt de minimumgrens rond 3-4% en de maximumgrens rond 25-30%. De derde parameter beschrijft een grens die een aantal pixels van de beeldrand is verwijderd. Als objecten voorbij deze grens komen, worden ze verwijderd. Voertuigen in de verte zijn vaak nog zichtbaar in het voorgrondbeeld, deze voertuigen komen vaak voor bij de rand. Daarom wordt de laatste parameter niet op 0 pixels maar op 3 pixels ingesteld.
4.1 Algoritme
37
Codefragment 4.1: Het samenvoegen van blobs en het verwijderen van onnodige objecten.
// Bereken de g r e n z e n van he t o b j e c t CvRect bound = cvBoundingRect ( c , 0 ) ; i n t l e f t , r i g h t , top , bottom ; l e f t = bound . x ; r i g h t = bound . x + bound . width ; top = bound . y ; bottom = bound . y + bound . h e i g h t ; CvSize s i z e = c v G e t S i z e ( mask ) ; // minScale & maxScale z i j n de g r e n z e n // Bereken de omtrek l e n : double l e n = cvContourPerimeter ( c ) ; double min = ( mask−>h e i g h t + mask−>width ) * minScale ; double max = ( mask−>h e i g h t + mask−>width ) * maxScale ; // V e r w i j d e r de blob a l s t e k l e i n // b i j de rand l i g t : i f ( l e n < min | | l e n > max | | l e f t < edge | | r i g h t > | | top < edge | | bottom > { c v S u b s t i t u t e C o n t o u r ( scanner , }
of te groot i s of
s i z e . width − edge s i z e . h e i g h t − edge ) NULL ) ;
Motion History Image Deze techniek zorgt dat vorige beelden ook nog in rekening worden gebracht. Voor ieder nieuw beeld, wordt het vorig motion history image afgezwakt en wordt het nieuw beeld daarbij opgeteld. Bij een laag contrastverschil tussen voor-en achtergrond kan een object even in de achtergrond verdwijnen. Daar is weinig aan te doen, maar door het motion history image is de locatie van het object in de vorige beelden terug zichtbaar. Als het object maar even verdwijnt, maakt deze techniek het mogelijk om het object toch nog te kunnen detecteren.
4.1 Algoritme
38
Figuur 4.3: Het origineel(links), voorgrond segmentatie(midden), voorgrond samen met mhi(rechts).
Door deze techniek toe te passen, krijgen voertuigen een bredere basis omdat deze sneller bewegen dan personen. Hierdoor is er een extra voordeel dat voertuigen beter weg kunnen worden gefilterd. De classificatie van voetgangers kan daardoor eenvoudiger gebeuren. Door het toevoegen van deze stap, wordt de preprocessing iets gewijzigd (figuur 4.4).
Figuur 4.4: Extra stap in preprocessing.
Er werd geprobeerd om de richting van objecten te bepalen, maar dit mislukte. Het zou kunnen worden toegepast als controle tijdens het volgen van een detectie. De richting zou ook worden gevolgd. Als deze 180°zou wijzigen dan is dat object waarschijnlijk geen voetganger.
4.1.2
Detectie algoritme
Menselijke eigenschappen Een belangrijke menselijke eigenschap is zijn hoogte-breedte verhouding. Een infrarood beeld is in principe een grijswaarde beeld. Er is veel minder variabiliteit in intensiteit en kleur. Daarom is de kans dat de voorgrond een gelijkaardige kleur heeft als de achtergrond is groter. De voorgrond segmentatie vindt bijgevolg niet altijd de bewegende objecten. Dit wordt deels omzeild door het motion history image toe te voegen.
4.1 Algoritme
39
Het perspectief wordt in rekening gebracht door middel van de locatie van de detecties te gebruiken. Het perspectief wordt als een percentage voorgesteld. 0% is ver in de sc`ene en 100% is dicht bij de camera. Dit percentage wordt berekend door de y-waarde van een detectie te delen door de hoogte van een beeld (codefragment 4.2) en het percentage wordt tevens met 2 modellen vermenigvuldigd. Deze modellen vormen de grenzen voor de grootte van een normaal persoon. Door de vermenigvuldiging wordt de grootte van het model aangepast aan het perspectief. Enkel als een blob tussen deze grenzen ligt, rekening houdend met het perspectief, kan de blob een voetganger zijn. Codefragment 4.2: Gebruik van perspectief.
f o r ( CvSeq * i = f i r s t c o n t o u r ; i != 0 ; i = i −>h n e x t ){ CvRect bound = cvBoundingRect ( i , 0 ) ; // hoogte ( h ) p e r c e n t a g e om h et p e r s p e c t i e f t e g e b r u i k e n do uble hPercent = ( double ) bound . y / ( double ) heightFrame ; i n t wBound = bound . width ; i n t hBound = bound . h e i g h t ; // minModel = k l e i n s t e p e r s o o n // maxModel = g r o o t s t e p e r s o o n i f ( ( wBound > minModel . width * hPercent && wBound < maxModel . width * hPercent ) | | ( hBound > minModel . h e i g h t * hPercent && hBound < maxModel . h e i g h t * hPercent ) ) { // VERDERE VERWERKING } } } De opstelling van de camera in het beeldmateriaal maakt het mogelijk om voetgangers in verschillende poses te zien. Personen zijn zowel met een vooraanzicht als met een boven zijaanzicht zichtbaar. Personen die dicht bij de camera langs de rand van het beeld komen, komen onder een hoek te staan. Dit en het boven zijaanzicht verzwakken de hoogte-breedte ratio. De voorgestelde oplossing (figuur 4.5) gebruikt een lijn om de ideale afstand tot de camera vast te leggen. Ook hier wordt met de locatie van een object ten opzichte van de hoogte van het beeld gewerkt. Naarmate dit percentage groter is, is de locatie van het
4.1 Algoritme
40
object dichter bij de camera. Als een object dichter bij de camera is, wordt de hoogtebreedte ratio afgezwakt.
Figuur 4.5: Oplossing voor de opstelling van de camera.
Omdat personen in beeld onder een hoek kunnen voorkomen, werd een bounding box getest dat hiermee rekening houdt. Deze bounding box noemt een CvBox2D. Deze methode leverde een overmaat aan valse detecties en is geen oplossing voor personen onder een hoek. De hoek bleek steeds tussen -45°en -90°te liggen. De oorzaak daarvan ligt in de manier dat de hoek van deze bounding box wordt berekend. De hoek wordt berekend door 90°te verminderen met de kleinste hoek tussen de horizontale as en de bounding box (figuur 4.6). Een extra manier om personen te herkennen werd kort bekeken. Tijdens het bewegen heeft het hoofd altijd dezelfde pose. Het idee was om het hoofd op een object te lokaliseren en zo een persoon te onderscheiden. Het hoofd zou met template matching of eventueel ORB kunnen worden gevonden zoals in de literatuur beschreven staat. Als het beeldmateriaal beter wordt bekeken, is het hoofd toch geen uitgesproken kenmerk. Het hoofd vloeit vaak gewoon over naar de schouders. Bij een zijaanzicht is het hoofd ook niet te isoleren van het lichaam.
4.1 Algoritme
41
Figuur 4.6: Opbouw CvBox2D en de bepaling van de hoek.
Viola Jones Het Viola Jones algoritme detecteert door middel van het personenmodel van OpenCV. Een mogelijk probleem was dat het model enkel zou kunnen werken in kleurenbeelden. Bij het uitvoeren van het prototype bleek deze stelling te kloppen. Er werd zelden een persoon gedetecteerd. Enkele opstellingen worden opgebouwd om alle opties van dit Viola Jones model te bekijken. Een eerste is het model op de originele beelden toepassen. Een tweede wordt uitgevoerd op het voorgrondbeeld, om zo enkel de focus te leggen op de vorm. Als laatste wordt het voorgrondbeeld gebruikt als masker op het origineel beeld om zo de focus op de vorm maar ook op de persoon zijn kenmerken te vestigen. Op het eerste zicht kwamen de beste resultaten van de eerste opstelling, waar detectie op de originele beelden gebeurde. Een model specifiek voor infraroodbeelden maken is mogelijk, maar daarvoor is veel data nodig. Met het beschikbare videomateriaal is er genoeg data voorzien. Het zou echter te lang duren om de personen eruit te knippen en deze afbeeldingen te normaliseren. Het is mogelijk om met een beperkte dataset te werken, maar de kwaliteit van dat model zou slecht zijn. Om een goed model[11] te maken, zijn er ongeveer 3000 voetgangers nodig en veel meer niet-voetgangers. Personen zijn variabel van vorm, dus er zouden meerdere classifiers moeten worden gemaakt. Een Viola Jones classifier maken ligt dan ook buiten het onderwerp van deze thesis.
4.1 Algoritme
4.1.3
42
Tracking
Als een voetganger wordt gedetecteerd, dan wordt dit niet meteen geregistreerd. Een detectie moet eerst een aantal frames in dezelfde omgeving voorkomen, vooraleer het als detectie wordt geregistreerd en kan worden gevisualiseerd. Deze maatregel zorgt dat minder valse detecties worden waargenomen. De visualisatie gebeurt door middel van rechthoeken. Iedere bounding box wordt in een lijst bewaard. Als een detectie even uit beeld verdwijnt dan blijft zijn bounding box nog steeds in de lijst. Zodra de persoon opnieuw in dezelfde omgeving gedetecteerd wordt, kan het volgen van de detectie verder worden gezet. Als een gedetecteerd persoon gedurende een bepaalde tijd uit beeld is, wordt zijn bounding box uit de lijst verwijderd. Om een rechthoek tussen 2 frames te volgen, moet er een zekere overlap zijn tussen de rechthoeken van het huidig en een vorig beeld (codefragment 4.3). Eerst moeten de grenzen van de overlapping tussen 2 rechthoeken worden gevonden. Deze overlapping is op zich ook een rechthoek. Als de grenzen aan de voorwaarde voldoen, dan pas overlappen de 2 rechthoeken elkaar en dit is enkel als de linkse grens kleiner is dan de rechte alsook de bovenste grens kleiner is dan de onderste. Om het percentage van overlapping te berekenen, wordt de overlappende oppervlakte gedeeld door de volledige oppervlakte van beide rechthoeken samen. In het uitgewerkt algoritme wordt een overlappingspercentage van 50% gekozen. Op die manier kan het object nog steeds worden gevolgd, zelfs al verdwijnt de detectie even. Het codefragment 4.3 is een deel van het volledig trackingalgoritme in bijlage A.3.1. Codefragment 4.3: Uit 2 overlappende rechthoeken
// Grenzen van de o v e r l a p p i n g b e r e k e n e n l e f t = max( box1 . x , box2 . x ) ; r i g h t = min ( box1 . x+box1 . width , box2 . x+box2 . width ) ; top = max( box1 . y , box2 . y ) ; bottom = min ( box1 . y+box1 . h e i g h t , box2 . y+box2 . h e i g h t ) ; // Voorwaarde van o v e r l a p p i n g i f ( l e f t < r i g h t && top < bottom ){ areaBox1 = box1 . width * box1 . h e i g h t ; areaBox2 = box2 . width * box2 . h e i g h t ; a r e a O v e r l a y = ( r i g h t − l e f t ) * ( bottom − top ) ;
4.2 Test opstelling
43
// union = t o t a l e o p p e r v l a k t e v box1 & box2 samen unionOverlay = areaBox1 + areaBox2 − a r e a O v e r l a y ; // B e r e k e n i n g p e r c e n t a g e o v e r l a p p i n g o v e r l a y = a r e a O v e r l a y / unionOverlay ; }
4.2
Test opstelling
Figuur 4.7: UML diagram van het basis test framework.
Het test framework zal de detector toetsen aan de realiteit dus aan de annotatie. Zowel de detecties als de annotaties staan in een log bestand. Beide log bestanden moeten aan elkaar worden getoetst. Het UML schema (figuur 4.7) bevat de nodige functionaliteit van
4.2 Test opstelling
44
het test framework. Het framework wordt hoofdzakelijk rond de klasse DetectorEvaluator geschreven. Het inlezen van de log bestanden gebeurt via de klasse LogParser. Ieder log bestand wordt omgevormd tot een lijst dat per frame, alle bounding boxes bevat. Deze lijst bevat ook het begin en het einde van de video in de vorm van een FrameInterval. Na het inlezen kan de lijst van detecties vergeleken worden met de lijst van annotaties. Dit gebeurt met behulp van de klasse FrameMatcher. Uit beide lijsten wordt een object gehaald, dus een detectie en een annotatie. Dit object bevat het beeldnummer wat de plaats in de video beschrijft, ook bevat het alle detecties op dat beeld van de video. Enkel als beide objecten eenzelfde beeldnummer hebben, kunnen er true positives worden gevonden (codefragment 4.4). Enkel als de overlapping(zie codefragment 4.3) groot genoeg is, wordt de detectie als true positive geclassificeerd. De valse detecties zijn dan de overblijvende detecties die geen true positives zijn. Idem voor de valse negatieven. Dit zijn de overblijvende annotaties. Als het beeldnummer van het detectie lijstobject kleiner is dan die van het annotatie object, dan wijst dit op valse detecties. Er zijn namelijk vroeger detecties waargenomen voordat de annotatie een detectie beschrijft. Het aantal valse detecties is gelijk aan iedere detectie dat plaatsvindt per beeld totdat het beeldnummer van het detectie object gelijk is aan het beeldnummer van het annotatie object. Voor het aantal valse negatieven is dit gelijk aan iedere annotatie dat plaatsvindt per beeld tot het beeldnummer van de detectie en annotatie objecten gelijk zijn. Een true negative wordt geregistreerd als in een beeld noch detectie noch annotatie plaatsvindt. Nadat alle resultaten zijn opgeteld, worden de statistieken van de detector met de klasse PrecisionRecallMatrix berekend. In de literatuur worden de gebruikte statistische termen beschreven.
4.2 Test opstelling
45 Codefragment 4.4: Berekening van true positives.
// Haal de bounding boxes u i t de f r a m e s GroundTruthBoxes = GroundTruthFrame−>Pe dest rian Box ; D e t e c t i o n B o x e s = DetectionFrame−>Pe dest rian Box ; // Overloop a l l e bboxes van de a n n o t a t i e a l s van h et a l g o r i t m e f o r ( i n t i = 0 ; i < GroundTruthBoxes . s i z e ( ) ; i ++) { GroundTruth = GroundTruthBoxes [ i ] ; f o r ( i n t j = 0 ; j < D e t e c t i o n B o x e s . s i z e ( ) ; j ++) { Detection = DetectionBoxes [ j ] ; // O v e r l a p p i n g van b e i d e d e t e c t i e s a c h t e r h a l e n Overlay = GetOverlay ( GroundTruth , D e t e c t i o n ) ; i f ( Overlay > t h r e s h o l d ) { TP++; } } } FP = D e t e c t i o n B o x e s . s i z e ( ) − TP; FN = GroundTruthBoxes . s i z e ( ) − TP;
RESULTATEN
46
Hoofdstuk 5 Resultaten 5.1
Viola Jones
Dit prototype gebruikt geen voorbewerkingen. De detectie gebeurt dus meteen op de infraroodbeelden. Het gebruikte model is de personenclassifier van OpenCV. (in %) Viola Jones
Sensitiviteit Specificiteit Precisie Accuraatheid 1,4 99,8 90,2 41,0
Tabel 5.1: De resultaten van het Viola Jones prototype.
Het Viola Jones algoritme levert een erg lage sensitiviteit. Daar tegenover is de precisie van de detecties wel erg goed. 90% van de geregistreerde detecties zijn werkelijke voetgangers. Door de vele correcte negatieven ligt de specificiteit erg hoog. Dit is ook de reden waarom de accuraatheid verrassend hoog ligt voor een slechte detector in infrarood beelden. Er zijn veel meer true negatives dan true positives. Dit brengt het geheel omhoog. De accuraatheid is misleidend. Door de slechte sensitiviteit, wordt er met dit algoritme niet verder gewerkt.
5.2 Eigen gemaakte detector
5.2 5.2.1
47
Eigen gemaakte detector Eerste prototype
Het eerste prototype bestaat uit de essenti¨ele componenten waaruit een detector bestaat. Deze worden in figuur 5.1 weergegeven. De detectie is aan de hand van de menselijke eigenschappen en er wordt een basis tracking algoritme gebruikt.
Figuur 5.1: Schematische voorstelling van het eerste prototype.
(in %) Prototype 1
Sensitiviteit Specificiteit Precisie Accuraatheid 9,3 89,3 44,3 51,0
Tabel 5.2: De resultaten van het eerste prototype.
De resultaten (tabel 5.2) liggen over het algemeen erg laag, behalve de specificiteit, die lijkt wel een goede waarde te hebben.
5.2.2
Met blob creatie
Bewegende objecten worden in het voorgrondbeeld vaak in verschillende blobs opgesplitst. Door deze onsamenhangende blobs samen te voegen, zou het resultaat moeten verbeteren. Deze stap wordt aan het eerste prototype toegevoegd (figuur 5.2), om zo het tweede prototype te maken.
Figuur 5.2: Toevoeging van de blobcreatie aan het eerste prototype.
5.2 Eigen gemaakte detector (in %) Prototype 2
48
Sensitiviteit Specificiteit Precisie Accuraatheid 10,3 88,6 42,7 53,1
Tabel 5.3: De resultaten van het tweede prototype.
Als het samenvoegen van onsamenhangende blobs wordt toegevoegd, resulteert dit in een hogere sensitiviteit (tabel 5.3). Er worden dus meer personen gevonden. De precisie en specificiteit gaan wel omlaag, maar de sensitiviteit is de belangrijkste. Deze stap heeft een positieve invloed op een geheel en wordt dus behouden.
5.2.3
Met blob voorwaarden
Over het hele beeld wordt geen rekening gehouden met de grootte van een blob. Door een extra stap toe te voegen (figuur 5.3), moeten de blobs aan grootte voorwaarden voldoen. Deze stap omvat ook de eis dat blobs niet bij de grens mogen voorkomen. Zo kunnen voertuigen of andere objecten, die net in beeld komen, niet als voetgangers worden geclassificeerd. Zo komt het derde prototype tot stand.
Figuur 5.3: Toevoeging van de blob voorwaarden aan het tweede prototype.
(in %) Prototype 3
Sensitiviteit Specificiteit Precisie Accuraatheid 12,1 89,4 50,4 53,0
Tabel 5.4: De resultaten van het derde prototype.
Bij het toevoegen van deze stap zijn alle waarden over het algemeen beter (tabel 5.4). Het toevoegen van de voorwaarden is voor de detector een verbetering en wordt dus ook behouden.
5.2 Eigen gemaakte detector
5.2.4
49
Met motion history image
Om ervoor te zorgen dat voertuigen beter te onderscheiden zijn en om blobs robuuster te maken, wordt een motion history image toegevoegd. Dit wordt aan prototype 3 toegevoegd, waardoor prototype 4 wordt gemaakt (figuur 5.4).
Figuur 5.4: Toevoeging van de MHI aan het derde prototype.
(in %) Prototype 4
Sensitiviteit Specificiteit Precisie Accuraatheid 8,4 87,7 40,4 48,3
Tabel 5.5: De resultaten van het vierde prototype.
Het resultaat van dit prototype (tabel 5.5) is een stuk slechter. Dit was niet zoals verwacht. De logica van de stap zou veronderstellen dat er toch een verbetering moet plaatsvinden. Mogelijks komt het slechte resultaat door de gebruikte voorgrondsegmentatie techniek. Deze stap wordt niet meteen weggelaten, maar wordt later nog beter bekeken nadat een andere segmentatie techniek werd gekozen.
5.2.5
Alternatieve voorgrondsegmentatie techniek
Het schema van het vierde prototype (figuur 5.4) wordt behouden, enkel een andere voorgrondsegmentatie techniek wordt toegepast. (in %) Sigma delta Grimson Zivkovic
Sensitiviteit Specificiteit Precisie Accuraatheid 8,4 87,7 40,4 48,3 17,3 88,7 52,5 58,8 19,9 87,9 54,6 59,1
Tabel 5.6: De resultaten van verschillende voorgrond segmentatie technieken.
5.2 Eigen gemaakte detector
50
De voorgrondsegmentatie is sterk bepalend voor de detector (tabel 5.6). Het algoritme van Zivkovic geeft de beste segmentatie. Dit wordt in het uiteindelijke algoritme toegepast.
5.2.6
Detector zonder MHI
Om te bewijzen dat het motion history image toch een positieve invloed kan hebben, wordt deze stap weggelaten uit het finaal algoritme. (in %) Finaal algoritme Zonder MHI
Sensitiviteit Specificiteit Precisie Accuraatheid 19,9 87,9 54,6 59,1 16,3 89,4 53,5 58,6
Tabel 5.7: De resultaten van de prototypes met als basis het finaal algoritme.
Deze vergelijking (tabel 5.7) toont aan dat het motion history image met een andere voorgrondsegmentatie techniek, wel een positieve invloed heeft op de detector. Het motion history image kan dus een positieve invloed hebben. Dit is afhankelijk van de gebruikte voorgrondsegmentatie techniek. De uiteindelijke detector wordt beschreven door het finaal algoritme, gevisualiseerd in figuur 5.5.
Figuur 5.5: Schematische voorstelling van het finaal algoritme.
BESLUIT EN TOEKOMSTPERSPECTIEVEN
51
Hoofdstuk 6 Besluit en toekomstperspectieven 6.1
Besluit
Deze thesis bestond erin om eerst een studie te maken van bestaande technieken die mogelijkheden bood om een detectie algoritme op te stellen. Als tweede moest een proof of concept algoritme worden uitgewerkt dat aantoont dat het mogelijk is om met de beschikbare thermografische camera voetgangers te kunnen detecteren. Voor het eerste luik werd er een uitvoerige literatuurstudie gemaakt. Deze beschrijft de uiteenlopende technieken. Deze kennis heb ik in het tweede luik kunnen toepassen en kan voor toekomstig gebruik ook interessant zijn. In het tweede luik moest een proof of concept detectie algoritme ontwikkeld worden. Er werd gekozen om een eigen detector te ontwikkelen. De resultaten van de detector tonen aan dat het niet kan dienen als proof of concept voor deze thermografische camera. Dit ten gevolge van de detectie aan de hand van menselijke karakteristieken. Buiten de detectie methode, kan de rest van het ontwikkeld algoritme een basis vormen voor een verdere uitbreiding op het proof of concept detectie algoritme.
6.2 6.2.1
Toekomstperspectieven Studie
Het vergaren van kennis is een immense zoektocht. In de toekomst zullen er steeds nieuwe technieken beschikbaar zijn. Deze en de nog niet ontdekte technieken kunnen bij de lite-
6.2 Toekomstperspectieven
52
ratuurstudie worden aangevuld om zo een referentie te vormen voor de ontwikkeling van toekomstige algoritmes.
6.2.2
Detectie algoritme
Combinatie Segmentatie van de voorgrond met de gegeven camera is vaak het probleem. In vele gevallen is een combinatie van zowel infrarood als kleurbeelden een oplossing. Zowel infrarood als kleur hebben hun voor-en nadelen. Tijdens de nacht kan de infraroodcamera nog steeds detecteren wanneer de kleurcamera niets kan waarnemen. Bij een warme dag heeft de thermografische camera meer problemen dan de kleurcamera. Detectie methode Het grootste hekelpunt van het gehele detectie algoritme is de methode waarop voetgangers worden gedetecteerd. De detector van Dollar[7] zag er veelbelovend uit. Het is een hybride detector die deels gebaseerd is op het Viola Jones algoritme, daarvoor zullen er dus ´e´en of meerdere modellen nodig zijn. Voor de huidige thermografische camera kan het interessant zijn om het model op basis van het voorgrond beeld te maken. Het verschil in contrast tussen de voor-en achtergrond is in het beeldmateriaal vaak erg klein waardoor het waarschijnlijk moeilijk is om hieruit kenmerken van bepaalde objecten te halen. Natuurlijk worden veel eigenschappen weggewerkt door het voorgrond beeld te gebruiken. Dit moet dus beter worden onderzocht. Tracking Het huidig tracking algoritme kan worden uitgebreid met een Kalman filter. Als er een detectie om bepaalde redenen verdwijnt, kan de locatie van de voetganger nog steeds worden geschat door de Kalman filter. Op deze manier wordt een detectie niet meer onderbroken en worden onnodige valse negatieven vermeden. Classificatie algoritme Door een classificatie algoritme toe te passen kan er een betere classificatie van de detecties gebeuren. Dit is een populaire techniek om betere resultaten te verkrijgen. In hoeverre
6.2 Toekomstperspectieven
53
dit kan worden toegepast moet nog worden onderzocht aangezien er in deze thesis aan dit onderwerp geen aandacht werd gegeven. Beeldmateriaal Momenteel was het beeldmateriaal eenzijdig. Het beschreef 1 verkeerssituatie in dezelfde weerstoestand. Om het algoritme grondiger te kunnen testen zijn meer scenario’s nodig onder verschillende toestanden. Dit zou kunnen vari¨eren van koude tot warme dagen, regen, mist, rook, verschillende belichting zoals vooravond of nacht, de camera op verschillende hoogtes opstellen,. . .
BRONCODE
54
Bijlage A Broncode A.1 A.1.1
Preprocessing Connectie van onderlinge componenten en visualiseren rekening houdende met de grootte beperkingen en de rand
void ConnectComponents ( I p l I m a g e * mask , f l o a t minScale , f l o a t maxScale , int edge ) { const int CVCONTOUR APPROX LEVEL = 1 ; const int CVCLOSE ITR = 1 ; s t a t i c CvMemStorage * mem storage = NULL; s t a t i c CvSeq * contours = NULL; //CLEAN UP RAW MASK // cvMorphologyEx ( mask , mask , 0 , 0 , CV MOP OPEN, CVCLOSE ITR ) ; cvMorphologyEx ( mask , mask , 0 , 0 , CV MOP CLOSE, CVCLOSE ITR ) ; //FIND CONTOURS AROUND ONLY BIGGER REGIONS // i f ( mem storage==NULL ) { mem storage = cvCreateMemStorage ( 0 ) ; } else { cvClearMemStorage ( mem storage ) ;
A.1 Preprocessing } CvContourScanner s c a n n e r = c v S t a r t F i n d C o n t o u r s ( mask , mem storage , s i z e o f ( CvContour ) , CV RETR EXTERNAL, CV CHAIN APPROX SIMPLE ); CvSeq * c ; int numCont = 0 ; while ( ( c = cvFindNextContour ( s c a n n e r ) ) != NULL ) { // c a l c u l a t e b o r d e r s o f t h e o b j e c t CvRect bound = cvBoundingRect ( c , 0 ) ; int l e f t , r i g h t , top , bottom ; l e f t = bound . x ; r i g h t = bound . x + bound . width ; top = bound . y ; bottom = bound . y + bound . h e i g h t ; CvSize s i z e = c v G e t S i z e ( mask ) ; double l e n = c v C o n t o u r P e r i m e t e r ( c ) ; // c a l c u l a t e p e r i m e t e r l e n t h r e s h o l d : // double min = ( mask−>h e i g h t + mask−>width ) * m i n S c a l e ; double max = ( mask−>h e i g h t + mask−>width ) * maxScale ; // D e l e t e b l o b i f i t s p e r i m e t e r i s t o o s m a l l or t o o b i g // or i f i t ’ s a t t h e e d g e o f t h e frame : i f ( l e n < min | | l e n > max | | l e f t < edge | | r i g h t > s i z e . width − edge | | top < edge | | bottom > s i z e . h e i g h t − edge ) { c v S u b s t i t u t e C o n t o u r ( s c a n n e r , NULL ) ; } else { // Smooth i t s e d g e s i f i t s l a r g e enough // CvSeq * c new ; // P o l y g o n a l a p p r o x i m a t i o n // c new = cvApproxPoly (
55
A.1 Preprocessing
56 c, s i z e o f ( CvContour ) , mem storage , CV POLY APPROX DP, CVCONTOUR APPROX LEVEL, 0 );
c v S u b s t i t u t e C o n t o u r ( s c a n n e r , c new ) ; numCont++; } } c o n t o u r s = cvEndFindContours ( &s c a n n e r ) ; // J u s t some c o n v e n i e n c e v a r i a b l e s const CvScalar CVX WHITE = CV RGB( 0 x f f , 0 x f f , 0 x f f ) ; const CvScalar CVX BLACK = CV RGB( 0 x00 , 0 x00 , 0 x00 ) ; // PAINT THE FOUND REGIONS BACK INTO THE IMAGE // cvZero ( mask ) ; for ( c=c o n t o u r s ; c != NULL; c = c−>h n e x t ) { cvDrawContours ( mask , c, CVX WHITE, CVX BLACK, −1, CV FILLED , 8 ); } }
A.2 Detectie
A.2 A.2.1
57
Detectie Detectie aan de hand van menselijke eigenschappen
void D e t e c t B y C h a r a c t e r i s t i c s ( const I p l I m a g e * f o r e g r o u n d , IplImage * r e s u l t , CvSize minModel , CvSize maxModel ) { i f ( ! f o r e g r o u n d | ! r e s u l t ) return ; s t a t i c CvMemStorage * s t o r a g e = cvCreateMemStorage ( ) ; s t a t i c CvSeq * f i r s t c o n t o u r = 0 ; s t a t i c I p l I m a g e * fTemp = cvCreateImage ( c v S i z e ( f o r e g r o u n d −>width , f o r e g r o u n d −>h e i g h t ) , f o r e g r o u n d −>depth , f o r e g r o u n d −>nChannels ) ; cvCopy ( f o r e g r o u n d , fTemp ) ; cvFindContours ( fTemp , s t o r a g e , &f i r s t c o n t o u r ) ; int heightFrame = f o r e g r o u n d −>h e i g h t ; int widthFrame = f o r e g r o u n d −>width ; CvRect bound ; bool b e g i n f r a m e = true ; // b e g i n n i n g o f t h e frame −> t r a c k i n g for ( CvSeq * i = f i r s t c o n t o u r ; i != 0 ; i = i −>h n e x t ) { bound = cvBoundingRect ( i , 0 ) ; i f ( bound . h e i g h t /bound . width >= 0 . 8 ) { // h e i g h t p e r c e n t a g e s f o r t h e p e r s p e c t i v e double h e i g h t P e r c = ( double ) bound . y / ( double ) heightFrame ; int widthBound = bound . width ; int heightBound = bound . h e i g h t ; i f ( ( widthBound > minModel . width * h e i g h t P e r c &&
A.3 Tracking
58 widthBound < maxModel . width * h e i g h t P e r c ) | | ( heightBound > minModel . h e i g h t * h e i g h t P e r c && heightBound < maxModel . h e i g h t * h e i g h t P e r c ) ) { c v R e c t a n g l e ( r e s u l t , c v P o i n t ( bound . x , bound . y ) , c v P o i n t ( bound . x + widthBound , bound . y + heightBound ) , CV RGB( 2 5 5 , 0 , 0 ) , 1 , 8 , 0 ) ; T r a c k O b j e c t s ( bound , b e g i n f r a m e , true , r e s u l t ) ; // o n l y w i t h a d e t e c t i o n , change t o f a l s e begin frame = false ; }
} } }
A.3 A.3.1
Tracking Een eenvoudig tracking algoritme
bool Tra c k O b j e c t s ( CvRect newbox , bool beginFrame , bool v i s u a l i z e , IplImage * d e s t i n a t i o n ) { s t a t i c v e c t o r
l i f e C o u n t e r ; s t a t i c v e c t o r bbox ; // v a r i a b l e s t o v i s u a l i z e s t a t i c int c o u n t e r = 0 ; s t a t i c v e c t o r boxid ; s t a t i c CvFont f o n t ; c v I n i t F o n t (& f o n t , CV FONT NORMAL, 0 . 5 , 0 . 5 , 0 , 2 , 8 ) ; bool u n t r a c k e d ; // v a r i a b l e s f o r t h e i n t e r s e c t e d r e c t a n g l e
A.3 Tracking int int int int int
59
l e f t , r i g h t , top , bottom ; intersectArea = 0; intersectUnion = 0; newArea = newbox . width * newbox . h e i g h t ; oldArea = 0 ;
double o v e r l a y = 0 ; u n t r a c k e d = true ; // newbox = u n t r a c k e d ? p u t i t i n b b o x v e c t o r // c h e c k e v e r y t h i n g i f t h e frame begun i f ( beginFrame ) { f o r ( int i = 0 ; i < ( signed ) l i f e C o u n t e r . s i z e ( ) ; ++i ) { // s t a y s +1 i f no s i m i l a r bounding box i s found l i f e C o u n t e r [ i ] += 1 ; i f ( l i f e C o u n t e r [ i ] > 10){ // b b o x i s n ’ t found i n 10 frames −> d e l e t e i t l i f e C o u n t e r . e r a s e ( l i f e C o u n t e r . b e g i n ()+ i ) ; bbox . e r a s e ( bbox . b e g i n ()+ i ) ; boxid . e r a s e ( boxid . b e g i n ()+ i ) ; } i f ( v i s u a l i z e ){ CvRect box = bbox [ i ] ; char count [ 1 0 ] ; i t o a ( boxid [ i ] , count , 1 0 ) ; cvPutText ( d e s t i n a t i o n , count , c v P o i n t ( box . x , box . y −2) , } } } // c a l c u l a t e en c h e c k t h e i n t e r s e c t e d r e c t a n g l e for ( int i = 0 ; i < ( signed ) bbox . s i z e ( ) ; ++i ) { CvRect box = bbox [ i ] ; // t h e b o r d e r s o f t h e i n t e r s e c t e d r e c t a n g l e l e f t = max( newbox . x , box . x ) ; r i g h t = min ( newbox . x+newbox . width , box . x+box . width ) ; top = max( newbox . y , box . y ) ;
A.3 Tracking bottom = min ( newbox . y+newbox . h e i g h t , box . y+box . h e i g h t ) ; overlay = 0; // i f t h i s s t a t e m e n t i s t r u e , t h e r e i s an o v e r l a y i f ( l e f t 0.5){ untracked = false ; bbox [ i ] = newbox ; l i f e C o u n t e r [ i ] −= 1 ; return true ; } } } i f ( untracked ){ bbox . push back ( newbox ) ; l i f e C o u n t e r . push back ( 0 ) ; i f ( v i s u a l i z e ){ c o u n t e r +=1; boxid . push back ( c o u n t e r ) ; } return true ; } return f a l s e ; }
60
BIBLIOGRAFIE
61
Bibliografie [1] Opencv. http://opencv.willowgarage.com/wiki/. [2] R. Benenson, R. Timofte, and L. Van Gool. Stixels estimation without depthmap computation. In International Conference on Computer Vision, CVVT workshop, 2011. [3] N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad, and P. Ishwar. changedetection.net: A new change detection benchmark dataset. In Proc. IEEE Workshop on Change Detection (CDW’12) at CVPR’12, 2012. [4] G. Bradski and A. Kaehler. Learning OpenCV: Computer Vision with the OpenCV Library. O’Reilly Media, Incorporated, 2008. [5] Navneet Dalal. Finding People in Images and Videos. PhD thesis, Institut National Polytechnique de Grenoble - INPG, 2006. [6] Navneet Dalal and Bill Triggs. Histograms of oriented gradients for human detection. In Cordelia Schmid, Stefano Soatto, and Tomasi Carlo, editors, International Conference on Computer Vision and Pattern Recognition (CVPR ’05), volume 1, pages 886–893. IEEE Computer Society, 2005. [7] Piotr Dollar, Serge Belongie, and Pietro Perona. The fastest pedestrian detector in the west. In Proceedings of the British Machine Vision Conference. BMVA Press, 2010. [8] P. Dollar, Z. Tu, P. Perona, and S. Belongie. Integral channel features. In British Machine Vision Conference, 2009. [9] B. Gunyel, R. Benenson, R. Timofte, and L Van Gool. Stixels motion estimation without optical flow computation. In European Conference on Computer Vision, 2012.
BIBLIOGRAFIE
62
[10] Jose M. Milla, Sergio L.Toral, Manuel Vargas, and Federico Barrero. Computer Vision Techniques for Background Modeling in Urban Traffic Monitoring, chapter 4, page 192. Sciyo, 2010. [11] Viola Paul and J. Jones Michael. Robust real-time face detection. Int. J. Comput. Vision, 57(2):137–154, 2004. 966458. [12] Rafael C. Gonzalez and Richard E. Woods. Digital Image Processing, Third Edition. Prentice Hall, 2008. [13] Edward Rosten and Tom Drummond. Fusing points and lines for high performance tracking. In IEEE International Conference on Computer Vision, volume 2, pages 1508–1511, October 2005. [14] Edward Rosten and Tom Drummond. Machine learning for high-speed corner detection. In European Conference on Computer Vision, volume 1, pages 430–443, May 2006. [15] David G. Lowe. Distinctive image features from scale-invariant keypoints. Int. J. Comput. Vision, 60(2):91–110, November 2004. [16] Ethan Rublee, Vincent Rabaud, Kurt Konolige, and Gary Bradski. ORB: An Efficient Alternative to SIFT or SURF. In International Conference on Computer Vision, Barcelona, 2011. [17] M. Bertozzi, A. Broggi, M. Carletti, A. Fascioli, T. Graf, P. Grisleri, and M. Meinecke. Ir pedestrian detection for advanced driver assistance systems. In Bernd Michaelis and Gerald Krell, editors, Pattern Recognition, volume 2781 of Lecture Notes in Computer Science, pages 582–590. Springer Berlin Heidelberg, 2003. [18] Emmanuel Goubet, Joseph Katz, and Fatih Porikli. Pedestrian tracking using thermal infrared imaging. In Infrared Technology and Applications XXXII, volume 6206 of Proceedings of SPIE, pages 797–808. SPIE, 2006. [19] Daniel Olmeda, Arturo de la Escalera, and Jos M Armingol. Detection and tracking of pedestrians in infrared images. In International Conference on Signals, Circuits and Systems, 2009. [20] Nicholas Hogasten and Rene Lindner. Digital Detail Enhancement (DDE). [21] FLIR. Fc-series, 2012.
BIBLIOGRAFIE
63
[22] Zivkovic Zoran. Improved adaptive gaussian mixture model for background subtraction, 2004. [23] C. Stauffer and W. E. L. Grimson. Adaptive background mixture models for real-time tracking. In Computer Vision and Pattern Recognition, 1999. IEEE Computer Society Conference on., volume 2, pages 246–252 Vol. 2. IEEE, 1999.
LIJST VAN FIGUREN
64
Lijst van figuren 1.1 1.2
Logo Traficon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logo FLIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1
2.1 2.2
Logo OpenCV[1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Een originele afbeelding(links) gevolgd door een voorbeeld van erosie(midden) en dilatatie(rechts). Beide gebruiken een 3x3 rechthoekig structuring element. Een 8bit afbeelding(links) wordt gebinariseerd(rechts) met een threshold van 150. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Originele afbeelding om de voorgrond/achtergrond techniek op uit te testen. Boven: verschilbeeld(links), gemiddelde(rechts). Onder: gewogen gemiddelde(links, sigma delta(rechts). . . . . . . . . . . . . . . . . . . . . . . . . Een uitvergroot beeld van een afbeelding. Ieder blokje stelt een pixel voorde grijze pixels hebben waarde 0 en de witte pixels hebben waarde 1. Presentatie van een gradi¨ent vector, merk op dat de rand loodrecht op de richting van de gradi¨ent staat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verschillende gradi¨ent operatoren. . . . . . . . . . . . . . . . . . . . . . . . Voorbeeld van een Canny Edge detectie. . . . . . . . . . . . . . . . . . . . Voorbeeld contourfinder in C++ via de OpenCV library. . . . . . . . . . . Het vergelijken van de kandidaat corner aan de omliggende pixels[13]. . . . Voorbeeld van CAM-shift in C# via de EmguCV library. . . . . . . . . . . Stixel motion estimation pipeline[2]. . . . . . . . . . . . . . . . . . . . . . . A en B zijn 2-rechthoeksfeatures, C is een 3-rechthoeksfeature en D een 4-rechthoeksfeature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integraal beeld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stappenplan naar een sterke classifier, genomen van Y. Freund. . . . . . . Attentional cascade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stappenplan HOG algoritme[5]. . . . . . . . . . . . . . . . . . . . . . . . .
3
2.3 2.4 2.5 2.6
2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17
5 6 7 8
9 9 10 10 12 14 15 16 17 18 19 20
LIJST VAN FIGUREN
65
2.18 resulterend voetgangermodel: Links: Root-filter (HOG-features). Midden: Part-filter. Rechts: Vervormingskosten. Hoe verder een stuk van zijn verwachte plaats staat, hoe lager zijn score wordt. . . . . . . . . . . . . . . . . 2.19 [7] detectie aan de hand van: A: Beeld piramides B: Scale invariant features C: een hybride model van zowel Beeld piramides als scale invariant features 2.20 Volledig frequentiespectrum. . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21 Infrarood beeld gemaakt met een ir-camera met een bereik tussen 7,5µm en 13,5µm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.22 Kleuren infraroodbeeld, rood/wit is warm, zwart/blauw is koud. . . . . . . 2.23 Eerste van links: zonlicht tegen een muur, tweede van links: koude winterdag. Voorlaatste: zware bewolking, laatste: nacht. . . . . . . . . . . . . . . 2.24 Voorbeeld van DDE, links is het originele beeld, rechts met DDE toegepast. [20] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 3.2 3.3
4.1
Algemeen schema van het algoritme. . . . . . . Schema van preprocessing. . . . . . . . . . . . . Demonstratief voorbeeld. Links: bovenaanzicht. nen. Rechts: verwachte pose. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . Midden: meerdere . . . . . . . . . . .
. . . . . . . . perso. . . .
21 22 23 24 25 26 26 30 31 32
4.4 4.5 4.6 4.7
Per rij is er 1 sc`ene, per kolom is een ander algoritme. Links is het origineel, gevolgd door sigma-delta[10], daarnaast Grimson[23], als laatste Zivkovic[22] 35 Het origineel(links), onsamenhangende blob door voorgrond segmentatie(midden), terug gegroepeerd met functie(rechts) . . . . . . . . . . . . . . . . . . . . . 36 Het origineel(links), voorgrond segmentatie(midden), voorgrond samen met mhi(rechts). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Extra stap in preprocessing. . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Oplossing voor de opstelling van de camera. . . . . . . . . . . . . . . . . . 40 Opbouw CvBox2D en de bepaling van de hoek. . . . . . . . . . . . . . . . 41 UML diagram van het basis test framework. . . . . . . . . . . . . . . . . . 43
5.1 5.2 5.3 5.4 5.5
Schematische voorstelling van het eerste prototype. . . . . . . . Toevoeging van de blobcreatie aan het eerste prototype. . . . . . Toevoeging van de blob voorwaarden aan het tweede prototype. Toevoeging van de MHI aan het derde prototype. . . . . . . . . Schematische voorstelling van het finaal algoritme. . . . . . . . .
4.2 4.3
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
47 47 48 49 50
LIJST VAN TABELLEN
66
Lijst van tabellen 2.1
Voorbeeld van een confusion matrix . . . . . . . . . . . . . . . . . . . . . .
28
5.1 5.2 5.3 5.4 5.5 5.6 5.7
De De De De De De De
46 47 48 48 49 49 50
resultaten resultaten resultaten resultaten resultaten resultaten resultaten
van van van van van van van
het Viola Jones prototype. . . . . . . . . . . . . het eerste prototype. . . . . . . . . . . . . . . . het tweede prototype. . . . . . . . . . . . . . . het derde prototype. . . . . . . . . . . . . . . . het vierde prototype. . . . . . . . . . . . . . . . verschillende voorgrond segmentatie technieken. de prototypes met als basis het finaal algoritme.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
LIJST VAN CODEFRAGMENTEN
67
Lijst van codefragmenten 4.1 4.2 4.3 4.4
Het samenvoegen van blobs en het verwijderen Gebruik van perspectief. . . . . . . . . . . . . Uit 2 overlappende rechthoeken . . . . . . . . Berekening van true positives. . . . . . . . . .
van onnodige objecten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
36 39 42 45