Logboek+Dries+2de+semester

Logboek 2de semester

Omdat we onze eerste mijlpaal hebben bereikt, beginnen we nu aan de volgende mijlpaal: Het "graspad" detecteren en afzonderen van de inputbeelden. Dit gaan we doen dmv textuursegmentatie en kleursegmentatie. Eerst zullen we kleursegmentatie op de beelden toepassen, waardoor we alleen de bomen en het gras zouden moeten overhouden, op deze beelden zullen we dan textuursegmentatie doen, zodat we de bomen kunnen scheiden van het grasveld. Wanneer we nu het midden van het grasveld kunnen vinden, hebben we ook het midden van het pad gevonden dat de drone kan volgen.

Ik ga mij bezighouden met de textuursegmentatie.

__17 february 2012__

 * test met textuursegmentatie in matlab

__22 february 2012__

 * Opzoekwerk over textuursegmentatie en Gabor filters

__26 february 2012__

 * Omdat textuursegmentatie niet het meest simpele onderwerp is ben ik wat simpele convolutiefilters gaan proberen op de afbeelding van een boomgaard.
 * Eerst heb ik een filter gemaakt voor verticale objecten te onderstrepen [[image:test1.png]]
 * Hierna een filter voor horizontale objecten te onderstrepen
 * [[image:test2.png]]
 * Nu ga ik eens opzoeken of ik met deze 2 afbeeldingen het pad er kan uithalen. Je kan zowiso al zien dat er veel meer "bedrijvigheid is op het pad, dan bij de bomen.

__28/02/12__

 * Op deze afbeeldingen labeling doen (BlobsLib opencv) om zo connected components te vinden. Dan de pixels een score geven aan de hand van de grootte in de verticale richting.

__02/03/12__
De kleuren afbeelding in het input beeld. Links vanboven de het beeld na de verticale sobel filter, links vanonder het beeld na horizontale sobel filter. Dit beeld heb ik verder gebruikt en er de OPEN functie op los gelaten, waardoor we het onderste 2de beeld krijgen. Wanneer we dit smoothen met een median filter krijgen we het laatste beeldje. De rode lijnen is de volgende stap die ik wil uitwerken. Het lijk allemaal niet veel werk, maar het is veel trail and error werk.
 * Vandaag heb ik de textuursegmentatie op basis van Sobel getest op echte beelden van de AR Drone, en hieruit bleek dat de textuur van gras niet te herkennen is. De textuur van bomen daarentegen wel. Via een horizontale Sobel filter ien we de bomen vee sterker dan het gras. Met wat preprocessing heb ik volgende beelde verkregen:

__11 maart 2012__
Vandaag ben ik bezig geweest om de preprocessing nog wat te verbeteren - Beter beeld om houghtransform op toe te passen - Blobalgoritme om ruis uit het beed uit te filteren problemen: Ik heb de blob library van opencv gebruikt, om connected components te vinden in de image, om zo alle ruis uit het beeld te filteren. In principe zou het graspad dan mooi weergegeven moeten worden. Dit is ook gelukt, alleen duurde het 1000ms per frame met dit algoritme. Dus dit kunnen we niet gebruiken. Wanneer we ook kleursegmentatie toepassen is het niet nodig om connected components te vinden, maar ik wou het toch eens proberen om het gehele algoritme beter te maken. Het is wel gelukt om de preprocessing van het beeld nog wat beter te doen, zodat de houghtransform nog beter moet werken.

voorlopige code in MAA11

__18 Maart 2012__
Vandaag heb ik houghtransform toegepast op de beelden om zo lijnen te bekomen op het beeld, die hopelijk de richting van het pad aangeven. Op de bovenstaande beelden werkte dit niet heel goed, dus heb ik de preprocessing nog wat aangepast met dit resultaat: Eerste foto boven en eerste foto onder : Sobel horizontaal en verticaal + erosie 2de foto boven: Dit zijn de eerste foto onder en de eerste foto boven met elkaar geAND, zodat alleen het gedeelte wit is, wat op beide beelden wit was + gesmooth 2de foto onder: Randdetectie met een Canny filter. Dit is nodig alvorens de houghtrasformatie te doen 3de foto boven: Uiteindelijke resultaat. Input image + Hough lines

Dit is wel één van de betere beelden, daarom wil ik nog een ransac doen om de juiste lijnen (die die elkaar snijden op ongeveer het zelfde punt(vanishing point)) eruit te halen.

Code zie 18MAA

__24 maart 2012__
De voorbij dagen heb ik veel informatie gelezen over kalman filters. Kalman filters werken door de volgende situatie te voorspellen en gaan vergelijken met de gemeten positie, om zo de gemeten waardes te corrigeren.

Vandaag heb ik gezocht naar vanishing points in het beeld. Ik heb voor elke gevonden lijn in beeld, de bijhorende functie berekend. Dan ben ik alle snijpunten gaan zoeken tussen lijnen met een verschillend teken voor m (y = mx +b) Dit wil zeggen tussen lijnen die niet in de zelfde richting lopen. Dan ben ik ook nog alle lijnen er gaan uitfilteren die hun snijpunt hebben binnen de dimensies van het beeld. Dit is het resultaat: Voor algoritme

