Embedded implementatie van optical flow voor independent motion segmentation

Maat: px
Weergave met pagina beginnen:

Download "Embedded implementatie van optical flow voor independent motion segmentation"


1 Departement Industriële Wetenschappen Master in de industriële wetenschappen: Elektronica-ICT afstudeerrichting ICT Embedded implementatie van optical flow voor independent motion segmentation Masterproef voorgedragen tot het behalen van de beroepstitel van industrieel ingenieur. Academiejaar Door: Promotor hogeschool: Promotor bedrijf: Lorenz Van den Heuvel Ing. Kristof Van Beeck Ing. Kristof Van Beeck


3 Woord vooraf Dit eindwerk is een onderdeel van de opleiding Industrieel Ingenieur Elektronica - ICT optie ICT aan de Hogeschool Lessius Mechelen - Campus De Nayer. Dit eindwerk is uitgevoerd in opdracht van de Embedded & Applied Vision Engineering groep, EAVISE. Ik wil iedereen bedanken die dit eindwerk mogelijk heeft gemaakt. Ik wil hierbij in het bijzonder mijn promotor Kristof Van Beeck bedanken die mij bijgestaan heeft gedurende dit eindwerk, en Toon Goedemé van de EA- VISE onderzoekscel. Tot slot wil ik mijn ouders nog bedanken die het mogelijk gemaakt hebben dat ik deze opleiding heb kunnen volgen. Lorenz Van den Heuvel


5 Nederlands abstract Titel: Embedded implementatie van optical flow voor independent motion segmentation Situering Masterproef: Onderdeel van de onderzoekscel Embedded and Applied Vision Engineering (EAVISE), gevestigd op de Hogeschool Lessius Mechelen - Campus De Nayer. Doel Masterproef: Het doel van dit eindwerk bestaat uit 3 delen: het uitvoeren van een onderzoek naar de huidige stand in zake optical flow technieken, de implementatie van een optical flow techniek op een embedded systeem en tot slot trachten een versnelling van het algoritme te realiseren door een gedeelte van dit algoritme in hardware te implementeren. De eerste doelstelling bestaat erin een grondig onderzoek uit te voeren naar de huidige stand in zake optical flow. Hiermee wordt bedoeld te onderzoeken wat optical flow juist is, welke technieken er bestaan om optical flow te berekenen, en op basis van een vergelijkende studie een optical flow algoritme te kiezen dat we implementeren op een embedded platform. We zijn begonnen met een diepgaande literatuurstudie naar optical flow en zijn op zoek gegaan naar bronnen die optical flow technieken met elkaar vergelijken. Na deze vergelijkende studie uit gevoerd te hebben, hebben we gekozen om het Camus algoritme te implementeren. De tweede doelstelling bestaat erin om het gekozen algoritme te implementeren op een embedded platform, namelijk de Virtex 5 ML507. Een eerste stap daar naartoe was het implementeren van het Camus algoritme in software, geschreven in de programmeertaal C. De derde doelstelling was het versnellen van het Camus algoritme. Hiervoor hebben we een deel van het algoritme, het correlatie criteria, in hardware geïmplementeerd. I

6 II

7 English abstract Title: Embedded implementation of optical flow for independent motion segmentation Thesis Location: Part of the research group Embedded and Applied Vision Engineering (EAVISE), located at the university college Lessius Mechelen - Campus De Nayer. Thesis Goal: The goal of this thesis consists out of three parts: a thorough literature study regarding optical flow, the implementation of an optical flow algorithm on an embedded platform and finally realizing a speed-up by an implementation of part of the algorithm in hardware. The first goal consists out of an in-depth investigation of optical flow. What optical flow is, which techniques there are to calculate optical flow and, based upon a comparison of optical flow techniques, we will chose an algorithm to implement on an embedded platform. We started with a detailed literature study which described optical flow and started looking for papers which compared the different techniques. After this comparison we chose to implement the Camus algorithm on an embedded platform. The second goal was the implementation of the Camus algorithm on an embedded platform. The embedded platform we used was the Xilinx Virtex 5 ML507. A first step was the implementation of the Camus algorithm in software using the C programming language. The third goal was to accomplish a speed-up of the Camus algorithm. Therefore we implemented part of the algorithm, the correlation criteria, in hardware. III

8 IV

9 Short summary Introduction The goal of this thesis was to research optical flow and implement an optical flow algorithm on an embedded platform. Optical flow is a vector representation of the displacement of a pixel between consecutive frames. Optical flow has a lot of applications like motion estimation, object tracking and so on. There are a lot of different techniques available to calculate optical flow. Each technique has its advantages and disadvantages. The main problem is the speed versus accuracy trade-off that exists, optical flow is very computationally expensive. This is the reason why we want to implement an optical flow algorithm on an embedded platform to achieve a speed-up. The Camus algorithm We started researching the different techniques which exists to determine the optical flow field and came to the conclusion that there are 4 major groups: differential, correlation, phase and energy based techniques. We started looking at the different characteristics of these techniques and compared them based on speed, accuracy and robustness against noise. Based on these characteristics we chose the Camus correlation technique as the ideal algorithm to implement on the embedded platform. The algorithm produces reasonable accurate results, and has a good time complexity. Correlation-based techniques use neighborhoods, which are a collection of connected pixels in a frame. Usually this neighborhood has a square shape. Correlation-based techniques compare neighborhoods from frame 1 with neighborhoods from frame 2 and search for the best match over different displacements of that neighborhood. Camus also uses past frames to find the best match. This way we can reduce the size of the displacement (by looking at the past frames) and achieve a better time complexity. V

10 Embedded platform The embedded platform we used in this master thesis is the Xilinx Virtex 5 ML507 Evaluation Platform. This platform consists of a PowerPC440 and a Virtex 5 FPGA. We are capable of combining software, which runs on the PowerPC, with hardware designs. The PowerPC is clocked at 400MHz. The Virtex 5 is also capable of communicating with a host PC using an RS-232 connection. Other features of the Virtex 5 are CompactFlash interface and the external DDR2 SDRAM. Embedded project The embedded project consist of multiple hardware blocks, a PowerPC and the Processor Local Bus to connect the different components with each other. We have implemented the Camus correlation algorithm in software on the embedded platform and we have implemented part of the algorithm in hardware. The software implementation is written in C. The different C-files are compiled into object files and are then combined in an executable file that can be run on the embedded platform. The process of combining, called linking, is done using a linker script. In this linker script we defined what size the stack, heap and other section have and where they are placed in the memory: either in BlockRAM or in DDR2 SDRAM. Also noted in the linker script is the boot address of the system. The hardware implementation is build up around a Finite State Machine. An FSM is a machine that consists out of a finite number of states, outputs and transition conditions. We have created an FSM with 3 states that calculates the Sum Of Absolute Differences. We created an Intellectual Property (IP) with a number of registers which can be read and written from and to in software using C-functions. The initial problem was that we could not write to a register in hardware, but only read from it, so we had to adapt the original functions, thereby creating 2 kinds of registers. The first ones are both read- and writable in software but only readable in hardware. The latter are only readable in software but read- and writable in hardware. The PowerPC has a separate instruction and data cache, which can be activated independently. Cache is a small and fast memory that is located between the CPU and the main memory. This is used to store data or instructions recently used by the CPU, so the next time the CPU needs them they are immediately available and the CPU doesn t need to copy them from slower main memory. This delivers an increase in performance of the CPU. These caches are enabled by VI

11 functions provided by Xilinx. The usage of these caches gave a tremendous boost in performance when enabled in our project. The FGPA is configurable in different ways. We used the Xilinx Microprocessor Debugger to generate an ACE file that can be downloaded to a CompactFlash card. This CompactFlash card is then connected to the FPGA and using the DIP switches we can chose which ACE file has to be loaded into the FPGA. An ACE file consist out of an.elf file and a.bit file. The Executable and Linkable Format is the result of the different C-files when compiled and linked together. The.bit file contains the configuration of the hardware. Results By implementing a part of the Camus algorithm in hardware, the correlation criteria, we realized a reduction of 3.47 microseconds opposed to the software version without using cache. This reduction is partly undone by the numerous memory transfers we had to do for transferring the data from software to the hardware registers. When we enabled the cache of the PowerPC, the time needed to calculate the correlation criteria reduced to 0.23 microseconds. This is still more than the 0.03 microseconds needed to calculate the correlation criteria in hardware. But the memory transfers needed for the hardware version makes the hardware version slower when the cache is enabled. Conclusion We have done a thorough research and comparison of optical flow techniques based on accuracy and speed criteria. We have then chosen the ideal algorithm to implement on an embedded platform. This implementation of the chosen Camus algorithm was successful. We were able to calculate the optical flow and used different techniques to achieve a speed-up. We created our own intellectually property and used the available cache of the PowerPC to increase the speed of the algorithm. VII


13 Inhoudsopgave Woord vooraf Nederlands abstract English abstract Short Summary I III V 1 Inleiding Situering Optical flow Camus Embedded systeem Overzicht Optical Flow Wat is optical flow? Toepassingen van optical flow Problemen Optical flow berekenen Aanname Technieken Differentie technieken Correlatie technieken Energie gebaseerde technieken Fase gebaseerde technieken Conclusie IX

14 4 Optical flow technieken vergelijken Coëfficiënten Vergelijken Accuraatheid Snelheid Ruis Conclusie Het Camus algoritme Inleiding Camus correlatie Camus problemen Temporele aperture probleem Temporele aliasing Temporele oclussie Parallellisatie Conclusie Embedded systeem Inleiding op FPGA Logische Blokken Input/Output Blokken Interconnecties Virtex-5 Evaluation Platform ML507 bord Aansluitingen van de Virtex 5 ML Conclusie Embedded project Inleiding Overzicht Software implementatie PowerPC Software linking C-bestanden Hardware implementatie Configuratie van de FPGA Conclusie Resultaten en Conclusie Inleiding X

15 8.2 Gebruikte resources Resultaten Conclusie Bijlagen 75 A Paper Rome 75 B Embedded systeem overzicht 81 C Afbeeldingen 83 D C-Functies 85 XI

16 XII

17 Lijst van afkortingen UCF User Constraint File XPS Xilinx Platform Studio FPGA Field-Programmable Gate Array IOB Input/Output Block CLB Configurable Logic Block LUT Look-up Table ELF Executable and Linkable Format DCM Digital Clock Manager DLL Delay-Locked Loop FAT File Allocation Table PLB Processor Local Bus LED Light Emitting Diode BRAM Block Random-Access Memory UART Universal Asynchronous Receiver/Transmitter DDR2 SDRAM Double Data Rate Synchronous Dynamic Random-Access Memory XIII

18 CF CompactFlash VHDL VHSIC hardware description language VHSIC Very High Speed Integrated Circuit FSM Finite-state Machine OFCE Optical Flow Constraint Equation CPU Central Processing Unit ICC Instruction Cache Controller DCC Data Cache Controller IP Intellectual Property XMD Xilinx Microprocessor Debugger PC Personal Computer DMA Direct Memory Access SAD Sum of Absolute Differences SSD Sum of Squared Differences ACE Advanced Configuration Environment DIP Dual in-line Package XIV

19 Lijst van figuren 1.1 (a) Dode hoek van een vrachtwagen. (b) Dodehoekcamera Testbeelden van de dodehoekcamera Optical flow veld voor Yosemite sequentie Camus correlatie: zoektocht in tijd en ruimte Optical flow veld voor Yosemite sequentie Verschil tussen motion en optical flow veld Schijnbare beweging Aperture probleem [19] Correlatie methode [2] Energie gebaseerde techniek [25] Reichardt correlator [25] Square2 sequentie [4] Yosemite sequentie met motion veld [4] Relatieve performantie van elk algoritme voor een complexe sequentie [18] Resultaten voor accuraatheid van de hoek en grootte voor een reële sequentie [25] D performantie diagrammen [16] Invloed van ruis op prestaties [25] Zoekgebied voor een pixel A Rigide-body veronderstelling Kwadratische toename van het zoekoppervlak Visualisatie van de verplaatsing van Afbeelding t-1 naar Afbeelding t Visualisatie van de verplaatsing van Afbeelding t-2 naar Afbeelding t dimensionale zoektocht in zowel tijd als oppervlakte Temporele aperture probleem XV

