Home

Projectomschrijving
De opstelling
Het programma
Apparatuur
Raw data
Broncode

Planning
Dagboek
Logbook

Contact

De opstelling

In grote lijnen werd al snel duidelijk wat het programma zou moeten doen. Als input krijgt het twee beelden: één voor de zet en één na de zet. Als output schrijft het de (menselijke) zet in de vorm ‘a2a3’ naar een text-file.

Algemeen

Om één en ander te realiseren gebruiken we een webcam, het programma MatLab en een schaakbord met stukken. Meer details over de gebruikte apparatuur kan worden gevonden in de sectie met gegevens van de software en apparatuur. Aangezien we slechts een week kregen om ons idee uit te werken, wilden we onze opstelling zo ideaal mogelijk maken. Hadden we meer tijd gehad dan hadden we onze software robuuster kunnen maken, zodat deze foto’s aan kan van borden gezien vanuit willekeurige hoeken en met variërende belichting. Hier ligt duidelijk ruimte voor verbetering.

Belichting en reflecties
In plaats daarvan zagen we ons gedwongen de opstelling aan te passen aan ons programma en niet andersom. Dit betekende onder andere dat we ten alle tijde een zo diffuus mogelijk licht probeerden te bewerkstelligen, alsmede reflecties op het bord te minimaliseren. Doe je dit niet, dan kunnen ‘lichtvlekken’ op het bord makkelijk worden aangezien voor witte stukken. Wat de belichting betreft is het overigens het meest belangrijk dat de schaduwen en/of reflecties niet veranderen tussen de twee foto’s. Zoals we zullen zien nemen we grofweg het verschil van de twee foto’s. Eenzelfde reflectie die op beide afbeeldingen aanwezig is valt dus weg. Dit is niet het geval als hij tussen het nemen van de foto’s tevoorschijn is gekomen.

Omgaan met perspectief
Ook wat betreft de hoek van de camera ten opzichte van het bord moesten we de situatie proberen te optimaliseren. Uiteindelijk kwamen we tot de conclusie dat de camera recht boven het middelpunt van een platliggend bord dient te staan. Of het bord in het horizontale vlak is gedraaid is niet van belang, zolang de hoekpunten maar in beeld zijn. Later in het programmeren zullen we het bord zo projecteren dat de hoekpunten ook op de hoekpunten van een nieuwe afbeelding vallen.

Dat we deze aanname over de hoek van de camera moesten maken kwam slechts door één ding: de stukken waarmee we spelen zijn bijvoorbeeld geen damstenen, maar hebben een bepaalde hoogte. Stel nu dat we een foto maken vanuit een hoek van 45 graden. Aangezien we de top van elk stuk als identificatiepunt nemen (waarom zullen we later zien), valt de bovenkant van een stuk op de foto buiten het vakje waar het op staat. Dit compliceert de zaken enorm, aangezien we nu via hoeken en afstandsverhoudingen zouden moeten berekenen boven welk vakje de top van een stuk daadwerkelijk staat. Het wordt een stuk makkelijker als we zorgen dat deze top altijd binnen de grenzen van een vakje valt. Dit bereiken we door de camera recht boven het bord te hangen, een schaakbord nemen met grote vakje ten opzichte van kleine stukken.

De schaakstukken
Verder dienen we nog op te merken dat we de stukken die door ons worden gezet (de witte stukken) bovenop hebben gemarkeerd met witte stickers. Dit bleek nodig te zijn om het contrast met het schaakbord te vergroten. De stukken die door de computer worden gezet hebben een dergelijke markering niet nodig, aangezien deze tijdens een menselijke zet niet verplaatst worden. Ze zijn dientengevolge dan ook niet van invloed op de foto’s voor en na de zet. Als een zwart stuk wordt geslagen en tussen de foto’s door van het bord wordt gehaald, blijkt het contrast in de gegeven omstandigheden (diffuus licht, hoek) groot genoeg om de zet te detecteren.

Camera en Matlab

Voor het aansluiten van de camera op Matlab hebben wij gebruik gemaakt van Simulink, een module die bij Matlab geleverd wordt. Deze module kan gebruikt worden voor het maken van simulaties. Simulink beschikt ook over een toolbox voor Image aquisition. Deze hebben wij gebruikt om Matlab te laten communiceren met de webcam.

Het eerste wat we deden, was het creeëren van een model voor de simulatie. Het model ziet er uit zoals in eht plaatje hiernaast. Het bestaat uit slechts twee onderdelen: de video-input blok en de video-to-workspace block. Bij de versie van Matlab die wij gebruikten, zaten deze beide standaard meegeleverd. In de onderstaande figuren kunt u terugvinden waar deze blocks in de Simulink library te vinden zijn.
 
Klik om te vergroten

Video-input block
Video-to-workspace block







Input-block settings
Vervolgens is het zaak de blocks goed in te stellen. Voor het video input hebben we gekozen voor de instellingen, zoals ze in het figuur hiernaast te zien zijn. Het input format moet op RGB24 gezet worden, anders is het niet mogelijk er goed mee te werken in Matlab. Verder hebben we voor een resolutie gekozen van 352x288. Dit is niet te klein om genoeg detail waar te kunnen nemen, en niet te groot om de rekentijd te drukken. Frame rate is zo laag mogelijk, aangezien er toch maar een plaatje nodig is. Data type is double voor een goede precisie.

De instellingen van de video-to-workspace block zijn hiernaast te zien. De waarden die hier staan zijn de standaardwaarden van dit block. Dit block slaat de video data die opgenomen is door het input block, op in de workspace. Het wordt opgeslagen in de variabele met de naam vout. De gegevens komen in een matrix te staan van 352*288*3*n. Dit komt overeen met: width*height*rgb*frames. Voor onze doeleinden hebben we slechts het tweede frame nodig. (De eerste frame is altijd zwart)










Output-block settings

© Hylke Buisman & Mark Beumer 2005