Mihos
July 19, 2008
Autor: Victor Adrian Prisacariu – Universitatea Tehnică “Gh. Asachi”, Iași
Conducător teză: Prof. dr. ing. Dan Gâlea
Abstract
Realitatea augmentată înseamnă combinarea datelor generate de calculator cu cele obținute din lumea reala. Cu ajutorul realității augmentate interacțiunea cu calculatorul nu mai este doar un banal schimb fata – ecran. Aceasta se dizolvă în obiectele și spațiul înconjurător. Ea încetează chiar sa fie un act conștient și intenționat.
O interacțiune completă intre lumea reală și cea virtuală trebuie sa fie bidirecționala: calculatorul trebuie sa fie capabil sa înțeleagă lumea reala, iar obiectele generate de calculator trebuie sa fie complet compatibile cu lumea reala in care sunt plasate.
Aceasta lucrare își propune sa realizeze un sistem ce folosește realitatea augmentata pentru a permite unui utilizator uman sa joace șah cu un calculator, folosind o tabla reală. Calculatorul observa tabla cu ajutorul unei camere și răspunde la mutările făcute de utilizatorul uman, prin voce.
Sistemul permite și jocuri intre 2 utilizatori umani conectați prin internet. În acest caz fiecare utilizator are propria sa cameră și tablă de șah. Sistemul observă și înțelege mișcările făcute de cei 2 utilizatori si le transmite de la unul la celălalt prin internet.
Sistemul nu face nici o presupunere asupra:
-
Culorii pieselor de pe tabla de șah
-
Mărimea tablei de șah
-
Aspectul vizual al tablei de șah
-
Intensitatea și direcția luminii
Sistemul face următoarele presupuneri:
-
Tabla de șah este complet conținută in imagine.
-
Camera observă tabla de șah de la aceeași înălțime ca un utilizator uman.
-
Imaginea conține o singură o tablă de șah și nu conține altă structură ce poate fi confundată cu o tablă de șah.
-
Tabla nu se mișcă după ce piesele au fost aranjate.
-
Utilizatorul uman respectă regulile jocului de șah.
Sistemul poartă numele de Mihos, după numele zeului egiptean al vederii.
Introducere
Șahul este un joc jucat de 2 jucători. Un jucător joacă cu piese albe, al doilea cu piese negre. Fiecare jucător are 16 piese la începutul jocului: un rege, o regină, două ture, doi nebuni, doi cai și opt pioni. Jocul se joacă pe o tablă cu 64 de pătrate: 8 rânduri și 8 coloane. Pătratele sunt alternativ albe și negre. Pentru a facilita notarea mișcărilor fiecare pătrat are o adresă proprie. Din punctul de vedere al jucătorului alb rândurile sunt numerotate 1, 2, 3, 4, 5, 6, 7, 8 de jos în sus, iar coloanele a, b, c, d, e, f, g, h de la dreapta la stânga. Adresa fiecărui pătrat este formata prin combinarea literei pentru coloană, cu cifra pentru rând. De exemplu pătratul din dreapta jos este are adresa a1 (1).
In studiul șahului majoritatea cercetărilor s-au axat pe inteligență artificială, pe construirea de programe capabile să joace șah (2). Aceste studii au fost parțial încheiate când un calculator a reușit să învingă un campion mondial de șah (3). Un studiu similar cu acesta a urmărit citirea mișcărilor de șah de către roboți (4).
Pentru captura de imagine Mihos folosește o camera web si imagini cu rezoluție de 640×480, 15fps.
Mihos întâi detectează o tablă de șah fără piese aflată in fața camerei. A fost implementat un algoritm, explicat in detaliu in Capitolul 2, care detectează cele 64 de pătrate ale tablei de șah.
Mihos nu restricționează poziția camerei raportată la tabla de șah. Din acest motiv este necesară determinarea matricei de proiecție 2D, din in care tabla de șah se află in o postură arbitrară fată de cameră (figura 1.1) , in o imagine in care camera este perpendiculară pe tabla de șah (figura 1.2).
Figura 1.1 – Camera în o postură arbitrară față de tabla de șah
Folosind parametri intrinseci ai camerei Mihos este capabil să găsească și coordonatele 3D ale tablei de șah, raportate la coordonatele camerei. Este folosit algoritmul Iterației ortogonale (5), care va fi detaliat in Capitolul 3.
Figura 1.2 – Camera
în o postură ideală fată de tabla de șah
După detecția inițială a tablei de șah Mihos va urmări mutările utilizatorului uman si după ce a fost detectată o mutare scena va fi analizată folosind tehnici bazate atât pe procesare de imagine cât și pe cunoștințe. Mihos urmărește mărimea diferenței intre 2 imagini pentru a detecta producerea unei mișcări si apoi variații in culoare in aceeași diferență pentru a vedea ce poziții pe tablă s-au modificat. Programul folosește reguli de șah și alte reguli empirice pentru a valida mutările detectate din imagine. Acest procedeu este descris in capitolele 4 și 5.
Mihos este scris în principal folosind platforma .NET, versiunea 3.5 și limbajul de programare C#, versiunea 3.0. Totuși anumite părți din program au necesitat folosirea de alte platforme sau limbaje de programare. Astfel algoritmul de găsire al tabelei de șah este scris in Matlab, versiunea 2008a, iar algoritmii de detecție și interpretare a mișcării sunt scriși in Managed C++, versiunea 9.
Aplicația Windows oferă utilizatorului o interfață în care obiecte 3D sunt generate și desenate în timp real peste o imagine de la o cameră web. Acest fel de interfață nu se putea obține, cu performanțe bune și în timp relativ scurt, decât folosind Windows Presentation Foundation din platforma .NET 3.0 și 3.5. În plus platforma .NET 3.5 include și extensii precum Linq, care au accelerat considerabil procesul de implementare. O altă caracteristică ce a determinat alegerea platformei .NET este interoperabilitatea foarte bună cu alte limbaje de programare și platforme (Matlab și Managed C++).
Am implementat algoritmii de detecție a tablei și de recuperare a posturii în Matlab pentru a accelera procesul de dezvoltare. Matlab nu oferă viteză de procesare foarte mare, dar în partea de detecție a tablei de șah o diferență de 200ms nu este foarte importantă.
Algoritmii de detecție și înțelegere a imaginii necesită viteză mare de procesare, pentru a obține o interacțiune in timp real între om și calculator. Este deci nevoie de C++. Pentru a face interfațarea cu platforma .NET mai rapidă și sigură am folosit extensiile managed ale C++, care permit folosirea obiectelor din platforma .NET și in un mediu unmanaged, precum C++.
Detecția tablei de șah
Înainte de a putea detecta și înțelege mișcări trebuie detectată tabla de șah. Aceasta poate fi de orice formă, cu orice culori și in orice postură față de cameră. Am impus totuși restricția ca ea să fie inclusă complet în imagine și in imagine să nu existe alte structuri care ar putea fi confundate cu o tablă de șah.
Figura 2.1 – Detecția tablei de șah
Prima etapă in detecția tablei de șah este achiziția imaginii. Mihos poate lucra cu orice camera video, conectată la calculator si compatibilă DirectShow. In continuare voi folosii o camera Philips SPC900NC, la rezoluția standard de 640×480, 15fps. Detalii mai multe despre conectarea camerei web la calculator vor fi date in capitolul 5.
FPS (frames per second) este unitatea de măsură a frecvenței cu care un producător de imagine produce imagini consecutive.
După achiziție imaginea este convertită in nuanțe de gri, după care a doua etapă este aplicarea operației morfologice de dilatare imaginii, prin care valoarea unui pixel din imagine devine maximul dintre valoare lui și valorilor vecinilor lui.
Pixelul este cea mai mică componentă a unei imagini.
Imaginea este apoi binarizată. Cele 256 de nivele de gri devin 2 nivele, alb și negru.
În imaginea binarizată sunt detectate contururile parților negre (intre care si pătratele negre, dar si alte contururi negre din imagine).
Aceste poligoane detectate sunt reduse folosind algoritmul Douglas Peucker la doar câteva segmente, apoi aceste segmente sunt reduse 4 folosind câteva reguli statistice si empirice.
Următoare etapă este aplicarea altor reguli statistice și empirice figurilor cu 4 laturi detectate în imagine. Rămân maxim 35 de pătrate, intre care și pătratele negre din tabla de șah.
Folosind morfologia tablei de șah găsesc orientarea tablei și 4 puncte care vor fi folosite apoi la recuperarea posturii tablei.
Morfologie matematică și dilatarea imaginii
Morfologia matematică este analizarea imaginilor folosind funcții matematice și teoria mulțimilor.
Mulțimile in morfologia matematică reprezintă formele obiectelor în o imagine. În imaginile binare toate mulțimile sunt membre ale spațiului întreg , unde fiecare element al unei mulțimi este un vector 2D, ale cărui coordonate sunt coordonatele ale pixelului în imagine. În imaginile în nuanțe de gri elementul unei mulțimi este , unde g este valoarea intensității. Mulțimi in spații n – dimensionale pot conține informații suplimentare (de exemplu culoare) (6).
Figura 2.1.1 – Două mulțimi A și B. (sursă (6))
Fie și două mulțimi în , având componentele și (figura 2.1.1). Câteva exemple de operații cu cele 2 mulțimi sunt:
-
Translarea lui cu , notată , definită ca:
-
Reflexia lui B, notată , definită ca:
-
Complementul lui A, notat , definit ca:
-
Diferența , definită ca:
Fie mulțimea vidă. Dilatarea lui A prin B este definită ca:
Dilatarea este deci mulțimea tuturor deplasărilor x astfel încât intersecția lui A cu B conține cel puțin un element. B este numit elementul structural în dilatare.
Dacă presupunem imaginea în nuanțe de gri sursă , elementul structural , domeniul lui și domeniul lui , atunci dilatarea pentru o imagine în nuanțe de gri este:
Mihos folosește dilatarea pentru a micșora părțile întunecate și deci pentru a separa pătratele negre de restul tabelei (figura 2.2.3).
Conversia imaginii: imagine color în imagine cu nuanțe de gri și apoi in imagine binară
Înainte de dilatare este nevoie de o conversie a imaginii din color în nuanțe de gri. După dilatare imaginea este convertită în imagine binară.
Imaginile color sunt in spațiul de culori RGB.
In spațiul de culori RGB fiecare culoare este reprezentată ca o combinație de 3 culori, roșu, verde și albastru.
Fie imaginea color inițială, imaginea în nuanțe de gri si imaginea binară. În acest caz , unde r, b, g sunt componentele roșu, verde și albastru ale culorii pixelului de la coordonatele , , unde i este valoarea intensității pixelului de la coordonatele în imaginea in nuanțe de gri si , unde v este valoarea intensității pixelului la coordonatele in imaginea binarizată.
Pentru a obține intensitatea pixelilor aplicăm formula:
Imaginea binară are numai 2 culori, 0 pentru negru și 255 pentru alb. Binarizarea se face in funcție de o valoare prag. Toate intensitățile mai mici decât valoarea prag vor devenii 0, și toate mai mari vor devenii 1. Mihos folosește pentru a determina valoarea prag următoarea formulă:
Figura 2.2.1 – Imaginea color de la cameră
Figura 2.2.2 – Imaginea după dilatare |
Figura 2.2.3 – Imaginea în nuanțe de gri
Figura 2.2.4 – Imaginea după binarizare |
Trasarea conturului în jurul pătratelor negre
Pentru a găsii contururile Mihos întâi caută toate punctele ce mărginesc zonele negre. Un punct mărginește o zonă neagră daca are in apropierea lui pixeli albi. În continuare sunt grupate punctele după distanța intre ele și sunt găsite marginile zonelor negre (figura 2.3.1).
Figura 2.3.1 – Imaginea cu marginile marcate
În acest moment am găsit o lista de mulțimi de puncte, care mărginesc zone negre. Fiecare mulțime de puncte va fi simplificată folosind algoritmul Douglas Peucker și apoi din segmentele rămase vor fi alese numai 4, in funcție de unghiul dintre ele (rămân cele 4 segmente cu unghiul dintre ele cât mai apropiat de 90).
Algoritmul Douglas Peucker
Algoritmul Douglas Peucker folosește apropierea unui punct de o linie pentru a determina daca el face sau nu parte din linia respectivă.
Algoritmul funcționează de sus în jos, pornind cu o aproximare inițială a poligonului: o linie cu primul punct din lista de puncte la un capăt si cu ultimul la celălalt capăt. Apoi punctele rămase sunt testate pentru apropierea de această linie. Dacă un punct este mai departe de linie cu o toleranță , atunci este adăugat la simplificare și este creată o nouă aproximare a poligonului. Folosind recursie procesul continuă până când toate punctele au fost ori adăugate în poligon, ori distanța dintre ele și linie este mai mică decât toleranța (7).
Algoritmul este exemplificat în figura 2.3.2.
Figura 2.3.2 – Algoritmul Douglas-Peucker
Figura 2.3.3 – Rezultatul simplificărilor poligoanelor detectate
După cum se observă in figura 2.3.3 au fost detectate toate pătratele din tablă, dar au fost detectate și alte pătrate. Este chiar posibil sa nu fie detectate toate pătratele din tablă, dar să fie detectate alte pătrate din imagine.
Filtrare empirică, statistică și morfologică a pătratelor detectate
Din pătratele detectate se aleg numai acelea care respectă următoarele reguli empirice:
-
să nu fie prea mici
-
raportul dintre cea mai mică latură și cea mai mare să fie mai mic decât 0.6
După eliminarea empirică Mihos face una statistică. Sunt luați in calcul următorii factori:
-
Aria
-
Raportul între latura cea mai mică și cea mai mare
-
Raportul între unghiurile dintre laturi
-
Numărul de muchii detectate de algoritmul Douglas-Peucker.
Pentru fiecare din acești factori sunt calculați parametrii pentru o distribuție gaussiană: este media factorului (media ariilor detectate de exemplu) , iar este variabilă funcție de factor:
-
Aria:
-
Raportul între latura cea mai mică și cea mai mare:
-
Raportul între unghiurile dintre laturi:
-
Numărul de muchii detectate de algoritmul Douglas-Peucker:
Distribuția gaussiană are 2 parametrii: media și deviația standard :
Fiecare pătrat din cele detectate va avea 4 probabilități, de corespondență la factorii de mai sus. Probabilitatea ca un pătrat să aparțină tablei este dată de produsul acestor 4 probabilități.
Figura 2.4.1 – Rezultatul eliminării statistice și empirice a pătratelor
Se observă în figura 2.4.1 că eliminarea nu a este perfectă. Este posibil ca să rămână pătate care nu aparțin tablei de șah, dacă ele sunt similare cu cele care aparțin tablei.
Ultima filtrare este una bazată pe morfologia tablei. Se poate observa că tabla de șah are o singura diagonala formată din pătrate negre. Aceasta trece prin centrul celor 8 pătrate. Daca deci tragem o linie din centrul fiecărui pătrat la centrul fiecărui alt pătrat exista o singură pereche de pătrate a cărei linie trece prin alte 6. Aceste 2 pătrate determină și orientarea tablei. Similar se observă că există si 3 perechi de pătrate a căror linie trece prin alte 5 pătrate. Pornind de la aceste premize vom găsii 8 pătrate, câte 2 pentru fiecare colț al tablei (figura 2.4.2).
Figura 2.4.2 – Cele 8 pătrate care marchează colțurile tablei
Interesat? Intra in contact cu autorul pentru restul lucrarii.
Cuprins
Capitolul 2 – Detecția tablei de șah 9
2.1 Morfologie matematică și dilatarea imaginii 10
2.2 Conversia imaginii: imagine color în imagine cu nuanțe de gri și apoi in imagine binară 11
2.3 Trasarea conturului în jurul pătratelor negre 12
2.3.1 Algoritmul Douglas Peucker 12
2.4 Filtrare empirică, statistică și morfologică a pătratelor detectate 13
Capitolul 3 – Recuperarea posturii 16
3.1 Transformări geometrice 16
3.2 Construirea matricei de proiecție 17
3.3 Problema estimării posturii 18
3.3.3 Algoritmul Iterației ortogonale 22
Capitolul 4 – Detecția mișcării 27
4.2 Procedeul de detecție a mișcării 29
Capitolul 5 – Înțelegerea mișcării 32
5.3 Procedeul de înțelegere a mișcării 34
5.4 Probleme la detecție și rezolvări propuse 36
5.4.3 Diferența între deviații standard 38
5.4.4 Spațiul de culori RGB normalizat 39
Capitolul 6 – Aplicația Windows 40
6.1 Interfața cu utilizatorul 42
6.1.2 Fereastra principală și cea de vizualizare a istoricului 43
6.1.3 Fereastra de creare și conectare la jocuri în rețea 44
Listă de figuri
Figura 1.1 – Camera în o postură arbitrară față de tabla de șah 7
Figura 1.2 – Camera în o postură ideală fată de tabla de șah 8
Figura 2.1 – Detecția tablei de șah 9
Figura 3.1 – Imagine obținută de la cameră în cazul ideal 16
Figura 6.1 – Arhitectura Mihos și limbaje de programare folosite 40
Figura 2.1.1 – Două mulțimi A și B. (sursă (6)) 10
Figura 2.2.1 – Imaginea color de la cameră 11
Figura 2.2.2 – Imaginea după dilatare 11
Figura 2.2.3 – Imaginea în nuanțe de gri 11
Figura 2.2.4 – Imaginea după binarizare 11
Figura 2.3.1 – Imaginea cu marginile marcate 12
Figura 2.3.2 – Algoritmul Douglas-Peucker 13
Figura 2.3.3 – Rezultatul simplificărilor poligoanelor detectate 13
Figura 2.4.1 – Rezultatul eliminării statistice și empirice a pătratelor 14
Figura 2.4.2 – Cele 8 pătrate care marchează colțurile tablei 15
Figura 3.3.1 – Modelul pinhole al camerei 19
Figura 3.3.2 – Problema estimării posturii (sursa (5)) 21
Figura 4.1.1 – Două imagini consecutive și diferența obținută între ele 27
Figura 4.1.2 – Deviația standard la o variabilă aleatoare (sursă (17)) 28
Figura 4.2.1 – Procedeul de detecție al mișcării unei piese 29
Figura 4.2.2 – Mișcare de mână, finalizată cu mutare de piesă 31
Figura 4.2.3 – Mișcare de mână, nefinalizată cu mutare de piesă 31
Figura 5.1.1 – Imagine inițială și histograme pentru componente roșu, verde și albastru 32
Figura 5.3.1 – Procedeul folosit pentru înțelegerea mișcării 34
Figura 5.3.2 – Imaginile înainte și după mișcare și diferența între ele 35
Figura 5.3.3 – Stânga: histogramă pentru pătrat ocupat, dreapta: histogramă pentru pătrat liber 35
Figura 5.4.1 – Aranjarea inițială a simulări 37
Figura 5.5.1 – Pătrate detectate 39
Figura 5.5.2 – Simulare de mutare 39
Figura 6.2.1 – Fereastra de selecție și cea de creare utilizatori 42
Figura 6.1.2 – Ranguri de jucători în Mihos 42
Figura 6.1.3 – Reprezentare utilizatori în Mihos 43
Figura 6.1.4 – Fereastra principală 43
Figura 6.1.5 – Fereastra My History (Istoricul meu) 44
Figura 6.1.6 – Fereastra de creare și conectare la jocuri în rețea 44
Figura 6.1.7 – Fereastra Joc înainte de detecție 45
Figura 6.1.8 – Fereastra Joc după detecție, selecția dificultății 45
Figura 6.1.9 – Fereastra joc cu piesele 3D, în așezarea inițială 46
Figura 6.1.10 – Fereastra joc cu piesele 3D, după câteva mișcări 46
Figura 6.1.11 – Fereastra joc cu piesele 2D, după câteva mișcări 46
Figura 6.1.12 – Selecția camerei 45
Figura 6.1.13 – Timer și istoric mutări 46
Figura 6.1.14 – Arhitectura WPF 47
Figura 6.3.1 – Modele 3D pentru piesele de șah 51
Figura 6.5.1 – Arhitectura client – server 52
Figura 6.5.2 – Conectarea la server 53
Bibliografie
1. Rayment, W.J. Chess Rules. Chess Rules. [Interactiv] [Citat: 2008 Mai 2008.] http://www.conservativebookstore.com/chess/.
2. Wikipedia Chess Engines. Wikipedia. [Interactiv] [Citat: 7 Mai 2008.] http://en.wikipedia.org/wiki/Chess_engine.
3. Wikipedia Deep Blue. Wikipedia. [Interactiv] [Citat: 7 Mai 2008.] http://en.wikipedia.org/wiki/IBM_Deep_Blue.
4. A chess-playing robot: lab course in robot sensor integration. Groen, F.C.A., și alții. 6, s.l. : IEEE, 1992, Instrumentation and Measurement, IEEE Transactions on, Vol. 41.
5. Lu, Chien-Ping, Hager, Gregory D. și Mjolsness, Eric. Fast and Globally Convergent Pose Estimation from Video Images. IEEE Trans. Pattern Analysis and Machine. 2000, Vol. 22, 6.
6. Gonzales, R. C. și Woods, R. E.
Digital Image Processing . s.l. : Addison Wesley, 1993.
7. Algorithms for the reduction of the number of points required to represent a digitized line or its caricature. Douglas, David și Peucker, Thomas. 112-122, 1973, The Canadian Cartographer, Vol. 10(2).
8. Visual Servo Control of Robots Using Kalman Filter Estimates of Relative Pose. Wilson, W. J. 12th IFAC World. Congress. Vol. 19, pg. 399-404.
9. Superior Augmented Reality Registration by Integrating. State, Andrei, și alții. 1996. Proceedings of the 23rd annual conference on Computer graphics and interactive techniques. ISBN 0-89791-746-4.
10. Grimson, W. E. L.
Object Recognition by Computer. Cambridge Mass. : MIT Press, 1990.
11. An Analytic Solution for the Perspective 4-Point Problem. Horaud, Radu P., și alții. 1989 : s.n. Computer Vision, Graphics and Image Processing. Vol. 47, pg. 33-34.
12. Ganapathy, S.
Decomposition of transformation matrices for robot vision. s.l. : IEEE, 1984.
13. Wikipedia Gauss-Newton Algorithm. Wikipedia. [Interactiv] [Citat: 9 Mai 2008.] http://en.wikipedia.org/wiki/Gauss-Newton_algorithm.
14. Three-Dimensional Object Recognition from Single Two-Dimensional Images. Lowe, David G. [ed.] ACM. 3, s.l. : ACM, 1987, Artificial Intelligence, Vol. 31, pg. 355-395. ISSN 0004-3702.
15. Vezhnevets, Vladimir. GML MatLab Camera Calibration Toolbox. Graphics and Media Lab. [Interactiv] http://research.graphicon.ru/calibration/gml-matlab-camera-calibration-toolbox.html.
16. Closed-Form Solution of Absolute Orientation Using Orthonormal Matrices. Horn, Berthold K.P, Hilden, Hugh M. și Negahdaripour, Shahriar. Aprilie 1987, Journal of the Optical Society of America , Vol. 4, p. 629.
17. Wikipedia Standard Deviation. Wikipedia. [Interactiv] [Citat: 11 Mai 2008.] http://en.wikipedia.org/wiki/Standard_deviation.
18. Skarbek, W. și Koschan, A.
Colour image segmentation – a survey. s.l. : Institute for Technical Informatics, Technical University of Berlin, 1994.
19. Robust Pose Estimation from a Planar Target. Schweighofer, Gerald și Pinz, Gerald. 12, s.l. : IEEE, 2006, IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, Vol. 28.
Comentarii
Avem 2 comentarii la articolul “Mihos”
Nelamuriri? Intrebari?
Intreaba sau cauta raspunsul la sectiunea de intrebari si raspunsuri.
Salut.
Poti sa mi trimiti pe email Cap 4 si 5 a lucrarii tale?
Acum lucrez la un program pentru detectia miscarii si am nevoie de careva indicii…
multumesc anticipat
expekt@mail.ru