20 5.9 Temporele aliasing Temporele occlusie Parallellisatie door middel van de afbeelding op te splitsen in kleinere stukken Architectuur van een FPGA Architectuur van logisch blok Architectuur van het Input/Output blok Architectuur van de switch box Virtex-5 Evaluation Platform ML507 bord (a)clb (b) Virtex-5 Slice Virtex-5 Block RAM Virtex-5 Blokdiagram High-level blokdiagram van het complete embedded project Het complete embedded project zoals voorgesteld in Xilinx Platform Studio (XPS) PLB bus verbindt de verschillende hardware componenten met elkaar Processor Local Bus (PLB) blok diagram Cache PowerPC 440 blok diagram Van C naar uitvoerbaar bestand Het gebruikte linkerscript Correlatie criteria wordt in hardware geïmplementeerd Blokdiagram van de gecreëerde correlatie hardware blok (a)register is 32 bit groot. (b) Hoe wij het register hebben ingevuld Finite-state machine (FSM) geïmplementeerd in hardware De tijd nodig voor de berekening van het correlatie criteria zonder cache De tijd nodig voor de berekening van het correlatie criteria met cache Grafische voorstelling van de gegevens in tabel 8.2 voor de software Grafische voorstelling van de gegevens in tabel 8.2voor de hardware Grafische voorstelling van de gegevens in tabel XVI

21 Lijst van tabellen 4.1 Resultaten voor Square2 [4] Resultaten voor Yosemite [4] Specificaties van de Xilinx Virtex 5 ML507 FX70T Configuratie mogelijkheden van een 36Kbit en een 18Kbit RAM De adressen van het embedded project (grootte in bytes) Verschillende secties van een programma Gebruikte resources van de FPGA Resultaten voor Camus uitgevoerd op de FPGA in seconden Vergelijking van PC versus FPGA in seconden XVII


23 Hoofdstuk 1 Inleiding Het doel van dit eindwerk bestaat uit 3 delen: een literatuurstudie naar optical flow technieken, het implementeren van een hieruit gekozen optical flow algoritme in een embedded systeem en het versnellen van dit algoritme d.m.v. een hardware implementatie. Het eerste doel bestaat uit een literatuurstudie in verband met optical flow. Wat optical flow is, welke technieken er zijn om optical flow te berekenen en een vergelijkende studie uit te voeren. Om op basis daarvan een algoritme te kiezen dat het beste resultaat zal opleveren wanneer het geïmplementeerd wordt in een FPGA. Dit laatste is dan de tweede doelstelling, het gekozen algoritme implementeren op een embedded platform. We hebben hiervoor het Xilinx Virtex 5 ML507 gekozen. De laatste doelstelling bestaat er dan in om het gekozen algoritme te versnellen door middel van een gedeeltelijke hardware implementatie. Dit hoofdstuk start met een situering van de masterproef in sectie 1.1 gevolgd door een korte introductie van optical flow in sectie 1.2. Het gekozen Camus algoritme wordt beschreven in sectie 1.3. In sectie 1.4 wordt het platform voorgesteld waarop we het optical flow algoritme implementeren en tot slot wordt er in sectie 1.5 een overzicht van de thesis gegeven. 1.1 Situering Deze masterproef is een onderdeel van een doctoraat dat wordt uitgevoerd aan de EAVISE onderzoeksgroep. Het doctoraat genaamd The active blind spot camera: hard real-time recognition of moving objects from a moving camera heeft als doel het verminderen van het aantal dodehoek ongevallen met vrachtwagens. Onderzoek toont aan dat er jaarlijks in de Europse Unie meer dan 1300 doden vallen door deze dode hoek ongevallen [1]. In dit doctoraat wordt onderzoek gedaan om automatisch in de dodehoekcamera beelden (figuur 1.1(a) en figuur 1.1(b)) zwakke weggebruikers te detecteren, en dan automatisch een alarm te genereren. Figuur 1.2 geeft een voorbeeld van zo n dodehoekcamera beelden. Bestaande dode hoek systemen, zoals de verplichte dodehoekspiegel, worden vaak niet of niet correct gebruikt. Actieve systemen, zoals bijvoorbeeld ultrasone detectoren, kunnen geen onder-

24 2 Inleiding Figuur 1.1: (a) Dode hoek van een vrachtwagen. (b) Dodehoekcamera bevestigd op een vrachtwagen. Figuur 1.2: Testbeelden van de dodehoekcamera. scheid maken tussen statische objecten en zwakke weggebruikers. Zij geven bijvoorbeeld ook een alarm wanneer er een verkeersbord in de dode hoek aanwezig is. Hierdoor kan het systeem vaak als storend worden ervaren en gaat de vrachtwagenbestuurder dit systeem eerder uitschakelen. In deze toepassing bewegen zowel de camera als de te detecteren objecten (de zwakke weggebruikers). Hierdoor hebben we een zeer dynamische achtergrond, en kunnen standaard technieken zoals background substraction niet gebruikt worden. Er is dus nood aan een meer geavanceerde techniek voor het segmenteren en detecteren van de zwakke weggebruikers. Een mogelijke manier is om gebruik te maken van independent motion segmentation, gebaseerd op optical flow. Motion segmentation gaat objecten segmenteren door gebruik te maken van het feit dat deze objecten een beweging vertonen die verschillende is van de beweging van de achtergrond. Om deze beweging te bepalen maken we gebruik van optical flow vectoren. Hiervoor hebben we een real-time optical flow implementatie nodig, dat in deze masterproef wordt uitgewerkt. 1.2 Optical flow Optical flow geeft de verplaatsing van elke pixel weer tussen 2 opeenvolgende frames door middel van een vector veld. In essentie geeft optical flow de projectie weer van de echte 3D beweging op een 2D afbeeldingsvlak. Een voorbeeld van een optical flow veld is voorgesteld in figuur 1.3. Een inleiding op optical flow

25 1.3 Camus 3 (a) (b) (c) Figuur 1.3: (a)en(b) zijn 2 frames uit de Yosemite sequentie. (c)optical flow veld voor (a)en(b) [4] is gegeven in hoofdstuk 2, gevolgd door een overzicht van de verschillende methodes om optical flow te berekenen in hoofdstuk 3. De bedoeling is de verschillende optical flow technieken met elkaar te vergelijken en op basis van deze vergelijking een geschikt algoritme te kiezen om te implementeren in hardware. Deze vergelijkende studie wordt uitgevoerd in hoofdstuk Camus Het Camus correlatie algoritme is in hoofdstuk 4 gekozen na de verschillende technieken vergeleken te hebben. Het Camus algoritme is een correlatie gebaseerd optical flow algoritme. Dit wil zeggen dat er een window, ook genaamd patch of mask, van een afbeelding op tijdstip t zal vergeleken worden met een window van een afbeelding op tijdstip t 1. Er wordt dus gekeken naar de waarde van de pixels in een window op 2 verschillende tijdstippen. Men gaat dan opzoek naar het window op tijdstip t 1 dat het best overeenkomt met het window op tijdstip t. Wat Camus hier aan toevoegd is dat er gezocht kan worden zowel in de ruimte als in de tijd, zoals voorgesteld in figuur 1.4. We gaan dus opzoek naar de beste overeenkomst tussen de windows in de tijd en in de ruimte. In hoofdstuk 5 wordt er dieper ingegaan op het Camus algoritme en wat mogelijke problemen zijn wanneer men dit implementeert in hardware. 1.4 Embedded systeem Een embedded systeem is een elektronisch systeem dat zowel hardware als een processor bevat. Het is een combinatie van configureerbare logische elementen, zoals een FPGA of CPLD, en een of meer hard- of softcoreprocessoren. Daarnaast heeft het embedded platform ook nog

26 4 Inleiding Figuur 1.4: Camus correlatie: zoektocht in tijd en ruimte. andere periferie zoals DDR2 SDRAM geheugen, CompactFlash slot en een UART connectie om communicatie te voorzien. Een FPGA bevat configureerbare logische componenten, ook wel logische blokken genoemd, en interconnecties die volledig configureerbaar zijn. Door middel van de juiste connecties te maken kunnen we de verschillende logische blokken met elkaar verbinden om zo specifieke taken te laten uitvoeren. Een uitgebreidere uitleg over FPGA s wordt geven in hoofdstuk Overzicht In hoofdstuk 2 wordt optical flow uitgelegd en verklaard wat mogelijke applicaties zijn. De verschillende technieken om optical flow te berekenen worden besproken in hoofdstuk 3 en de vergelijking van deze verschillende technieken is terug te vinden in hoofdstuk 4. De gekozen Camus correlatie techniek wordt in detail bekeken in hoofdstuk 5. In hoofdstuk 6 is het embedded systeem, de Virtex 5 ML507 besproken, en geven we een korte beschrijving over FPGA s in het algemeen. In hoofdstuk 7 wordt het totale embedded project besproken: zowel de software als de hardware kant van het ontwerp wordt uitgelegd. Tot slot worden in hoofdstuk 8 de resultaten besproken en een conclusie genomen.

27 Hoofdstuk 2 Optical Flow In dit hoofdstuk wordt een inleiding op optical flow gegeven. We beginnen met de definitie van optical flow in sectie 2.1 te geven. Verder wordt er in sectie 2.2 uitgelegd welke toepassingen er bestaan. Tot slot wordt in sectie 2.3 besproken welke problemen er kunnen opduiken bij het berekenen van optical flow. 2.1 Wat is optical flow? Optical flow geeft de verplaatsing van elke pixel weer tussen 2 opeenvolgende frames door middel van een vector veld. Optical flow creëert dus een 2D vector veld op basis van beweging van pixels tussen 2 frames. (a) (b) (c) Figuur 2.1: (a)en(b) zijn 2 frames uit de Yosemite sequentie. (c)optical flow veld voor (a)en(b) [4]

28 6 Optical Flow Figuur 2.1(a) en 2.1(b) zijn 2 frames van de Yosemite sequentie. Door middel van optical flow wordt nu een vector veld opgesteld, dat aangeeft waar elke pixel van figuur 2.1(a) naartoe is in figuur 2.1(b). Dit vector veld, het optical flow veld genaamd, wordt voorgesteld in 2.1(c). (a) (b) (c) Figuur 2.2: In (b)en(c) wordt respectievelijk het motion veld en het optical flow veld voorgesteld voor figuur (a) [21]. Het ultieme doel van optical flow is het benaderen van het echte motion veld. Het motion veld is een exacte voorstelling van een 3D beweging zoals het geprojecteerd is op een camera afbeelding. In ideale gevallen is het optical flow veld gelijk aan het motion veld, maar zoals we kunnen zien in figuur 2.2 is dit niet altijd correct. In figuur 2.2(a) wordt een barbierspaal tegenwijzerzin rond zijn as gedraaid. Deze beweging wordt voorgesteld in het motion veld (figuur 2.2(b)) door middel van vectoren die van links naar rechts wijzen, dit wil zeggen dat de pixels van links naar rechts zijn verplaatst. Het optical flow veld (figuur 2.2(c)) daarentegen geeft aan dat de pixels naar boven zijn verplaatst. De reden dat het optical flow veld en het motion veld niet gelijk zijn is omdat er een verschil is tussen een beweging en een schijnbare beweging. Als een object geen textuur heeft (egaal gekleurd is en een glad oppervlak heeft) zoals de rode bal in figuur 2.3, dan kunnen we geen accuraat optical flow veld opstellen. In figuur 2.3 links beweegt de rode bol rond zijn as. Er is dus een beweging waar te nemen, namelijk een rotatie, maar in het optical flow veld kunnen we deze beweging niet terug vinden. Optical flow kan dus alleen ogenschijnlijke beweging voorstelling, vandaar het verschil tussen het optical flow veld en het motion veld. In figuur 2.3 rechts beweegt de bol niet, maar de belichting verandert. De belichtingsbron beweegt, met als gevolg dat we in het optical flow veld een beweging terugvinden. We nemen aan dat het optical flow veld gelijk is aan het motion veld behalve in speciale gevallen [25]. 2.2 Toepassingen van optical flow Optical flow heeft een breed gamma aan toepassingen in de beeldverwerkende sector namelijk: object herkenning, segmentatie,.... Het creëren van het optical flow veld is meestal niet het