Na algoritme



Het groene kruis is waar we het midden van het pad willen. De rode lijnen zijn de gevonden lijnen in beeld en de blauwe punten zijn de snijpunten (vanishing points) die mooi aanduiden waar we heen willen vliegen.

__26 maart 2012__
Nu wordt het gemiddelde berekend van de 2D snijpunten, daarna wordt er een Kalman filter op toegepast, zodat de beweging naar het middelpunt veel smoother zal gebeuren en "slechte" middelpunten er worden uitgefilterd:

Blauwe bol is het gemeten middelpunt, paarse bol is het door kalman gecorrigeerde middelpunt.

Het gemiddelde dat we hierboven gevonden hebben zegt ons naar waar we de neus moeten draaien, maar niet hoever we ons van de kanten (bomen) bevinden. Het volgende wat moet gebeuren is het het gemiddelde zoeken van de snijpunten van de lijnen met de onderste y-as. Dit gemiddelde zal ons zeggen hoe ver we ons van de bomen bevinden. Hierop zullen we wederom een kalmanfilter toepassen.

__27 maart 2012__
Vandaag heb ik nog het middelpunt gezocht van de snijpunten van de hough lijnen met de onderste y-as. Dit middelpunt geeft aan hoe dicht de Drone bij de linker of rechterkant van de bomen vliegt. Dit heb ik gedaan door eerst het gemiddelde te berekenen van alle lijnen met een positieve helling, daarna het gemiddelde van alle lijnen met een negatieve helling en daarna het gemiddelde van de vorige 2. Hier heb ik dan ook een kalmanfilter op toegepast om de beweging smoother te laten verlopen.

De coordinaten van het vanishing point (bovenste roze bol) en waar dat de drone zich bevind in de gang (onderste roze bol) staan in globale variable zodat Maarten hiermee de regellus kan aansturen.

__30 april 2012__
Na veel finetuning en schrijven aan de thesis, zijn we vandaag gaan testen in de boomgaard. Zowel de neus draait automatisch naar het vanishing point en ook de drone zelf beweegt zicht naar het midden van de gang. Alles werkt dus zoals het hoort! We zijn er wel achter gekomen dat door een andere lichtintensiteit, het algoritme niet meer goed werkte. Dit was snel opgelost door een thresholdwaarde te veranderen, maar het zou leuk zijn moest dit nog automatisch kunnen. Hiermee ga ik mij de laatste paar weken nog bezig houden. Moest dit niet meer lukken is dit niet zo een probleem, want ons doel wat we wilden halen hebben we ook behaald. Het is alleen een leuke bijkomstigheid, die het algoritme nog robuuster maakt.

__1 mei 2012__
Vandaag heb ik een algoritme geschreven dat naar gelang de lichtintensiteit autoatisch de beste thresholdwaarde berekend om het beeld om te zetten van grijswaarden naar zwart-wit waarden. Dit is nodig omdat bij een andere lichtintensiteit het pad niet meer waar te nemen was. Dit is het resultaat:





Het algoritme werkt als volgt:

Op de afbeelding waar AND boven staat, is de perfect te zien waar het pad loopt tussen de bomen (wit tussen zwart) Dus bij een perfecte afbeelding willen we zo veel mogelijk wit zien in het midden als we van boven naar onder kijken en zoveel mogelijk zwart in het midden wanneer we van links naar rechts kijken. Het algoritme dat ik geschreven heb zal voor alle thresholdwaardes (van 0 tot 255) een score berekenen van hoeveel wit en hoeveel zwart er te zien is op de horizontale en verticale middenlijn. Waar de hoogste score wordt waargenomen, wordt de thresholdwaarde opgeslagen en gebruikt voor de rest van de beelden.

Wanneer we dus niet gebruik maken van het algoritme kan het zijn dat we bij goed licht een goed beeld krijgen, maar het kan ook zijn dat we bijvoorbeeld volgend beeld krijgen. Hier kunnen we het pad niet meer onderscheiden van de bomen.

**Problemen bij het testen:**
- Lichtintensiteit die sterk veranderd tijdens de vlucht. -> automatisch threshold bijregelen - Bij het naar voor of achter hellen van de AR Drone regelt de camera zelf zijn lichtintensiteit bij -> oplossing zie vorig punt - Eens de Drone te ver naar de bomen gedraaid is vind hij in de bomen ook vanishing points, waardoor hij nog meer naar de bomen zelf wil draaien -> Gaan we nu oplossen door kalman trager te laten reageren op gemeten waardes - Hoogte controle heeft nog wat moeilijkheden met het lange gras. - Visie heeft ook nog problemen wanneer beide zijdes van de boomgaard verschillend zijn (ene kant bloesems, andere kant niet).