Dit is onderdeel van het project pick and place
De kleuren range waarin er gedetecteerd wordt bepaald aan de hand van de HSV (Hue, Saturation, Value) waardes. In onderstaande afbeelding/grafiek(links) is op de y-as de ‘Saturation’ afgebeeld en op de x-as de ‘Hue’.
In deze afbeelding is goed een schatting te maken van de benodigde waardes. Je kan hier namelijk ranges mee bepalen. Voorbeeld: de kleur blauw zal ongeveer vallen tussen ‘Hue’ 105 en 130.
De laatste waarde V(value) bepaald hoe donker de kleur is waarbij 0 volledig zwart is. Het kiezen van deze waardes is erg moeilijk bij de verandering van het licht. Kleuren kunnen zo net iets anders op beeld komen dan in de werkelijkheid.
In het belichtingsonderzoek zijn de verschillende invallen van het licht besproken. Hieruit is gebleken dat licht met een hoek inval de kleuren het minst beïnvloed doordat het licht niet rechtstreeks terug de camera in reflexteerd (wat overbelichting tot gevolg zou hebben). De licht inval wordt hier daarom ook vanuit een hoek gebracht.
Om code te schrijven die op verschillende locaties toepasbaar is moeten er makkelijk nieuwe waardes bepaald kunnen worden. Zoals al eerder besproken heeft geel licht (TL-licht in ons geval) een invloed op de kleur. Om nieuwe waardes makkelijk te kunnen bepalen is het schrijven van code hiervoor onmisbaar.
Met trackbars zijn makkelijk de min en max te bepalen van de HSV values. Belangrijk bij deze methode is dat de range zo groot mogelijk moet zijn zodat de kans op verkeerde detectie kleiner is. Als de range groot is zorgt dit voor een grote kans dat de pixel die je zoekt in deze range ligt. De ranges moeten bepaald worden voor elk individueel blokje. Het verplaatsen van de bars moet leiden tot het alleen zichtbaar zijn van het gekozen blokje. Het geeft dan hetzelfde resultaat als bij de bovengenoemde ‘mask’ methode. Deze spectrumwaardes kunnen vervolgens in gevuld worden in de max en min van de kleuren.
Invloeden licht
Te weinig licht heeft veel invloed op de accuraatheid van de volledige foto techniek. Bij de onderstaande test is er gezocht naar het rode kleurenspectrum maar blijft de rest van het beeld zichtbaar. Op de linker afbeelding is dit alleen met omgevingslicht en op de rechterafbeelding is er licht inval met een hoek vanaf één kant.
Wat niet zichtbaar is op de afbeeldingen is hoe de box af en toe verspringt naar een ander gedeelte van het bakje. Dit komt, zoals eerder benoemd, doordat deze methode erg snel beïnvloed wordt door omgevingskleuren.
Mask
De mask methode geeft bij omgevingslicht(links) en bij een extra lichtbron (rechts), die vanuit een hoek gebracht wordt, een duidelijk zichtbaar blokje.
Deze methode wordt beïnvloed door een extra geel kleurige lichtbron. Deze veranderd de kleur van de blokjes waardoor deze minder goed opgepakt worden door de mask, of het zorgt ervoor dat blokjes zichtbaar worden die van origine een andere kleur hebben.
Na onderzoek van beide methodes is de keuze gemaakt om deze te combineren. Door eerst de mask toe te passen en deze mee te geven aan een Bbox blijf je een goede manier houden om informatie te verstrekken aan de gebruiker en blijft de detectie accuraat.
Locatie bepaling
Voor het bepalen van de locatie wordt gebruik gemaakt van de “moments” functie binnen openCV.
Deze vier regels geven het middelpunt van een contour van het object.
Rotatie bepaling
Om de blokjes goed in het tangrambakje te kunnen plaatsen is naast de kleur en vorm ook de rotatie waarop het blokje ligt belangrijk.
Er zijn meerdere mogelijkheden om rotatie van een object te bepalen met OpenCV:
De meeste gebruikte functie is “minAreaRect”. Dit geeft een rechthoek om het object met de kleinst mogelijke oppervlakte. Dit betekend dat de rechthoek meedraait met het object. Die rotatie gaat van -90 tot 90 en telt daarna weer vanaf nul. Ook kan de functie “fitEllipse” gebruikt worden. Deze werkt hetzelfde maar dan met een ovaal en geeft waardes van 0 tot 179 graden.
Beide functies geven dus geen volledige rotatie waarde. Dit is voor vormen als vierkanten geen probleem. Als een vierkant namelijk 180 graden gedraaid wordt i s er geen verschil. Bij driehoeken is dit echter wel het geval. De positie van de driehoek die hiernaast afgebeeld staat kan door de code worden gezien als 180° of 0°. Hierdoor kan het gebeurden dat de driehoek in de verkeerde richting in het tangrambakje wordt gelegd.
Om dit te voorkomen is er een functie geschreven die de dichtstbijzijnde hoek ten opzichte van het middelpunt van het object zoekt. Vervolgens wordt op basis van de positie van die hoek de juiste rotatie geven. Het resultaat wordt hieronder afgebeeld.
Reactie plaatsen
Reacties