maandag 26 oktober 2009

Finger tracking

* paper: reacTIVision: A Computer-Vision Framework for Table-Based Tangible Interaction
Een zeer algemene paper die een overzicht geeft van de onderdelen van een multi-touch systeem, wat de rol van reacTIVision hierin is, hoe zo'n opstelling fysiek gebouwd wordt en in welke projecten het framework gebruikt wordt. Bij de beknopte bespreking van reacTIVision worden kort de verschillende tracker engines (Amoeba (zie vorige blogbericht), d-touch, ...) besproken en zegt men het volgende over het detecteren van vingers:
Aangezien reacTIVision in de eerste plaats ontworpen was om fiducials te traceren, werd aanvankelijk het probleem van vingerdetectie herleid tot een fiducialprobleem. Hierbij moest een eenvoudige fiducial (met een boomstructuur van 1 enkele tak) aangebracht worden op de vinger om gedetecteerd te kunnen worden. Een groot nadeel van deze methode is de topologie van de fiducial die al snel vals gedetecteerd kan worden vanwege zijn eenvoudigheid. Deze fout kan wel geminimaliseerd worden door rekening te houden met detecties uit voorgaande frames.
In volgende versies van het framework is men overgeschakeld naar een alternatief optisch vingerdetectiesysteem dat niet meer gebruik maakt van fiducials, maar hierover wordt verder niks gezegd in deze paper.

* De meeste trackers gebruiken de openCV (Open Source Computer Vision) bibliotheek om blobs te detecteren. Deze bibliotheek zet elk frame via image thresholding (grijswaarden beneden een bepaalde drempel worden omgezet naar wit, de rest wordt zwart) om naar een binair beeld. In dit beeld gaat men via contour tracing de witte punten (i.e. 'blobs', vingertoppen in dit geval) localiseren. Om het precieze raakpunt met het oppervlak te bepalen gaat men dan het middelpunt van het witte punt berekenen. Oriëntatie berekenen heeft geen zin, maar is eventueel wel mogelijk als men rekening houdt met de positie van de volledige hand die op een ruw frame dikwijls nog wel zichtbaar is. Dit wordt (nog) niet ondersteund door openCV.
Om ervoor te zorgen dat dezelfde blobs over de verschillende frames heen (tot ze verdwijnen) hetzelfde unieke ID hebben, worden in een eerste frame de ID's van alle blobs in een vector opgeslagen. Bij een volgend frame wordt dan het ID van een blob bepaald met het kNN-algoritme (k nearest neighbour).

Enkele bedenkingen bij de aanpak van openCV:
1) Als 2 vingers dicht bij elkaar het scherm raken, kan het zijn dat de 2 witte punten met elkaar versmelten en worden geïdentificeerd als 1 raakpunt. OpenCV houdt hier voorlopig geen rekening mee en dit kan problemen geven bij bv. inzoomen (pinching)
2) Het precieze raakpunt met het scherm is enkel het middelpunt van het witte punt als de vinger het scherm loodrecht raakt, wat niet altijd het geval is.

Geen opmerkingen:

Een reactie posten