29 2.3 Problemen 7 Figuur 2.3: Schijnbare beweging eind doel. Optical flow wordt vaak gebruikt om een beweging uit een reeks van beelden te halen. Zoals in [11] waar men door middel van optical flow handbewegingen wil gaan herkennen. In [12] gaat men optical flow technieken gebruiken voor medische doeleinden, namelijk het herkennen van endocardial oppervlakken in 3D-structuren. Ook in deze masterproef is het berekenen van optical flow niet het einddoel, maar willen we gebruik gaan maken van optical flow om zwakke weggebruikers te detecteren in een reeks beelden. 2.3 Problemen In sectie 2.1 hebben we al aangehaald dat het optical flow veld niet voor elke situatie gelijk is aan het motion veld en hebben we in figuren 2.2 en 2.3 al enkele voorbeelden gegeven waarvoor er problemen kunnen optreden. Een ander vaak voorkomend probleem is het aperture probleem. In figuur 2.4(a) is een vlak met diagonale lijnen te zien door een opening (aperture). In figuur 2.4(b) is dit zelfde vlak verschoven naar links, over 5 pixels. In figuur 2.4(c) is dit zelfde vlak naar boven verschoven over een afstand van 6 pixels. Er is geen verschil op te merken tussen afbeeldingen 2.4 (a), (b) en (c) in de opening, nochtans heeft er in elke foto een andere beweging plaats gevonden, namelijk naar links of naar boven. We kunnen dus geen exacte beweging waarnemen ten gevolge van de opening. Het is dan ook onmogelijk om deze beweging terug te vinden in het optical flow veld, terwijl het motion veld dus wel een beweging bevat. Dit probleem heet het aperture probleem, waarbij wij geen accuraat optical flow veld kunnen opstellen ten gevolge van het feit dat we kijken door een opening (aperture) [25]. (a) Origineel (b) 5 pixels naar links (c) 6 pixels omhoog Figuur 2.4: Aperture probleem [19]

30 8 Optical Flow

31 Hoofdstuk 3 Optical flow berekenen Allereerst wordt er in sectie 3.1 de Optical flow constraint equation verklaart. In sectie 3.2 wordt een overzicht gegeven van de verschillende bestaande optical flow technieken en wordt er dieper ingegaan op het technisch aspect van elk type techniek. In sectie 3.3 bevindt zich de conclusie. 3.1 Aanname De meeste optical flow technieken starten met de aanname dat een pixel dezelfde intensiteitswaarde behoudt bij een beweging voor minstens een korte tijdsperiode. Hiermee wordt bedoeld dat de intensiteitswaarde van een pixel tussen 2 opeenvolgende frames niet verandert. Dit wordt als volgt uitgedrukt: I(x, y, t) = I(x + dx, y + dy, t + dt) (3.1) Vergelijking (3.1), geeft weer dat de pixel op plaats (x,y,t) intensiteit I(x, y, t) heeft. Wanneer we de intensiteit bekijken nadat we ze verplaatsen in zowel de x,y richting als in het t-domein krijgen we I(x + dx, y + dy, t + dt). Als we op vergelijking (3.1) de Taylor expansie uitvoeren en de hogere orde termen verwaarlozen, krijgen we de volgende vergelijking: I x u + I y v + I t = 0 (3.2) Waar (u, v) staat voor de optical flow vectoren ( dx dt, dy dt ) en I xu + I y v + I t de afgeleiden van intensiteit op coördinaat (x,y,t). Deze aanname wordt de optical flow constraint equation (OFCE) genoemd [5, 14, 25]. 3.2 Technieken Er zijn 2 mogelijke manieren om de verschillende technieken te groeperen. De eerste en de meest gebruikte indeling is beschreven door Barron et al.[4].

32 10 Optical flow berekenen Hier wordt gekozen om de technieken op te delen in de volgende 4 categorieën: 1. Differentie gebaseerde optical flow 2. Correlatie gebaseerde optical flow 3. Energie gebaseerde optical flow 4. Fase gebaseerde optical flow De tweede manier van groeperen, zoals voorgesteld door Lui et al.[16], is om ze op te delen in 2 groepen : gradiënt gebaseerde technieken en niet-gradiënt gebaseerde technieken. Ongeacht welke manier van groeperen bestaan de algoritmes allemaal uit de volgende 3 stappen: De spatiotemporele procedures die worden toegepast op de beelden om features te extraheren. De manier waarop de beweging wordt geschat aan de hand van de geëxtraheerde features. De manier waarop het flowveld wordt aangepast aan de hand van zekerheidsschattingen. We zullen in de rest van deze masterproef gebruik maken van de Barron et al. indeling [4] Differentie technieken Differentie gebaseerde technieken zijn gebaseerd op afgeleiden. Meer specifiek gaat het over partiële afgeleiden van de intensiteit I over x en y en in de tijd t. Differentie technieken zijn op zich nog eens opgesplitst in de volgende categorieën: lokale, globale en gecombineerde lokale en globale technieken. Lokale technieken, zoals Lucas & Kanade [17], proberen een lokale energie expressie te maximaliseren. Globale technieken, zoals de Horn Schunck methode [14], proberen een globale energie expressie te minimaliseren. Differentie technieken hebben nood aan smoothing. De reden hiervoor is dat de gradiënt (de eerste afgeleide) gevoelig is voor ruis. Door middel van een smoothing kunnen we de hoog frequente stukken (ruis) eruit halen. Er is ook nog opsplitsing tussen 1ste orde en 2de orde differentie technieken. Voorbeelden van de 2de orde differentie technieken zijn: Uras et al.[27] en Nagel. Een groot nadeel is dat 2de orde differentie technieken nog gevoeliger zijn voor ruis dan 1ste orde differentie technieken [10, 25].

33 3.2 Technieken 11 Lokale differentie technieken maken gebruik van vergelijking (3.2) die we kunnen omvormen tot vergelijking (3.3) I x u + I y v = I t (3.3) Deze vergelijking kunnen we niet oplossen doordat er teveel onbekenden zijn. Maar door gebruik van de ruimtelijke coherentie assumptie krijgen we meer vergelijkingen. De ruimtelijke coherentie assumptie zegt dat we veronderstellen dat buurpixels in een beeld dezelfde snelheid hebben. Dus kunnen we vergelijking (3.3) ook toepassen op zijn buurpunten. I x1 u + I y1 v = I t1 I x2 u + I y2 v = I t2 I x(p) u + I y(p) v = I t(p) (3.4). I xn u + I yn v = I tn Waar n staat voor het aantal buurpixels en waar p de pixels binnen het window voorstellen. Met deze vergelijking zeggen we dus dat de omgeving van de pixel (de neighborhood, het window) een translatie beweging (u,v) uitvoert. De grootte van dit window is zelf te kiezen. Nu kunnen we deze set van vergelijkingen oplossen met de Least squares (LS), Total least squares (TLS) of nog recenter de Constrainted total least squares (CTLS) methode [26]. In het voorbeeld hieronder is gebruik gemaakt van de Least squares methode. ( ) u u = = (S T S) 1 S T ( T ) (3.4) v Waarin S staat voor en S = I x (x 1, y 1 ) I y (x 1, y 1 ) I x (x 2, y 2 ) I y (x 2, y 2 ).. I x (x N, y N ) I y (x N, y N ) (3.5) T = I t (x 1, y 1 ) I t (x 2, y 2 ). I t (x N, y N ) (3.6) Met N de windowgrootte en : I x = I x, I y = I y, I t = I t. De Lucas & Kanade [17] techniek wordt berekend op elke pixel en de vergelijkingen die we kunnen opstellen kunnen we uitbreiden door gebruik te maken van buurpixels, zo krijgen we meer vergelijkingen [5, 25].

34 12 Optical flow berekenen Globale differentie technieken zoals de Horn Schunck methode [14], maken ook gebruik van de intensiteits constante besproken in 3.1, maar hebben nog nood aan een extra smoothness beperking. Deze auteurs verwachten dat de flow geleidelijk varieert over het beeld. Ze baseren zich hier op het feit dat buurpixels dezelfde snelheden hebben als ze tot hetzelfde object behoren. Dit levert natuurlijk problemen op bij objecten die over elkaar bewegen (occlusie). De methode van Horn-Schunck wordt best opgelost op een iteratieve methode. Allereerst kunnen we deze beperking, de smoothness constraint, weergeven door het kwadraat van de grootte van de gradiënt van de flow snelheid te minimaliseren. gedefinieerd: De gradiënt over u en v wordt als volgt ( u x )2 + ( u y )2 (3.6) ( v x )2 + ( v y )2 (3.6) Een andere manier van smoothness van het flowveld is de som van de kwadraten van de Laplacianen van x en y-componenten van de flow. De Laplacianen van u en v zijn als volgt voorgesteld: 2 u = 2 u x u y 2 (3.6) 2 v = 2 v x v y 2 (3.6) Voor het schatten van de afgeleiden I x, I y, I t is een kleine filter gebruikt. I x 1 4 (I i,j+1,k I i,j,k + I i+1,j+1,k I i+1,j,k + I i,j+1,k+1 I i,j,k+1 + I i+1,j+1,k+1 I i+1,j,k+1 ) I y 1 4 (I i+1,j,k I i,j,k + I i+1,j+1,k I i+1,j,k+1 + Ii + 1, j, k + 1 I i,j,k+1 + I i+1,j+1,k+1 I i+1,j,k+1 ) I t 1 4 (I i,j,k+1 i i,j,k + I i+1,j,k+1 I i+1,j,k + I i,j+1,k+1 I i,j+1,k + I i+1,j+1,k+1 I i+1,j+1,k ) Merk op dat deze filters driedimensionaal zijn. Om de Laplacianen van u en v te schatten wordt gebruik gemaakt van de volgende benadering: 2 u κ(u i,j,k u i,j,k ) (3.2) 2 v κ(v i,j,k v i,j,k ) (3.2)

35 3.2 Technieken 13 Waar de lokale gemiddelden u i,j,k en v i,j,k verkregen zijn door de volgende matrix voor de verticale en horizontale snelheidscomponenten te gebruiken: 1/12 1/6 1/12 Average = 1/6 0 1/6 (3.2) 1/12 1/6 1/12 Verder is κ gelijk aan 3 wanneer gebruik wordt gemaakt van de kleine filters voor het schatten van de afgeleide. κ wordt gebruikt om alles in proportie te krijgen. Nu moeten de schending van de intensiteit beperking en de smoothness beperking zo klein mogelijk worden gehouden. Of wel moeten de volgende 2 foutmaten worden geminimaliseerd: ε i = I x u + I y v + I t (3.2) ε 2 c = ( u x )2 + ( u y )2 + ( v x )2 + ( v y )2 Nu moet bepaald worden hoe deze twee factoren zich tot elkaar verhouden. Door onder andere ruis kan niet verwacht worden dat ε i gelijk is aan 0. In de praktijk lijkt de ε i ongeveer proportioneel te zijn aan de ruis. Laat daarom α 2 de wegingsfactor zijn. De totale fout die nu geminimaliseerd moet worden is: ε 2 = (α 2 ε 2 c + ε 2 i ) dxdy (3.1) Voor een goede minimalisatie moeten er geschikte waarden voor de flow snelheid (u, v) worden gevonden. Volgens Horn-Schunk [14] komen we dan, met variatierekenen, tot vergelijkingen en 3.2.1: Ixu 2 + I x I y v = α 2 2 u I x I t (3.1) I x I y u + I 2 y v = α 2 2 v I y I t (3.1) Met de benaderingen van de Laplacianen die we behandeld hebben in vergelijkingen en krijgen we : (α 2 + I 2 x)u + I x I y v = (α 2 u I x I t ) (3.1) Wanneer we nu u en v proberen op te lossen krijgen we : I x I y u + (α 2 + I 2 x)v = (α 2 v I y I t ) (3.1) (α 2 + I 2 x + I 2 y )u = (α 2 + I 2 y )u I x I y v I x I t ) (3.1)

36 14 Optical flow berekenen Welke ook kan beschreven worden door : (α 2 + I 2 x + I 2 y )v = I x I y u + (α 2 + I 2 x)v I y I t ) (3.1) (α 2 + I 2 x + I 2 y )(u u) = I x (I x u + I y v + I t ) (3.1) (α 2 + Ix 2 + Iy 2 )(v v) = I y (I x u + I y v + I t ) (3.1) Wanneer we α 2 gelijk aan nul laten zijn dan kunnen we een oplossing verkrijgen voor het minimalisatie probleem. Wanneer de Lagrange multipliers methode wordt toegepast wordt voor het minimaliseren van ε 2 c terwijl ε i = 0 dan krijgen we : I y 2 u = I x 2 v (3.1) I x u + I y v + I t = 0 (3.1) Wanneer we de Laplaciaan schatten door het verschil in snelheid op een punt en de gemiddelde snelheid van zijn buurpunten dan krijgen we : (Ix 2 + Iy 2 )(u u) = I x (I x u + I y v + I t ) (3.1) (Ix 2 + Iy 2 )(v v) = I y (I x u + I y v + I t ) (3.1) We hebben nu 2 vergelijkingen voor elk punt van het beeld. We kunnen de vergelijkingen oplossen door bijvoorbeeld een Gauss-Jordan eliminatie. Voor een beeld van n n pixels betekent dit een matrix van 2n 2n. Daarom is het beter een iteratieve oplossing toe te passen. Met een Gauss - Seidel methode kunnen we een nieuwe schatting van de snelheden (u n+1, v n+1 ) maken op basis van de afgeleiden en gemiddelden van de vorige geschatte snelheden (u n, v n ). We krijgen nu : u n+1 = u n I x (I x u n + I y v n + I t )/(α 2 + I 2 x + I 2 y ) (3.1) v n+1 = v n I y (I x u n + I y v n + I t )/(α 2 + Ix 2 + Iy 2 ) (3.1) Sommige punten liggen buiten de figuur en moeten opgevuld worden met waarden die op de rand liggen. De beginwaarden voor u en v zijn 0. In de gebieden waar de gradiënt gelijk aan 0 is, wordt de geschatte snelheid het gemiddelde van de buurpunten. Grote uniforme gebieden waar de gradiënt dus nul is, worden na voldoende iteraties helemaal opgevuld met schattingen van de flow snelheid [14, 25].

37 3.2 Technieken 15 Gecombineerde globale en lokale differentie methoden (GLC) [8] proberen de voordelen van de lokale en globale differentie technieken samen te nemen. Globale technieken hebben als nadeel dat ze meer gevoelig zijn voor ruis dan lokale technieken, maar het voordeel is dat ze een fijnere flow veld produceren dan lokale technieken. De Horn-Schunck [14] energie functie voorgesteld in vergelijking 3.2.1: met E LK = w J ρ ( 3 f)w (3.1) w := (u, v, 1), w 2 := u 2 + v 2, (3.2) 3 f := (f x, f y, f t ), J ρ ( 3 f) := K ρ ( 3 f 3 f ) (3.3) uitgebreid met de energie functie van Lucas & Kanade [17] weergegeven in vergelijking 3.2.1: E HS (w) = (w J 0 ( 3 f)w + α w 2 ) dxdy (3.3) Ω Levert de energie functie voor de CLG - methode, voorgesteld in vergelijking : E CLG = (w J ρ ( 3 f)w + α w 2 ) dxdy (3.3) Ω Correlatie technieken Correlatie technieken worden ingedeeld bij de niet - gradiënt gebaseerde technieken, zoals al eerder werd aangehaald in sectie 3.2, door Lui et al.[16]. Een correlatie techniek is eenvoudig voorgesteld het vergelijken van een window van frame 1 met een window van frame 2. Dit is voorgesteld in figuur 3.1. Er zijn dus 2 frames afgebeeld waarbij het grijsvlak in de figuur het Figuur 3.1: Correlatie methode [2] window voorstelt. Deze methode gaat dus rond elke pixel van frame 1 een window leggen. In het volgende frame kijken we waar het window van frame 1 de beste overeenkomsten heeft. De beste overeenkomst wordt dan bepaald door een correlatie criteria.

38 16 Optical flow berekenen Er zijn 2 belangrijke parameters bij correlatie algoritmen: 1. de grootte van het window 2. de range : de grootte van de verplaatsing die kan voorkomen Enkele voorbeelden van een correlatie criteria zijn de SSD (Sum of Squared Differences) en SAD (Sum of Absolute Differences) : SSD - Sum of squared Differences k k d(p1, p2) = (I 1 (x 1 + i, y 1 + j) I 2 (x 2 + i, y 2 + j)) 2 (3.3) j= k i= k SAD - Sum of Absolute Differences k k d(p1, p2) = I 1 (x 1 + i, y 1 + j) I 2 (x 2 + i, y 2 + j (3.3) j= k i= k met k de grootte van het window. p1 = (x 1, y 1 ) is het midden van window in Image 1 p2 = (x 2, y 2 ) is het midden van window in Image 2 Optical flow algoritmes gebaseerd op correlatie technieken zijn gemakkelijk te implementeren en hebben een gunstige tijdscomplexiteit. Het nadeel van deze technieken is dat ze meestal niet zo nauwkeurig zijn. De meest bekende voorbeelden van correlatie technieken zijn die van Anadan, Singh en Camus [25] Energie gebaseerde technieken Een beweging kan worden gekarakteriseerd door zijn oriëntatie in het ruimte-tijd domein. Figuur 3.2 (A) stelt een vlak voor dat van links naar rechts beweegt. Daar voegen we dan ook nog een as voor de tijd bij en dan krijgen we een ruimte-tijd volume 3.2 (B). Als we nu dit volume doorsnijden loodrecht op de y-as dan krijgen we figuur 3.2 (C). De helling die de balk hier maakt is gelijk aan de horizontale snelheid van het vlak in 3.2 (A). Voor dit soort bewegingen in het ruimte-tijd domein kun je een spatiotemporele filter oriënteren zodat deze de beweging kan detecteren. Deze filters zijn in te stellen voor bepaalde frequenties. Wanneer een filter een frequentie waarneemt waarvoor hij gevoelig is dan geeft deze filter een hoge output. De output, of ook wel energie, van deze filters kan dan gebruikt worden voor het schatten van het optical flow veld. Doordat de berekende optical flow afhankelijk is van de energie die de filters afgeven, worden technieken gebaseerd op deze filters energiegebaseerde technieken genoemd. Doordat de filters gevoelig zijn voor bepaalde frequenties is frequentie

39 3.2 Technieken 17 Figuur 3.2: In A beweegt een vlak naar rechts. In B staat hetzelfde vlak afgebeeld maar nu inclusief de tijd. In C staat een doorsnede van het ruimte-tijd volume in B [25]. gebaseerde technieken ook een gebruikte aanduiding. Een voorbeeld van een energiegebaseerde techniek is voorgesteld in de volgende sectie [22, 25]. Reichardt correlator Een eenvoudige instantie van een Reichardt correlator is te zien in figuur 3.3(a). De input van een visueel systeem kan gezien worden als een intensiteitsignaal dat veranderd als functie van tijd en plaats. De twee input plaatsen A en B corresponderen met twee punten op het retina vlak. Wanneer nu een object van links naar rechts beweegt dan passeert deze eerst punt A en daarna B. Wanneer nu het signaal dat binnenkomt op A met de juiste mate vertraagt wordt dan zal het corresponderen met het signaal dat binnenkomt op B. (a) (b) (c) Figuur 3.3: Elementaire bewegingsdetector (a) reageert op bewegingen van A naar B. Elementaire bewegingsdetector (b) reageert op bewegingen van B naar A. Van bewegingsdetector 1 en 2 is het mogelijk een Reichardt detector te maken (c). De Reichardt detector reageert met een positieve output op beweging van A naar B en met een negatieve output op beweging van B naar A [25]. Een Reichardt correlator bestaat uit twee elementaire bewegingsdetectoren (figuur 3.3(a) en figuur 3.3(b)). Het ene deel zal over het algemeen reageren op beweging van links naar rechts en het andere deel op beweging in de tegenovergestelde richting. De reactie van de ene elementaire detector wordt van de andere afgetrokken (figuur 3.3(c)). Hierdoor reageert een Reichardt detector met een positieve waarde op beweging naar links en met negatieve waarde op beweging naar rechts. Hoewel het model een adequate bewegingsdetector is, is het geen goede snelheidsmeter. De output van het model is helaas niet lineair met de snelheid van een voorbij bewegende structuur. Onder andere de intensiteit en vorm van de voorbij bewegende patronen hebben in-

40 18 Optical flow berekenen vloed op de output. Kortom de output van de correlator geeft een onzuivere schatting van de bewegingssnelheid [25] Fase gebaseerde technieken Fase gebaseerde technieken maken gebruik van spatiotemporele filters net zoals energiegebaseerde technieken. De video wordt allereerst omgezet in aantal band-pass kanalen. Dit kan gedaan worden door een bank quadrature filters. De resulterende bandpass beelden kunnen worden gerepresenteerd in termen van amplitude en fase. Het voordeel is dat de fase min of meer stabiel blijft wanneer de intensiteit verandert tussen twee frames. Andere technieken adopteren meestal de intensiteitconstantheid assumptie, zie 3.1, en zijn hierdoor minder stabiel bij intensiteitsveranderingen. Maar als grootste nadeel hebben ze dat ze een zeer slechte tijdscomplexiteit hebben, waardoor ze niet geschikt zijn om real-time te worden gebruikt [22, 24, 25]. 3.3 Conclusie In dit hoofdstuk zijn de verschillende technieken besproken waarmee men optical flow kan berekenen. De verschillende technieken zijn : differentie, correlatie, energie en fase gebaseerd optical flow technieken. Uit dit overzicht is gebleken dat correlatie en differentie gebaseerde technieken het best geschikt zijn om te implementeren. In het volgende hoofdstuk zullen deze technieken worden vergeleken met elkaar op basis van verschillende criteria om zo de beste techniek te selecteren en te implementeren.

41 Hoofdstuk 4 Optical flow technieken vergelijken In dit hoofdstuk worden de verschillende optical flow technieken met elkaar vergeleken. Dit wordt gedaan aan de hand van resultaten die behaald zijn in vorige studies, namelijk in Barron et al.[4], McCane et al.[18] en Lui et al.[16]. In Barron et al. wordt een vergelijkende studie gemaakt van verschillende optical flow technieken op basis van de parameter E A, die besproken is in vergelijking 4.1. McCane et al. gaat dan verder op deze studie door de gebruikte coëfficiënt te bekritiseren en door zijn eigen testen uit te voeren met nog een extra coëfficiënt, namelijk de E M, besproken in vergelijking 4.1. Deze twee studies zijn besproken in sectie Lui et al., in sectie 4.2.2, focused meer op de computationele eisen die een techniek stelt aan de hardware. Eerst wordt er in sectie 4.1 dieper in gegaan op de coëfficiënten die gebruikt zullen worden in de studies uitgevoerd door Barron et al., McCane et al. en Lui et al. 4.1 Coëfficiënten Optical flow algoritmen hebben elk hun voor- en nadelen. Er kunnen verschillen optreden in accuraatheid, dichtheid (density) en computationele eigenschappen. De coëfficiënten die gebruikt worden om de kwaliteiten van een algoritme weer te geven voor een bepaalde beeld zijn E A en E M. We gaan zowel gebruik maken van de hoek als de grootte van de vector in de vergelijkende tests, met als reden dat de E A coëfficiënt meermaals bekritiseert is, onder andere door Otte and Nagel [20], omdat het geen correcte weergave geeft bij grote vectoren. Daarom hebben zij gekozen om een andere coëfficiënt te introduceren, namelijk de E M. Het verschil in hoek wordt als volgt gedefinieerd : E A = cos 1 (ĉ.ê) (4.0) waar E A de fout van de hoek voorstelt, c is de correcte hoek en e de geschatte hoek. Hetˆteken staat voor vector normalisatie. Om problemen te vermijden die ontstaan tengevolge van kleine flow vectoren wordt een klein getal δ = 1 bij de vectoren c en e opgeteld als een derde coördinaat. Het effect van deze derde coördinaat heeft meer invloed op kleine dan op grote flow vectoren.

42 20 Optical flow technieken vergelijken Dit wil zeggen dat deze toevoeging als effect heeft dat bij een kleine flow de fout kleiner wordt, dus dat een verschil in hoek bij een grote flow erger is dan een verschil in hoek bij een kleine flow. Voor flows met een grootte die kleiner is of gelijk aan de δ, wordt het hoekverschil verlaagd door de derde coördinaat, waar dat het hoekverschil bij grote flows niet wordt aangepast. Dit zorgt ervoor dat een verkeerde hoek in een gebied met grote flow belangrijker is dan in een gebied met kleine flow. De tweede coëfficiënt, geïntroduceerd door Otte and Nagel [20], is de E M, wat staat voor het verschil in grootte van de berekende vector en werkelijke vector. Zoals in vergelijking 4.1 staan c en e weer voor de correcte en de geschatte vector. c e c if c T, E M = e T T if c < T and e T, (4.0) 0 if c < T and e < T, Ook bij deze parameter moet er rekening gehouden worden met kleine flow, hiervoor introduceert men een drempelwaarde T. Wanneer de werkelijke flow kleiner is dan T dan gaan we er vanuit dat we geen correcte waarde kunnen berekenen voor dat punt [25, 18]. 4.2 Vergelijken In deze sectie gaan we de verschillende optical flow technieken met elkaar vergelijken op basis van accuraatheid, snelheid en weerstand tegen ruis Accuraatheid In deze sectie gaan we de resultaten behaalt in Barron et al.[4] en in McCane et al.[18] bespreken. Zij gaan de optical flow technieken enkel vergelijken op basis van accuraatheid. Het verschil tussen beide studies is dat McCane et al. gebruik maakt van een extra coëfficiënt om te vergelijken. Eerst gaan we de resultaten bespreken van de test uitgevoerd door Barron et al. gevolgd door die van McCane et al. Barron et al.[4] maakt gebruik van een sequentie genaamd Square2 en een sequentie genaamd Yosemite. In figuur 4.1 is de Square2 sequentie voorgesteld. Dit is een simpele test case, terwijl de Yosemite sequentie voorgesteld in figuur 4.2 een veel moeilijkere opdracht is. Op deze beelden is dan van elke categorie, besproken in hoofdstuk 3.2, minstens 1 techniek toegepast en de resultaten worden dan weergegeven (in tabel 4.1 en tabel 4.2) en besproken. Na deze resultaten bekeken te hebben kunnen we enkele conclusies trekken. Namelijk dat er een duidelijke onderverdeling is tussen algoritmen die een goede accuraatheid, een kleine

43 4.2 Vergelijken 21 Figuur 4.1: Square2 sequentie[4] Figuur 4.2: Yosemite sequentie met motion veld [4] Tabel 4.1: Resultaten voor Square2 [4] Techniek Gemiddelde fout Standaard deviatie densiteit Horn-Schunck % Lucas & Kanade (λ 2 1.0) % Uras et al. (det(h) > 1.0 ) % Nagel % Anadan (unthresholded) % Singh (Step 1, n = 2, w = 2) % Heegher (combined) % Waxman et al. (σ f = 1.5) % Fleet and Jepson ( τ = 1.25) % gemiddelde fout, behalen of een goede densiteit hebben. We merken ook op dat er een verschil is tussen de lokale en de globale differentie technieken. Zoals we kunnen zien in tabel 4.1 en tabel 4.2 levert de globale techniek van Horn-Schunck een fijn flow veld op maar ook een grote gemiddelde fout. Terwijl de lokale techniek van Lucas & Kanade goede resultaten oplevert op gebied van de gemiddelde fout, maar geen fijn flow veld produceert. Een tweede vaststelling is dat de 2de orde differentie technieken, van Nagel en van Uras et al., beter resultaten opleveren dan de 1ste orde differentie technieken. Maar deze verbetering is maar gering. Als we dan verder gaan kijken in de tabel komen we de correlatie technieken van Anadan en Singh tegen waarbij we opmerken dat ze grote gemiddelde fouten opleveren, maar een fijn flow veld. De waarden van de

44 22 Optical flow technieken vergelijken Tabel 4.2: Resultaten voor Yosemite [4] Techniek Gemiddelde fout Standaard deviatie densiteit Horn-Schunck % Lucas & Kanade (λ 2 1.0) % Uras et al. (det(h) > 1.0 ) % Nagel % Anadan % Singh (Step 1, n = 2, w = % Heegher (combined) % Waxman et al. (σ f = 2.0) % Fleet and Jepson ( τ = 1.25) % correlatie technieken liggen in dezelfde grootte orde als die van de globale differentie technieken. De energie techniek van Heeger levert grote gemiddelde fouten af en een slecht fijn veld. De fase techniek van Fleet en Jepson daarentegen levert goede resultaten af voor het Square2 beeld, maar niet voor het Yosemite beeld. De reden hiervoor is dat de tuning frequentie moest worden aangepast, met het gevolg dat deze dichter tegen de Nyquist rate ligt. We merken dus op dat de fase gebaseerde techniek van Fleet and Jepson goede resultaten oplevert. Ook de 1ste orde differentie leveren goede prestaties af [4]. McCane et al. [18] maakt ook zoals Barron et al gebruik van de E A, de hoek fout, maar maakt ook nog gebruik van een extra coëfficiënt om de resultaten te meten. Namelijk de E M, de fout in grootte van de vector, uitgelegd in sectie 4.1, vergelijking 4.1. In figuur 4.3 zien we de resultaten van de test uitgevoerd door McCane et al. In figuur 4.3(a) wordt de resultaten voor E A weergegeven en in figuur 4.3(b) de resultaten voor E M. Op de y-as is het cumulatief percentage voor flows kleiner dan de error weergegeven en op de x-as de grootte van de error (in figuur 4.3(a) in stappen van 18 graden en in figuur 4.3(b) in stappen van 0.2). Dit wil dus zeggen dat, in figuur 4.3(a), het Proesman et al. algoritme 75 procent van zijn flows een hoekfout hebben van 18 graden of minder. De ideale curve is dus diegene die het meest bovenaan gelegen is en voor elke error waarde. H.Top [25] heeft gebruik gemaakt van de techniek die voorgesteld is door McCane et al. om de optical flow technieken te vergelijken. H.Top heeft dan testen uitgevoerd op een reële sequentie en kwam tot de resultaten die weergegeven zijn in figuur 4.4. Deze 2 grafieken laten de accuraatheid in de hoek van de flowvectoren zien en de accuraatheid van de grootte van de flowvectoren. In de bovenste grafiek staat op de verticale as het percentage van juiste schattingen. Op de horizontale as de maximale fout in de hoek van de flowvectoren. Als we bijvoorbeeld naar de maximale hoekfout van 10 graden kijken, in figuur 4.4, dan zien we dat bij de Reichardt correlator 87

45 4.2 Vergelijken 23 procent van de geschatte flowvectoren een fout van 10 graden of minder hebben. De energie gebaseerde technieken presteren hier het best gevolgd door de correlatie technieken. (a) Hoek accuraatheid. (b) Grootte accuraatheid. Figuur 4.3: Relatieve performantie van elk algoritme voor een complexe sequentie[18] Snelheid Lui et al.[16] heeft onderzoek gedaan naar zowel de accuraatheid als de snelheid van de optical flow technieken. Lui et al. heeft deze dan weergegeven in zogenaamde AE-curves (Accuracy- Efficiency curves). Waarin de CPU Time, die nodig is om de techniek uit te voeren, op de y-as staat en de hoek fout op de x-as. Figuur 4.5(a) is zo n AE-curve voor de Yosemite sequentie en figuur 4.5(b) is een AE-curve voor de Diverging Trees sequentie. Ook uit deze grafiek kunnen we veel informatie halen, namelijk het feit dat de 2de orde differentie technieken (Nagel en Uras et al.) betere resultaten opleveren dan 1ste orde differentie technieken, maar dat ze hogere computationele eisen stellen. We zien ook dat de energie - en fasegebaseerde

46 24 Optical flow technieken vergelijken Figuur 4.4: Resultaten voor accuraatheid van de hoek en de grootte voor een reële sequentie [25]. technieken de beste resultaten opleveren, maar een zeer slechte tijdscomplexiteit hebben. In sectie en in hebben we uitgelegd dat energie- en fasegebaseerde technieken gebruik maken van spatiotemporele filters. Dit zorgt ervoor dat ze zeer rekenintensief zijn. We kunnen ook concluderen dat de techniek die het beste presteert op zowel accuraatheid en snelheid, de Camus correlatie techniek is [3, 4, 6, 10, 13, 15, 16] Ruis We kunnen de optical flow technieken ook gaan vergelijken op basis van hun ruisgevoeligheid. In figuur 4.6 zijn de E A en E M weergegeven voor 4 verschillende optical flow technieken wanneer er ruis is toegevoegd aan de sequentie. Deze twee grafieken laten de accuraatheid in de hoek van de flowvectoren zien en de accuraatheid van de grootte van de flowvectoren. In de bovenste grafiek staat op de verticale as het percentage van juiste schattingen. Op de horizontale as de maximale fout in de hoek van de flowvectoren. Opvallend zijn de prestaties van de energie gebaseerde methode en de correlatie gebaseerde methode op de video met ruis. Vooral onder deze omstandigheid presteren deze algoritmen beter dan de anderen. Dit kan er op duiden dat deze algoritmen interessant zijn voor gebruik onder moeilijke omstandigheden. Het lokale differentie gebaseerde algoritme van Lucas & Kanade presteert opvallend slecht op de video met ruis. Hierdoor is het algoritme wellicht een mindere keuze onder moeilijke omstandigheden. Ook de globale techniek van Horn-Schunck levert geen al te beste resultaten af bij toevoeging van ruis [3, 4, 6, 10, 13, 15, 16].

47 4.3 Conclusie 25 (a) 2-D performantie diagram voor de Yosemite sequentie [16] (b) 2-D performantie diagram voor de Diverging Trees sequentie [16] Figuur 4.5: 2-D performantie diagrammen [16] 4.3 Conclusie De fase- en energiegebaseerde technieken komen in alle tests naar voor als het algoritme dat het beste resultaat oplevert in zowel accuraatheid van de hoek als in grootte. Het nadeel van deze fase- en energiegebaseerde technieken is dat ze computationeel hoge eisen stellen. Dit wil zeggen dat ze veel rekentijd nodig hebben en daarom niet worden gebruikt in real-time toepassingen. De lokale en globale differentie technieken leveren geen totaal oplossing. Namelijk de lokale technieken zijn robuuster tegen ruis, leveren geen te grote fouten af maar hun flow veld is niet fijn. Globale technieken zijn het tegenovergestelde van lokale technieken, ze geven een goed fijn flow veld (100%) maar geven slechtere prestaties bij ruis en grote hoek fouten. Een nadeel bij differentie technieken in het algemeen is dat ze liefst hebben dat de intensiteit niet veranderd. Correlatie technieken zijn beter geschikt om met ruis te werken, omdat ze geen afgeleiden moeten berekenen. Correlatie technieken zijn uit het computationele standpunt gezien lichter dan de

48 26 Optical flow technieken vergelijken Figuur 4.6: Invloed van ruis op prestaties [25] differentie gebaseerde algoritme of natuurlijk de fase- en energie gebaseerde algoritme. Het besluit is dat als we een real-time implementatie willen die robuust is tegen ruis en een goede accuraatheid heeft, we dan een correlatie techniek moeten gebruiken. Op basis van deze eerste vier hoofdstukken hebben we een reflection paper ingediend voor IADIS Computer Graphics, Visualization, Computer Vision and Image Processing (CGVCVIP) conferentie. Deze paper is terug te vinden in de bijlage A. De paper gaf een overzicht van de verschillende optical flow technieken en gaf een vergelijking op basis van verschillende criteria. De reflection paper is geaccepteerd door CGVCVIP en er zal een presentatie worden gegeven tijdens deze conferentie.

49 Hoofdstuk 5 Het Camus algoritme In dit hoofdstuk wordt er dieper in gegaan op het Camus correlatie algoritme. Dit hoofdstuk begint met sectie 5.1 waarin een uitgebreidere uitleg wordt gegeven over correlatie technieken in het algemeen, gevolgd door een bespreking van het Camus algoritme zelf in sectie 5.2, waarin er wordt uitgelegd hoe het werkt en wat de eigenschappen zijn. Daarna worden er in sectie 5.3 de problemen besproken die eventueel kunnen optreden bij het gebruik van het Camus algoritme. In sectie 5.4 worden de parallellisatie mogelijkheden besproken. Tot slot is er nog een conclusie in sectie Inleiding Zoals eerder vermeld, in hoofdstuk 2, is optical flow het weergeven van de verplaatsing van een pixel tussen 2 opeenvolgende frames door middel van een vector. Dit is voorgesteld in figuur 5.1, waar pixel A verplaatst is over een afstand van 2 pixels naar rechts onder in Afbeelding 2 ten opzichte van Afbeelding 1. In deze sectie gaan we nu dieper in op de werkwijze van correlatie gebaseerde technieken om optical flow te berekenen. We beginnen met te veronderstellen dat de maximale verplaatsing van elke pixel gelimiteerd is tot n in elke richting, in figuur 5.1 is deze maximale verplaatsing n gelijk aan 2. Deze waarde van n moet gekozen worden op basis van de verwachte snelheid waarmee de pixels zich zullen verplaatsen in de afbeelding. Omdat we meestal geïnteresseerd zijn in de verplaatsing van rigide-body object, dus niet van individuele pixels, maar van objecten bestaand uit aaneengesloten pixels kunnen we veronderstellen dat elke pixel van zulke rigide-body objecten dezelfde snelheid zal hebben als zijn omgeving. Er wordt dan gebruik gemaakt van een vierkante neighborhood, ook wel window, mask of patch genoemd, met een grootte van v rond de gegeven pixel, hierbij veronderstellen we dat de vectoren voor de pixels gelegen aan de gekozen pixel gelijk aan mekaar zijn, zoals voorgesteld in figuur 5.2. De beweging van een pixel op plaats [x, y] is gedefinieerd als de beweging van het v v window

50 28 Het Camus algoritme (a) (b) Figuur 5.1: (a) In Afbeelding 1 is het zoekgebied weergegeven voor pixel A met een maximale verplaatsing n van 2 pixels. (b) De correcte verplaatsing van de pixel van Afbeelding1 naar Afbeelding 2 is weergegeven door de vector AB. (a) (b) Figuur 5.2: (a) In Afbeelding 1 is het window weergegeven voor een pixel A, v=3. (b) De vectoren voor pixels gelegen aan pixel A worden verondersteld gelijk te zijn ten gevolge van de rigide-body veronderstelling.

51 5.2 Camus correlatie 29 gecentreerd in [x, y] van mogelijk (2n + 1) (2n + 1) mogelijk verplaatsingen. We bepalen de juiste verplaatsing van het window door middel van simulatie van elke mogelijke verplaatsing van [x, y] en door middel van match strength of correlatie waarde te bepalen voor elke mogelijke verplaatsing. Als dan φ een correlatie functie voorstelt die een waarde teruggeeft die proportioneel is aan de overeenkomst gevonden tussen 2 elementen van het window, dan is de match strength M (x,y;u,w) voor een punt [x, y] en verplaatsing (u, w) berekend door de som te nemen van elke correlatie waarde voor elke pixel in het verplaatste window P v, dit is weergegeven in vergelijking 5.1 u, w : M(x, y; u, w) = φ(e1(i, j)) E2(i + u, j + w)), (i, j) P v. (5.0) Een voorbeeld van zo n matching functie φ is het verschil in absolute waarde nemen tussen de twee pixel intensiteiten. Dit is voorgesteld in vergelijking 5.1. Een ander voorbeeld is het gebruik maken van het gekwadrateerd verschil van de intensiteitswaarde, voorgesteld in vergelijking 5.1. k k d(p1, p2) = (I 1 (x 1 + i, y 1 + j) I 2 (x 2 + i, y 2 + j)) 2 (5.0) j= k i= k k k d(p1, p2) = I 1 (x 1 + i, y 1 + j) I 2 (x 2 + i, y 2 + j (5.0) j= k i= k De vuistregel bij deze correlatie functies is dat hoe lager deze waarde is hoe beter de overeenkomst is. De opmerking die we hier moeten bij maken is dat de verplaatsing die we toewijzen aan die pixel [x, y] gekozen is uit (2n + 1) (2n + 1) mogelijke verplaatsingen waarbij dat we kijken naar de maximum correlatie waarde (dus eigenlijk het minimum verschil tussen de windows). Dit is genaamd een winner-take-all algoritme, omdat er wordt gekeken naar de beste overeenkomst tussen windows en niet op basis van een individuele pixel. Dit wordt dan uitgevoerd voor elke pixel in de afbeelding, onafhankelijk van de andere pixels met enkel een uitzondering voor de n + [v/2] rand van de afbeelding omdat er daar geen pixels meer zijn. Een voordeel van het feit dat dit op elke pixel van de afbeelding wordt uitgevoerd is dat het window voor een pixel grotendeels overlapt met het window van de aanliggende pixel met het gevolg dat het resulterend optical flow veld relatief smooth is. Een ander voordeel is dat er daardoor voor elke pixel een vector gemaakt wordt en dus dat de densiteit van het optical flow veld gelijk is aan 100 procent. 5.2 Camus correlatie De belangrijkste limitatie van traditionele correlatie technieken is dat tijdscomplexiteit kwadratisch toeneemt met de maximum toegelaten verplaatsing van de pixel, dit is voorgesteld in figuur

52 30 Het Camus algoritme Figuur 5.3: Zoekgebied voor een maximale verplaatsing van 1 pixel en van 2 pixels Intuïtief weten we dat als de snelheid toeneemt van het waar te nemen object, dit wil zeggen dat de maximum toegelaten verplaatsing van de pixel toeneemt, de tijd nodig om te zoeken naar de juiste beweging kwadratisch toeneemt, omdat het gebied waarover we moeten zoeken gelijk is aan cirkel gecentreerd op de pixel met een straal gelijk aan de maximum snelheid die we willen detecteren. Dit wordt verduidelijkt door middel van figuur 5.3 waarin het zoekgebied wordt voorgesteld voor een maximale verplaatsing van 1 pixel en voor 2 pixels. (a) Constante tijdsvertraging, variabele afstand. (b) Constante afstand, variabele tijdsvertragingen Figuur 5.4: Als de maximum toegelaten verplaatsing toeneemt dan neemt het zoekoppervlak kwadratisch toe, maar wanneer we gebruik maken constante maximum verplaatsing en variabele tijdsvertragingen is zoeken in de tijd lineair. In vergelijking 5.2 wordt het verband weergeven tussen snelheid, tijd en afstand. Normaal wordt er bij een correlatie methode gezocht over variabele afstanden om te zoeken naar variërende snelheden en blijft de tijd constant, zoals voorgesteld in vergelijking 5.2. Met het gevolg, zoals we kunnen zien in figuur 5.4(a), dat het te onderzoeken oppervlak kwadratisch toeneemt. snelheid = afstand tijd (5.0)

53 5.2 Camus correlatie 31 v = d δt (5.0) Wat Camus dan voortelt is in plaats van de afstand aan te passen waarover we zoeken, we het tijdsframe aanpassen, dit is weergegeven in figuur 5.4(b) en in vergelijking 5.2. Dus het zoekgebied in oppervlak, aantal pixel, is nu een constante waarde geworden bijvoorbeeld 1 pixel. v = δd t (5.0) Zoals hiervoor al vermeld is de gekozen verplaatsing gelijk aan de verplaatsing die de kleinste match waarde heeft. In de figuren 5.5 en 5.6 wordt dit verduidelijkt aan de hand van een voorbeeld. Hier wordt er geprobeerd om de optical flow voor een pixel op de plaats (1,1) in de huidige frame, Afbeelding t, te berekenen. In figuur 5.5 is de optimale optical flow voor de pixel op de plaats (1,1) van Afbeelding t 1 naar Afbeelding t berekend als een pixel verplaatsing van (1,-1). Dit is enkel de tijdelijke lokale metingen, dit is niet noodzakelijk de beste verplaatsing. In figuur 5.6 zijn dezelfde berekeningen uitgevoerd alleen is Afbeelding t 2 gebruikt als eerste afbeelding. In dit geval is de juiste verplaatsing gelijk aan pixel verplaatsing van (0,1) over 2 frames. Als de maximum tijdsvertraging gelijk is aan S = 2 dan zou dit het einde betekenen voor deze procedure anders moet er verder worden gewerkt tot dat we de t S naar t hebben berekend. De beste verplaatsingen is gekozen uit alle tijdelijke lokale metingen. Figuur 5.5: Visualisatie van de verplaatsing van Afbeelding t-1: (1,1) naar t: (2,0). De verplaatsing is hier gelijk aan (1,-1). In figuur 5.7 is dan een overzicht weergegeven van het principe dat schuil gaat achter het Camus algoritme. De normale 1-dimensionale zoektocht in oppervlakte, de maximale verplaatsing is nu omgezet in een 2-dimensionale zoektocht in zowel de tijd als in oppervlakte.

54 32 Het Camus algoritme Figuur 5.6: Visualisatie van de verplaatsing van Afbeelding t-2: (1,1) naar t: (1,2). De verplaatsing is hier gelijk aan (0,1) over 2 frames. Figuur 5.7: De normale 1-dimensionale zoektocht in oppervlakte is omgezet naar een 2-dimensionale zoektocht in zowel tijd als oppervlakte.

55 5.3 Camus problemen Camus problemen In deze sectie worden de problemen besproken die kunnen optreden wanneer men het Camus algoritme gebruikt om optical flow te berekenen Temporele aperture probleem In sectie 2.3 is het Aperture Probleem al besproken geweest. In deze sectie wordt het temporele aperture probleem besproken. In figuur 5.8 wordt een kromme getransleerd naar rechts onder. We veronderstellen een goede overeenkomst te vinden tussen punt A op tijdstip T en punt B op tijdstip T 2, maar er wordt nog een tweede goede overeenkomst gevonden. Deze tweede goede overeenkomst is tussen punt A op tijdstip T en punt C op tijdstip T 1. Globaal gezien is de tweede overeenkomst niet correct, maar de verplaatsing is onafhankelijk berekend op elk tijdstip en deze foutieve beweging heeft een goede overeenkomst. We hebben gezien dat het Aperture Probleem opdook bij het gebruiken van een te kleine opening. Het temporele aperture probleem is dan het gevolg van een te klein tijdsopening. Door middel van een grotere tijdsopening te gebruiken kan dit probleem vermeden worden. Figuur 5.8: Temporele aperture probleem. De correcte verplaatsing is gelijk aan B A,maar wanneer de opening(window) in de tijd te klein is kan een verkeerde beweging C A gedetecteerd worden Temporele aliasing In de vorige sectie hebben we gezegd dat we het temporele aperture probleem konden oplossen door onze tijdsopening groter te maken. Dit zal meestal lukken, maar er zijn uitzonderingen. Stel voor dat pixel A naar pixel B transleert en dan naar pixel C, dit kan het geval zijn wanneer het object een scherpe bocht uitvoert, dit is voorgesteld in figuur 5.9. Het kan bijvoorbeeld zijn dat A C een betere match oplevert dan B C en we volgden de regel dat de beste match wint. Dus we zouden verkeerd de A C als de correcte verplaatsing aanduiden. Een voor de hand liggende keuze is aannemen dat de snelste beweging de beste is. In dit voorbeeld werkt dit, maar er zijn speciale gevallen waarbij dit misloopt. Deze regel van de

56 34 Het Camus algoritme snelste beweging is de juiste loopt vooral verkeerd wanneer er gebruik wordt gemaakt van een δt = 20 frames. Figuur 5.9: Temporele aliasing Temporele oclussie Temporele occlusie ontstaat wanneer een object een ander object afschermt in een frame in het verleden, maar niet meer in de huidige frame. Een voorbeeld van temporele occlusie is weergegeven in figuur In frame T, van figuur 5.10, is een traag bewegende achtergrond aanwezig en deze achtergrond is niet afgeschermd door een ander object op dit tijdstip, maar als we 5 frames terug in de tijd gaan zien we dat de traag bewegende achtergrond word afgeschermd door een sneller bewegend object. Als we dan de correlatie willen berekenen voor een pixel van de traag bewegende achtergrond in het huidige frame T en in het frame T 5 dan zullen we een foute waarde terug krijgen ten gevolge van het feit dat de achtergrond wordt afgeschermd door een ander object in het verleden. De correlatie berekenen tussen het huidige frame T en het vorige frame T 1 voor de snel bewegende voorgrond zal een betere correlatie waarde teruggeven. Met het gevolg dat voor deze pixel de beweging van de snelle voorgrond wordt gegeven in plaats van de juiste beweging van de traag bewegende achtergrond. Dit zorgt ervoor dat snel bewegende objecten op de voorgrond een soort van nasleep krijgen, zodat objecten op de voorgrond groter zullen tonen dan ze in echt zijn. 5.4 Parallellisatie Het Camus correlatie algoritme wordt uitgevoerd op elke pixel van het beeld, maar onafhankelijk van elkaar. Dit wil zeggen dat we geen informatie moeten hebben van de vorige berekening om

57 5.5 Conclusie 35 Figuur 5.10: Temporele occlusie de volgende berekening uit te voeren. Een mogelijkheid om aan parallellisatie te doen is om de figuur op te splitsen in stukken om zo tijdswinst te boeken. Dit is voorgesteld in figuur Dit wil zeggen dat we pixel-per-pixel apart kunnen berekenen. Figuur 5.11: Parallellisatie door middel van de afbeelding op te splitsen in kleinere stukken. 5.5 Conclusie In dit hoofdstuk is er dieper ingegaan op correlatie gebaseerde optical flow technieken, zodat men een beter inzicht krijgt in de redenen waarom er gekozen is voor het Camus correlatie algoritme. Verder werd er in dit hoofdstuk in detail ingegaan op de werkwijze van het Camus correlatie algoritme en welke problemen er kunnen voorkomen als men dit implementeert. Tot slot is de mogelijkheid tot parallellisatie besproken [9, 10].

58 36 Het Camus algoritme

59 Hoofdstuk 6 Embedded systeem Na het uitleggen van de werking van het Camus algoritme wordt er in dit hoofdstuk meer informatie gegeven over het gebruikte embedded platform. Het gebruikte embedded platform is de Xilinx Virtex 5 ML507, voorgesteld in figuur 6.5. Dit hoofdstuk begint met een korte introductie op FPGA s. Hoe ze werken en gebruikt kunnen worden en hoe hun architectuur eruit ziet, gevolgd door de specificaties van het Xilinx Virtex 5 ML507 bord. 6.1 Inleiding op FPGA FPGA staat voor Field Programmable Gate Array en is een geïntegreerde schakeling bestaande uit configureerbare digitale componenten. De gebruiker kan zijn eigen hardware systeem creëren en downloaden naar de FPGA. Deze configureerbare digitale componenten kunnen gezien worden als bouwblokken die verbonden kunnen worden met elkaar om zo digitale systemen te creëren. Een FPGA bestaat uit 3 verschillende bouwstenen: 1. Logische Blokken 2. Input/Output Blokken 3. Programmeerbare Interconnecties Een simpel voorbeeld van de architectuur van een FPGA is voorgesteld in figuur 6.1. De 3 belangrijkste elementen (I/O blokken, Logische blokken, Interconnecties) van figuur 6.1 worden besproken in de volgende secties van dit hoofdstuk Logische Blokken Een FPGA kan gezien worden als een aaneenschakeling van configureerbare logische blokken. Deze logische blokken kunnen door de gebruiker geprogrammeerd worden om eenvoudige logische functies te maken, of meer complexe functies te creëren.

60 38 Embedded systeem Figuur 6.1: Architectuur van een FPGA Elk logisch blok, voorgesteld in figuur 6.2, bestaat uit een look-up table (LUT) en een flip-flop. Een lookup table is een data structuur, zoals een array, in welke we de juiste waarde moeten opzoeken door het corresponderende adres te gebruiken. Door waarden in te vullen op bepaalde adressen kunnen we functies creëren. Een flip-flop kan gebruikt worden om een resultaat te stockeren voor een clock cycle of het resultaat kan rechtstreeks naar buiten gebracht worden. Gebruik makend van deze eenvoudige architectuur kunnen de meeste logische functies gecreëerd worden. Figuur 6.2: Architectuur van logisch blok Input/Output Blokken Een FPGA maakt gebruik van zijn input en output pinnen/verbindingen voor interactie te voorzien met de externe wereld. De connectie van interne hardware met de externe hardware is beschreven in de UCF (User Constraint File). De externe componenten zijn verbonden met de pinnen die kunnen opgezocht worden in de hardware handleiding. Een voorbeeld van een Input/Output blok is weergegeven in figuur 6.3. De I1 en I2 zijn ingangen en Out is de uitgang. Ingang 1 en 2 brengen signalen van buiten de FPGA naar binnen. Zoals we ook kunnen zien in de figuur 6.3 zijn er nog enkele andere mogelijkheden zoals het vertragen van de ingangssignalen

61 6.1 Inleiding op FPGA 39 door middel van een delay en ook de mogelijkheid om de uitgangssignalen te inverteren is aanwezig. Figuur 6.3: Architectuur van het Input/Output blok Interconnecties Een belangrijk element van de FPGA is de interconnectie of ook wel de routing genoemd. Deze routing dient om logische blokken te verbinden tot grotere circuits om aan de vereiste functionaliteit te voldoen. De routing in een FPGA is unsegmented. Dit wil zeggen dat om meerder logische blokken met elkaar te verbinden men moet gebruik maken van een switch box, voorgesteld in figuur 6.4. Door middel van het sluiten van enkele programmeerbare schakelaars in de switch box kan men meerdere logische blokken met mekaar verbinden en langere connecties kunnen gemaakt worden om complexere functies te creëren. Hoe eenvoudiger en hoe korter de verbinding is, hoe beter de performantie is. Figuur 6.4: Architectuur van de switch box

62 40 Embedded systeem 6.2 Virtex-5 Evaluation Platform ML507 bord Het platform dat we gebruiken is het Xilinx Virtex-5 Evaluation Platform ML507 bord. Dit platform wordt voorgesteld in figuur 6.5 Figuur 6.5: Virtex-5 Evaluation Platform ML507 bord Dit platform bestaat uit high performance FPGA die een PowerPC bevat en andere randapparatuur. Specificaties van dit bord worden weergegeven in tabel 6.1. Hieronder is een overzicht weergegeven van de elementen die we nader gaan bespreken: 1. Logische Blokken 2. Block RAM 3. Digital Clock Manager

63 6.2 Virtex-5 Evaluation Platform ML507 bord 41 Tabel 6.1: Specificaties van de Xilinx Virtex 5 ML507 FX70T Logische Blokken LUTs/Flip Flop LUT RAM Kbits Kbit BRAM Blokken 148 BRAM Kbits XtremeDSP DSP48E Slices 128 PowerPC 440 Blocks 1 PCI Express Endpoint Blocks 3 10/100/1000 Ethernet MACS 4 Configureerbare logische blokken De configureerbare logische blokken zijn, zoals eerder vermeld, programmeerbare logica die geconfigureerd/geprogrammeerd kan worden door de gebruiker om zo hardware ontwerpen te maken. Nadat een specifiek ontwerp gemaakt is moet het geïmplementeerd worden op de FPGA. Dit ontwerp wordt gecompileerd en gesynthetiseerd in een bit file. Deze bit file bepaalt welke verbindingen er moeten gemaakt worden om ontwerp te realiseren en is gestockeerd in het RAM geheugen. De CLB is zoals eerder vermeld opgebouwd uit 2 slices, deze 2 slices zijn dan verbonden met elkaar via een switch matrix. In figuur 6.6(a) wordt deze switch matrix voorgesteld. Door middel van deze switch matrix zijn de slices verbonden met de globale routing matrix. Een Virtex 5 configureerbaar logisch blok bestaat uit 2 slices, waarin elke slice vier 6 LUT s en 4 Flip-Flops heeft. Een slice van de virtex 5 is voorgesteld in figuur 6.6(b). In de slice zitten ook nog grote multiplexers en logische poorten. (a) (b) Figuur 6.6: (a)clb (b)virtex-5 Slice

64 42 Embedded systeem Block RAM Elke block RAM is een 36Kbit true dual-port RAM s wat betekent dat er 2 verschillende poorten zijn die elk onafhankelijk van elkaar worden geklokt en gecontroleerd, en beiden hebben toegang tot hetzelfde gedeelde geheugen. In figuur 6.7 is zo n block RAM voorgesteld en zien we dan ook de 2 individuele poorten met elk dezelfde ingangen : Write Enable, Set/Reset, Data Input, Data Output, Address, Cascade Input, Cascade Output als ook gescheiden Data/parity ingangen en Data/parity uitgangen. De lees en schrijf bewerkingen zijn synchrone bewerkingen. Elke 36Kbit block RAM kan geconfigureerd worden als een 36Kb RAM of 2 onafhankelijke 18Kb RAM s. De mogelijke configuratie zijn weergegeven in tabel 6.2. Tabel 6.2: Configuratie mogelijkheden van een 36Kbit en een 18Kbit RAM 32K x 1 16K x 1 16K x 2 8K x 2 8K x 4 4K x 4 4K x 9 2K x 9 2K x 18 1K x 18 1K x 36 Figuur 6.7: Virtex-5 Block RAM

65 6.3 Aansluitingen van de Virtex 5 ML Digital Clock Manager De Virtex 5 ML507 heeft ook functionaliteit om aan klok beheersing te doen. Dit wordt mogelijk gemaakt door de Digital Clock Manager (DCM). De functies die worden aangeboden door de Digital Clock Manager worden hieronder weergegeven. Clock Deskew De DCM bevat een delay-locked loop (DLL) om klok distributie vertraging te elimineren. De DLL bevat vertragingselementen (kleine buffers) en controle logica. Frequency Synthesis De uitgang CLKDV voorziet de FPGA van een uitgang die een specifieke deel van de ingangsfrequentie is door middel van delingen en vermenigvuldigen. De gebruiker kan de integer vermenigvuldiger (M) en deling (D) gebruiken om een fractie te creëren van het ingangssignaal. Ook zijn er 2 uitgangen CLK2X en CLK2X180 die werken op de dubbele frequentie. Phase Shifting De DCM laat toe om aan coarse phase shifting te doen. De uitgangs klok kan in fase verschoven zijn over 90, 180, 270. DCM voorziet ook de mogelijkheid om aan fine-grained phase shifting te doen, dit is het aanpassen van de fase in stappen van 1/256 van de klok periode. 6.3 Aansluitingen van de Virtex 5 ML507 De Xilinx Virtex 5 heeft groot aantal aansluit mogelijkheden voor randapparatuur. Deze aansluitingen worden voorgesteld in een blok diagram in figuur 6.8. De randapparatuur die we gebruiken worden nu besproken. Voeding en configuratie Het Xilinx Virtex 5 bord wordt gevoed door 5V. Deze spanning wordt verlaagd naar 1.0V, 1.8V en andere om zo de randapparatuur te voeden. Voor de configuratie van de Xilinx Virtex 5 zijn er verschillende mogelijkheden. De FPGA kan geconfigureerd worden van een CompactFlash kaart of door middel van USB platform kabel. Om te kiezen welke configuratie moet uitgevoerd worden bij het opstarten van de FPGA moeten we gebruik maken van DIP switches. In hoofdstuk 7.5 wordt nader bekeken hoe wij de FPGA configureerde. System RAM Het Xilinx Virtex 5 ML507 bord bevat een connector om DDR2 SDRAM geheugen aan te sluiten op het bord. Het bord ondersteunt geheugens tot een grootte van 512 MB. Op ons bord was een capaciteit aanwezig van 256MB, dit is nodig om aan beeldverwerking

66 44 Embedded systeem te doen. Het interne RAM geheugen is te klein om de beelden op te slaan, daarom moet er extra geheugen voorzien zijn. CompactFlash Controller De System ACE CompactFlash controller maakt gebruik van een FAT16 bestandsysteem en alleen 1 gereserveerd sector is toegelaten. Het FAT16 systeem ondersteunt partities tot een grootte van 2GB. Het xilinx.sys bestand moet aanwezig zijn in de root-directory. Het xilinx.sys bestand wordt gebruikt door de System ACE CompactFlash controller om de project structuur te definiëren. Deze structuur is opgebouwd uit een hoofd map die 8 sub-folders bevat. In elk van deze 8 sub folders kan men een.ace bestand opslaan. Deze ace bestanden zullen nader worden verklaard in hoofdstuk 7.5 waarin dat we configuratie van de FPGA bespreken. Andere mappen mogen ook aanwezig zijn op de CompactFlash kaart, maar de root directory mag niet meer dan 16 mappen en/of bestanden bevatten. Figuur 6.8: Virtex-5 Blokdiagram

67 6.4 Conclusie 45 Seriële poorten Op het Xilinx Virtex 5 ML507 bord zijn er 3 seriële poorten. Er zijn 2 PS/2 poorten en een RS-232 poort. De 2 PS/2 poorten worden gebruikt om een toetsenbord en muis aan te sluiten. Deze worden allebei gevoed door de 5V die wordt aangeboden door de voeding. De RS-232 poort wordt gebruikt voor de communicatie van seriële data met een ander apparaat. Wij hebben gebruik gemaakt van deze seriële poort om communicatie te voorzien met de host computer, om zo debug informatie te verkrijgen. Een 9-pin seriële kabel geconnecteerd met een COM poort is nodig om de verbinding op te zetten. 6.4 Conclusie In dit hoofdstuk hebben we uitgelegd wat een FPGA is en hoe het gebruikt kan worden om krachtige software-hardware ontwerpen te realiseren. Het bord, de Xilinx Virtex 5 ML507, dat we gebruikt hebben om dit eindwerk te kunnen realiseren, is ook in detail besproken [7, 33].

68 46 Embedded systeem

69 Hoofdstuk 7 Embedded project 7.1 Inleiding In dit hoofdstuk wordt een overzicht gegeven van de implementatie van het Camus algoritme op het embedded systeem, namelijk de Virtex 5 ML507. In hoofdstuk 5 is het Camus algoritme uitgelegd gevolgd door een beschrijving van het embedded systeem in hoofdstuk 6. Nu wordt er in meer detail uitgelegd hoe het Camus algoritme geïmplementeerd is en welke software en hardware blokken er gebruikt zijn om dit te realiseren. Eerst wordt er een algemeen overzicht gegeven van het embedded project door middel van een high-level blok diagram gevolgd door een voorstelling van het embedded project aan de hand van de gebruikte Xilinx Platform Studio software, in sectie 7.2. Daarna wordt de software implementatie in sectie 7.3 besproken gevolgd door de hardware implementatie in sectie 7.4. In sectie 7.5 wordt de configuratie van de FPGA besproken en tot slot is er nog een conclusie in sectie Overzicht Eerst wordt er een overzicht gegeven van het totaal embedded project aan de hand van een highlevel blok diagram dat weergegeven is in figuur 7.1. Daarna wordt de implementatie beschreven er aan de hand van de gebruikte XPS software en gaan we dieper in op de Processor Local Bus (PLB). Het high-level blok diagram geeft een vereenvoudigd overzicht van totale project aan de hand van blokken. Elk blok stelt een stap voor van het totale proces. In het eerste blok worden de foto s van de CompactFlash kaart naar het DDR2 SDRAM geheugen gekopieerd. Dit wordt gedaan aan de hand van voorgedefineerde C-functies van Xilinx [28]. Daarna begint het eigenlijke werk van het Camus algoritme. Dit blok is dan weer opgebouwd uit meerdere kleinere blokken. In deze kleinere blokken wordt een vereenvoudigde voorstelling gedaan van de nodige operatie om het Camus algoritme uit te voeren. Dit bestaat er in om windows te creëren, gevolgd door

70 48 Embedded project op deze windows een correlatie criteria uit te voeren, zoals bijvoorbeeld de Sum of Absolute Differences. Dit correlatie criteria zal er dan voor zorgen dat de beste overeenkomst wordt gekozen en dat voor deze overeenkomst de bijhorende vectoren zullen gemaakt worden. Tot slot wordt dit eindresultaat weggeschreven naar CompactFlash kaart. Figuur 7.1: High-level blokdiagram van het complete embedded project. Na deze voorstelling als een high-level blok diagram gaan we over naar de werkelijke implementatie gebruik makende van XPS. Het totaal embedded project bestaat uit meerdere onderdelen. Een overzicht van de gebruikte onderdelen is weergegeven in figuur 7.2, dit is het totaal embedded project zoals het voorgesteld is door de XPS. We zien in het overzicht dat er een PowerPC aanwezig is en als geheugen elementen zijn er BlockRAM en DDR2 SDRAM aanwezig. Andere hardware blokken zijn de CompactFlash kaart om gegevens extern op te slaan en voor de configuratie van de FPGA, de RS-232 UART om te voorzien in communicatie van het embedded systeem met de host PC. Vervolgens zijn er ook nog andere onderdelen zoals de LED s, DIP switches en de push buttons. Een belangrijk hardware element is correlatie, dit is de hardware blok die die we zelf hebben ontworpen. Dit correlatie blok is beschreven in sectie 7.4. Al deze hardware blokken zijn verbonden met elkaar via de PLB bus, voorgesteld in figuur 7.3. Elke hardware blok dat verbonden is met deze bus is ofwel een master of slave. Wanneer een hardware blok een master is kan deze lezen en schrijven van en naar de bus op specifieke plaatsen. De adressen van de hardware blokken zijn instelbaar. In tabel 7.1 zijn de adressen weergegeven van de hardware blokken die gebruikt zijn in ons project.

71 7.2 Overzicht 49 Figuur 7.2: Het complete embedded project zoals voorgesteld in Xilinx Platform Studio (XPS). Figuur 7.3: PLB bus verbindt de verschillende hardware componenten met elkaar.

72 50 Embedded project Tabel 7.1: De adressen van het embedded project (grootte in bytes) Module Connectie Basisadres Eindadres Grootte DDR2 SDRAM PLB 0x x0FFFFFF 256M Push buttons PLB 0x x8140FFF 64K DIP switches PLB 0x x8142FFF 64K SysACE CompactFlash PLB 0x x8360FFF 64K RS-232 UART PLB 0x x8400FFF 64K Correlatie PLB 0xC xC720FFF 64K BRAM 1 PLB 0xFFFFE000 0xFFFFFFF 8K Processor Local Bus Zoals eerder vermeld is, en weergegeven is in figuur 7.2, wordt er gebruik gemaakt van de Processor Local Bus (PLB) om de verschillende blokken met elkaar te verbinden. De PLB bus maakt gebruik van 32 bit adressen en 128 bits voor de data. In figuur 7.5 wordt een blokdiagram voorgesteld van de PLB bus. De PLB bus is in staat om tot 16 master devices te beheren. Belangrijke elementen van de PLB bus zijn het Address path, Write data path, Read data en de Bus Control Unit. De Bus Control Unit zorgt voor de arbitratie en data flow van de PLB bus. De arbitratie van de PLB bus is op twee manieren in te stellen: de eerste methode maakt gebruikt van vaste prioriteiten die worden toegekend aan de randapparatuur en de tweede methode maakt gebruikt van een Round Robin arbitratie. De PLB bus werking en timing is zeer uitgebreid beschreven in [32]. Figuur 7.4: Processor Local Bus (PLB) blok diagram.

73 7.3 Software implementatie Software implementatie In deze sectie bespreken we de PowerPC en hoe de bronbestanden wordt gecompileerd en gelinkt tot een uitvoerbaar bestand dat we kunnen uitvoeren op het embedded platform. Eerst beginnen we met cache operaties van de PowerPC te bespreken, daarna wordt er dieper ingegaan op de compilatie en linking van de bronbestanden en tot slot worden de door ons geschreven C- bestanden kort besproken PowerPC De PowerPC die aanwezig is op de Xilinx ML507 is een PowerPC440 die draait op 400MHz. Figuur 7.6 is een blok diagram van de PowerPC440 met zijn belangrijkste elementen. In deze figuur zien we ook de verbinding van de PowerPC met de eerder besproken 128 bit PLB bus. De manier waarop de PowerPC aan cache beheer doet is ook zichtbaar in deze figuur, namelijk een aparte cache voor data en voor instructies. Door gebruik te maken van deze cache zullen er minder referenties naar het geheugen zijn en dit zal er voor zorgen dat er een versnelling wordt gerealiseerd. Cache is eigenlijk een zeer snel en klein geheugen waarin de laatst gebruikte data en/of instructies worden opgeslagen en bevindt zich tussen de CPU en het geheugen, dit is voorgesteld in figuur 7.5. Het opslaan van de laatst gebruikte instructie of data is in veel gevallen nuttig want deze gegevens worden meestal meerdere malen door de CPU opgevraagd, een voorbeeld hiervan is een for-lus. Door gebruik te maken van cache moet de CPU de gegevens niet van extern geheugen halen maar kan hij ze rechtstreeks terug vinden in het snelle geheugen en wordt er een versnelling gerealiseerd. Figuur 7.5: Cache De werking van cache is als volgt: als de CPU data of instructies nodig heeft controleert hij eerst of deze aanwezig zijn in de cache, als deze aanwezig zijn in de cache gebruikt de CPU deze. Deze situatie noemen we een hit. Wanneer de gevraagde gegevens niet in de cache aanwezig zijn noemen we het miss. In deze situatie moet de CPU de gegevens van extern geheugen gaan halen en zal hij deze gegevens in de cache plaatsen om zo de volgende keer als hij deze gegevens nodig heeft hij een hit zal hebben. De PowerPC 440 heeft een Instruction Cache Controller (ICC) een Data Cache Controller (DCC) maken beiden gebruik van 32-byte lines en zijn allebei 64-way set-associative. Een

74 52 Embedded project set-asscociative cache is een compromis tussen een volledige associatieve cache en een direct mapped cache. Een direct mapped cache is een cache waarbij elke geheugen blok een vaste plaats heeft. Volledige associatieve cache is het tegenovergestelded van direct mapped cache hierbij kan een geheugen blok op elke plaats worden opgeslagen. Xilinx voorziet de gebruiker van functies waarmee de beide caches kunnen gecontroleerd worden, namelijk: void XCache EnableDCache ( unsigned int regions ); void XCache DisableDCache ( void ) ; void XCache FlushDCacheLine(unsigned int adr) ; void XCache StoreDCacheLine(unsigned int adr) ; void XCache EnableICache(unsigned int regions ); void XCache DisableICache ( void ) ; Meer informatie omtrent deze functies kan gevonden worden in [29, 30, 31]. Figuur 7.6: PowerPC 440 blok diagram

75 7.3 Software implementatie Software linking In deze sectie wordt uitgelegd hoe een uitvoerbaar bestand dat naar de FPGA kan worden gedownload is opgebouwd uit verschillende bron bestanden. De software is geschreven in de programmeertaal C. Deze C bestanden moeten gecompileerd worden voor het embedded systeem. Hierbij moet rekening gehouden worden met geheugen indeling van het embedded systeem. Elk C programma gebruikt meerdere secties. In tabel 7.2 zijn enkele van de belangrijke sectie van het C programma opgesomd, besproken en wordt er een voorbeeld gegeven in C-code. Tabel 7.2: Verschillende secties van een programma Sectie Beschrijving Voorbeeld (in C-code).text Tekst sectie i += 1;.data Data sectie (lezen/schrijven) int i[4] = 1, 2, 3, 4;.sdata Kleine data sectie (lezen/schrijven).rodata Read-Only sectie const int j = 6;.bss Niet-geïnitialiseerde data sectie int k;.sbss Kleine niet-geïnitialiseerde data sectie Deze C bestanden moeten dus worden omgezet in een uitvoerbaar bestand voor uitvoering in het embedded systeem. In figuur 7.7 is een overzicht weergegeven van welke stappen er nodig zijn om van een C-bronbestand naar een executable bestand te gaan. De eerste stap is dat de C- bronbestanden (.c bestanden) worden gecompileerd tot objecten (.o bestanden). Deze objecten worden dan samengevoegd tot een object door de linker en dan wordt er een uitvoerbaar bestand (.elf bestand) gemaakt. De linker maakt gebruik van een linker script dat aangeeft waar elke sectie van het C-programma, zoals degene voorgesteld in tabel 7.2, moet geplaatst worden in het fysieke geheugen. Door middel van het linker script kan er dus aangegeven worden waar elke sectie moet worden opgeslagen zoals in het externe DDR2 SDRAM geheugen of de interne BlockRAM. Bepaalde secties zoals de.sdata en de.sbss moeten een aangesloten geheugenruimte hebben. De.boot sectie bepaalt waar het programma begint in het geheugen. In figuur 7.8 is een stuk van het gebruikte linkerscript weergegeven C-bestanden In deze sectie wordt het software gedeelte van de implementatie besproken. Het volledige project bestaat uit meerdere C-bestanden die dan worden samengevoegd zoals besproken in sectie De verschillende C-bestanden die geschreven zijn als volgt: main.c: Dit is het hoofdprogramma waarin alle andere functies worden opgeroepen

76 54 Embedded project Figuur 7.7: Van C naar uitvoerbaar bestand. inlees routine.c: naar het geheugen te schrijven. Dit bestand bevat de functie om de foto van de CompactFlash kaart Camus.c: Dit bestand bevat de functies om het Camus algortime te berekenen. utilities.c: Dit bestand bevat verschillende functies die nodig zijn voor het Camus.c bestand, zoals vullen van de Windows en tekenen van lijnen,... main.h: Functie en variabele declaraties voor het main.c bestand. utilities.h: Functie en variabele declaraties voor het utilities.c bestand. correlatie.h: Functie en variabele declaraties om te kunnen lezen en schrijven van en naar register van het correlatie hardware blok. De verschillende functies die gebruikt zijn in de C-bestanden zijn weergegeven in bijlage D.

77 7.3 Software implementatie 55 Figuur 7.8: Het gebruikte linkerscript.

78 56 Embedded project 7.4 Hardware implementatie In deze sectie word besproken welke delen er in hardware zijn geïmplementeerd en hoe dit aangepakt is geweest. Om een versnelling te realiseren is er een stuk van het Camus algoritme geïmplementeerd in hardware. Het stuk dat gekozen is geweest om te implementeren is het correlatie criteria, zie figuur 7.1 en figuur 7.9. Het correlatie criteria voert de eigenlijke berekeningen uit die nodig zijn voor het Camus algoritme. Dit is het belangrijkste onderdeel van het Camus algoritme. Figuur 7.9: Correlatie criteria wordt in hardware geïmplementeerd. We hebben een nieuwe Intellectual Property (IP) gecreëerd en aan het systeem toegevoegd. Deze nieuwe IP is genaamd correlatie en is terug te vinden in figuur 7.2. Deze IP bestaat uit een aantal registers en is verbonden via de PLB bus met de rest van het systeem. Door gebruikt te maken van C-functies kunnen we lezen en schrijven van en naar de registers van het correlatie hardware blok. Deze lees- en schrijf functies zijn hieronder voorgesteld: void CORRELATIE mwritereg(xuint32 BaseAddress, unsigned RegOffset, Xuint32 Data); Xuint32 CORRELATIE mreadreg(xuint32 BaseAddress, unsigned RegOffset) ; Het probleem dat hierbij te voorschijn komt is dat we in het correlatie hardware blok kunnen lezen van het register, maar niet kunnen schrijven naar deze registers. Nu is het gewenst dat de resultaten die berekend worden in deze hardware blok kunnen uitgelezen worden door de software kant van het embedded systeem. Daarom is de functionaliteit van enkele van deze registers aangepast geweest zodat er in hardware naar deze register kan geschreven worden. Nu zijn er twee soorten registers aanwezig in het correlatie blok: de eerste soort registers kunnen