Cristian Dima -- cdima+@cs.cmu.edu
Mihai Budiu -- mihaib+@cs.cmu.edu
mai 2000
În textul nostru despre ``cercetarea în robotică'', din numărul curent al PC Report, arătăm că percepția este unul din elementele cheie ale roboticii. În acest text explorăm o ramură a percepției robotice, și anume ``vederea automată'', în engleză computer vision (vom abrevia de aici înainte cu CV această sintagmă).
Dintre toate domeniile în care un robot, sau un calculator, poate fi comparat cu performanțele umane, percepția (și componenta sa cea mai importantă, văzul) este probabil mai puțin satisfăcătoare prin calitatea rezultatelor. De ce stau lucrurile așa? Pentru că, chiar dacă suntem în stare să construim senzori mult mai sensibili decît organele omenești de simț, nu putem egala resursele computaționale dedicate de creier acestei activități. În mod paradoxal, progresele din CV nu fac decît să sporească admirația pentru modul în care creierul uman procesează imaginile, de la fizica formării imaginii, pînă la sistemele de prelucrare și analiză, precum și pentru adaptabilitatea remarcabilă, la condiții de mediu extrem de schimbătoare. Din păcate, foarte multe lucruri ne sunt necunoscute despre felul în care creierul procesează informațiile vizuale, așa că nu putem ``copia'' soluția sa.
Datorită vastității domeniului, chiar și o simplă încercare de a enumera temele de cercetare ar fi sortită eșecului. Importanța percepției și dificultățile legate de obținerea unor rezultate semnificative fac ca în fiecare subdomeniu să existe o activitate febrilă ce cercetare și sumedenie de rezultate. Fiecare metodă propusă în literatură oferă adesea rezultate bune, dar pe o problemă precis delimitată. Limitările provin uneori din modele matematice simplificate al fenomenelor; pentru fiecare metodă putem imagina un context în care nu funcționează satisfăcător.
Nici măcar cărți de sute de pagini dedicate în mod special CV nu reușesc sa trateze decît anumite zone ale domeniului; nu e deci surprinzător că scurta noastră introducere va fi incompletă și relativ superficială: vom prezenta doar genul de probleme existente și vom încerca să rezumăm toată cercetarea din domeniu în cîteva pagini. Vom încerca să prezentăm acele teme din Computer Vision care sunt legate strîns de aplicațiile robotice. Rugăm cititorul să rețină că acestea sunt adeseori interdependente, sau dependente de alte domenii, ce nu vor fi menționate.
Robotica este unul din domeniile în care sistemele de viziune sunt foarte des folosite. Un robot care asamblează piese trebuie să le poată identifica; are nevoie deci de mecanisme de percepție și de un model despre modul în care își formează imaginile, pentru a înțelege ce sunt informațiile primite.
Un robot ce navighează pe un teren unde există iarbă și stînci trebuie să fie capabil sa distingă între zonele cu iarbă și obstacole. Tehnica folosită pentru a distinge obiecte se numește segmentare de imagine.
Roboții se mișcă într-un spațiu tridimensional; este deci nevoie de a extrage informație tridimensională; în cazul acesta se poate apela la viziunea stereoscopică, care utilizează imagini ale aceeași scene luate din puncte diferite.
Foarte frecvent roboții combină mai mulți senzori pentru a obține informație despre mediul înconjurător, sau ``baleiază'' mediul cu senzorii, culegînd informații pe suprafețe mari. În acest caz, este nevoie ca datele provenite de la dispozitive diferite (fie de la roboți diferiți, fie de la același senzor la momente de timp diferite) să fie aliniate între ele, reconstituind din mozaicul de imagini un model unic al realității.
Identificarea obiectelor de interes și clasificarea lor se poate face cu tehnici folosite și pentru, manipularea și căutarea de informații în baze de date multimedia; vom vedea unele tehnologii din acest domeniu la lucru în acest text.
Adesea nu este suficient ca un obiect să poată fi identificat în mod static; robotul trebuie să fie capabil să urmărească obiectul în mișcare (motion tracking).
În fine, unii roboți trebuie să fie educați pentru a învăța ce anume prezintă interes din mediu; putem deci vorbi și despre învățare în contextul CV.
Este de reținut faptul că diferitele domenii ale CV sunt întrepătrunse. Un simplu exemplu: pentru a recunoaște obiecte, este uneori nevoie de a separa obiectul de interes de fundalul imaginii. Dar acest procedeu cade în sfera segmentării imaginilor, și deci toate problemele și dificultățile existente în domeniul segmentării apar în mod indirect în anumite metode de recunoaștere. Deși nu legate în mod direct de vederea utilizată în domeniul roboticii, aproape toate domeniile de cercetare din CV se dovedesc astfel utile în anumite aplicații robotice.
În această diviziune a CV intră tot ceea ce are legatură cu procedeele de obținere a imaginilor. Există trei aspecte principale ale formării imaginilor: geometria, fotometria și captarea a imaginii.
Geometria formării imaginii descrie modelul procedeului de formare a imaginii în dispozitivul optic utilizat.
Modelul cel mai frecvent utilizat este cel al camerei obscure, în care imaginea se formează prin trecerea razelor luminoase printr-un orificiu infinitezimal (``centrul de proiecție'') și proiectarea lor pe un plan. Într-un aparat tradițional, acest plan este un material fotosensibil; în camerele digitale de astăzi planul este compus din elemente electronice sensibile la radiația din spectrul de interes (vizibil, infraroșu, etc.). Transformarea geometrică în modelul camerei obscure este intuitivă și ușor de exprimat matematic; tehnologia este cunoscută din epoca renascentistă și poartă numele de proiecția perspectivă. Marea problemă a acestei transformări este însă faptul că relația dintre coordonatele punctelor din imagine și coordonatele tridimensionale ale lumii fotografiate este inerent neliniară1.
Din această cauză, adesea se folosește un alt tip de proiecție, cea ortografică, în care un obiect în spațiul 3D este întîi proiectat perpendicular pe planul imaginii, ignorînd profunzimea (adică un punct (x, y, z) în 3 dimensiuni devine un punct (x,y) în planul imaginii). Apoi această proiecție este redusă la scară, în funcție de distanța medie a obiectului față de cameră.
Modelul acesta, care folosește o proiecție ortografică urmată de o reducere la scară este o aproximare acceptabilă a modelului din perspectivă doar în cazurile în care obiectul este aproape de axa optică a camerei și relativ mic, în comparație cu distanța dintre obiect și aparatul optic.
O altă transformare lineară, mai puțin ``artificială'' decît cea ortografică, este proiecția paralelă. Și în acest caz obiectul este proiectat pe planul imaginii și apoi redus la scară, însă, de data aceasta, proiecția este realizată prin raze paralele orientate în direcția ``medie'' a razelor ce ar alcătui proiecția prin perspectivă (dacă preferați, de-a lungul unei raze din centrul camerei în centrul obiectului). Ca atare, această metodă dă rezultate bune chiar dacă obiectul nu este aproape de axa optică. În cazul în care obiectul este chiar pe axa optică, proiecția paralelă și cea ortografică sunt echivalente. Cele trei proiecții sunt ilustrate în figura 1.
O întrebare legitimă este de ce modelul camerei obscure e aproape universal acceptat, dar toate camerele de filmat/fotografiat în uz folosesc de fapt un sistem cu lentile. Iată de ce: pentru a obține o imagine cît mai clară cu o cameră obscură, orificiul prin care razele de lumină sunt proiectate ar trebui să fie cît mai mic. Pe masură ce orificiul devine mai mic, fenomenul de difracție devine din ce în ce mai semnificativ, rezultînd într-o imagine neclară. (Pe lîngă asta, energia semnalului optic care trece printr-o găurică mică este foarte redusă.) Scopul lentilelor este de a menține geometria camerei obscure, în timp ce dimensiunile orificiului sunt suficient de mari ca difracția să fie nesemnificativă. Lentilele prezintă și ele o serie întreagă de alte probleme: aberații cromatice, radiale, distorsiuni și alte efecte nedorite, însă constituie un substanțial avantaj față de camera obscură.
Fotometria se ocupă cu măsurătoarea luminii. Fotometria este foarte importantă pentru CV, datorită dificultății stabilirii unei relații cantitative între caracteristicile fizice ale unui obiect, condițiile de iluminare și imaginea obținută. Intensitatea unui pixel dintr-o imagine depinde de cantitatea de lumină reflectată în direcția elementului fotosensibil; cantitatea de lumină reflectată însă depinde atît de natura suprafeței reflectante cît și de direcția și intensitatea surselor de iluminație, cum ilustrează și figura 2 (în măsura în care tipografia poate reproduce diferențele).
Să presupunem că dorim să implementăm un sistem care numără bilele roșii din cîmpul vizual al unei camere de luat vederi. Cum putem deosebi o bilă roșie sub lumină albă de o bilă albă luminată cu un bec roșu? Dacă nu știm nimic despre culoarea sursei de lumină sau a suprafeței, nu le putem deosebi! Acesta este un exemplu de indeterminare: putem afla culoarea sursei de lumină dacă știm culoarea bilei, și putem afla culoarea bilei dacă știm culoarea sursei. E însă imposibil să extragem informații despre ambele dintr-o singură imagine.
Numărătorul de bile roșii este un proiect foarte simplu, și totuși o soluție a problemei nu este evidentă. Ce putem face în cazuri mult mai complicate, cum ar fi recunoașterea fețelor umane, detectarea obstacolelor în aer liber -- caz în care un nor poate schimba drastic condițiile de iluminare -- sau în alte aplicații în care sursele de lumină sunt incontrolabile sau în schimbare? Problema inconsistenței culorilor în timp este extrem de dificilă. Deși au existat, și există în continuare, cercetători care studiază modalități de creștere a robusteții sistemelor bazate pe analiza culorilor, se pare că ideea de a utiliza culoarea pentru a obține mai multă informație decît cea din imagini alb-negru este nepopulară.
Captarea imaginii nu este probabil un domeniu de cercetare academică, însă face parte din cunoștințele obligatorii pentru cei care lucrează în CV.
Putem privi o imagine ca fiind o funcție, definită în două dimensiuni (cele două axe ale imaginii) a cărei valoare este culoarea (sau intensitatea luminii, în cazul imaginilor alb-negru).
În această accepțiune, atît domeniul cît și codomeniul funcției sunt continue. Pentru că fiecare element fotosensibil are dimensiuni finite, în procesul de captare a imaginii domeniul este discretizat într-o grilă; fiecare celulă a grilei corespunde unui element fotosensibil (pixel). Această transformare din spațiul continuu în cel discret se numește eșantionare (sampling).
În plus, valoarea culorii sau a intensității luminii este de asemenea într-un spațiu continuu; aparatele vor discerne însă un număr finit de valori diferite. Aceasta este cuantizarea valorilor. De exemplu aparatele de filmat alb-negru se limitează adesea la 256 nivele de gri. O bună înțelegere a limitărilor fizice și teoretice ale senzorilor este un element cheie în adaptarea algoritmilor pentru diferitele aplicații.
Una dintre cele mai elementare operații pe care le putem face cu imagini este de a întreba ``cît de asemănătoare sunt aceste două imagini''? Dacă putem răspunde în mod rezonabil la o astfel de întrebare, deschidem posibilitatea foarte multor aplicații: căutare de imagini pe Internet sau în biblioteci digitale sau recunoașterea obiectelor (prin compararea cu o imagine-prototip), care la rîndul lor permit apoi aplicații mult mai sofisticate.
Cu toate că întrebarea asta pare simplă, chiar și pentru un om răspunsul nu este întotdeauna evident. De fapt, ca să putem răspunde, trebuie să clarificăm care este măsura noastră de ``apropiere'' sau ``distanță'' între două imagini. În plus, aplicații diferite vor avea probabil noțiuni diferite de ``aproape'': de exemplu un botanist va considera două imagini care conțin o tufă cu gogoșari asemănătoare, chiar dacă unul din gogoșari este într-un ghiveci în interior iar celălalt undeva pe cîmp, pe cînd un specialist în decorațiuni interioare va socoti cele două imagini ca fiind foarte diferite (și probabil va fi oripilat de ideea de a avea pe post de ornament o tufă cu gogoșari).
Din fericire algebra ne pune la dispoziție niște unelte foarte simple cu care putem rezolva în mod foarte eficace măcar o parte din problemă. Iată soluția folosită în practică, ilustrată în figura 3:
Iată cîteva exemple de parametri:
Asamblăm pentru fiecare imagine colecția aceasta de valori într-un vector.
Dacă avem n valori diferite pentru o imagine, obținem un vector într-un spațiu n-dimensional. În caz extrem, putem vedea întreaga imagine ca pe un vector într-un spațiu x * y-dimensional, unde x și y sunt dimensiunile în pixeli, iar valoarea în fiecare punct din imagine este intensitatea culorii din acel punct.
În general această soluție extremă nu este practică, din două motive:
A doua metodă este recomandabilă, pentru că este insenzitivă la scalarea vectorului (de exemplu, pentru parametrii exemplificați mai sus, unghiul dintre doi vectori nu se schimbă dacă dublăm dimensiunea uneia dintre ele). Ambele metrici se pot calcula foarte ușor: prima necesită n scăderi, iar a două n înmulțiri și adunări plus un radical (lăsăm detaliile pe seama unui curs introductiv de algebră lineară).
Desigur, într-un fel am ascuns praful sub covor: am transformat problema comparării de imagini în problema calculului de trăsături ``interesante''. Dar acesta este un progres substanțial; în mod surprinzător, foarte multe din trăsăturile relativ simple din exemplele de mai sus se dovedesc foarte eficace în practică pentru a compara imagini.
Deși nu sunt un subiect central în CV în robotică, vom trece în revistă tehnicile de căutare a imaginilor în bazele de date multi-media.
Distincția între între procesul de căutare a unei imagini după conținut și cel de recunoaștere a imaginii este destul de fină. Numeroase sisteme de recunoaștere pot fi folosite pentru a căuta imagini într-o bază de date. Distincția constă în faptul că, în cazul bazelor de date, imaginile sunt disponibile înainte de a începe căutarea deci ele pot fi pre-procesate. Putem astfel crea structuri de date off-line cu algoritmi prea costisitori pentru recunoașterea interactivă a obiectelor.
Să luăm pentru exemplu un sistem care sumarizează filme video; dorim să folosim acest sistem pentru a vedea numai secvențele în care apare un anumit actor. Dacă sistemul poate înregistra filmul pentru prelucrare, tehnicile folosite sunt foarte diferite decît în cazul în care trebuie să recunoască insul atunci cînd apare la televizor.
Există două tipuri de căutări: cele care cer de la utilizator o imagine-exemplu, și cele care pornesc de la o interogare sub formă de cuvinte. Asemenea tipuri de sisteme, deși departe de a fi perfecte, există deja în operație pe Internet. Pentru prima categorie găsim ilustrativ sistemul dezvoltat la INRIA (Institut National de Recherche en Informatique et Automatique), în Franța: http://www-rocq.inria.fr/cgi-bin/imedia/surfimage.cgi.
Sistemele din a doua categorie sunt mai puțin robuste; de exemplu cel dezvoltat la C&C Research Laboratories, NEC USA, http://www.ccrl.com/amore/. Rezultatul unei căutări executate de noi este prezentat în figura 4.
Pentru a recunoaște obiecte, se pornește de la un set de modele ale obiectelor; cînd o imagine este prezentată sistemului pentru analiză, modelele disponibile sunt folosite pentru a determina care sunt obiectele din imagine. Problemele de rezolvat sunt însă foarte dificile: pentru a recunoaște un obiect într-o imagine, ar trebui să știm cum arată văzut din orice poziție, și cu orice sursă de iluminare. În practică această cerință este imposibil de satisfăcut. În cazul în care avem un model complet al obiectului, algoritmii de recunoaștere încearcă să determine care este poziția și iluminarea cea mai plauzibilă pentru a ``explica'' imaginea.
O alta problemă fundamentală în CV este cea de a separa într-o imagine diferitele obiecte care apar. Dificultatea acestei probleme variază enorm în funcție de imaginea cu pricina; cu cît iluminația este mai uniformă, obiectele au culori mai contrastante și imaginea conține mai puțin zgomot, cu atît problema segmentării este mai simplă.
Există foarte multe metode pentru a segmenta imagini. Vom indica aici schematic una dintre ele, care ``crește'' regiunile în jurul unor nuclee:
Imaginea 5 arată un exemplu de imagine segmentată automat pornind de la cîteva puncte etichetate manual.
Problema mozaicurilor este de a îmbina a mai multe imagini parțiale ale unei scene într-o singură imagine cît mai cuprinzătoare. Una dintre aplicațiile acestei tehnici este alcătuirea unor hărți detaliate din imagini aeriene. În acest caz ``lipirea'' imaginilor este relativ simplă, întrucît mișcarea este rectilinie. Mult mai spectaculos și mai dificil este să folosim o secvență video pentru a construi o imagine de ansamblu, ca în figura 6.
Dificultatea majoră a alcătuirii mozaicurilor constă în selecționarea regiunilor din fiecare imagine care trebuie folosite în imaginea panoramică, și mai ales în calculul deformărilor aplicate fiecărei regiuni pentru ca ele să se îmbine corect. Gradul de dificultate depinde de mișcarea pe care camera de luat vederi o întreprinde. În cazul din figura 6, camera a efectuat două rotații, în plan orizontal și vertical, de unde imaginea panoramică în forma de cruce. În acest caz algoritmii urmăresc ``mișcarea'' pixelilor de la o imagine la alta, pentru a calcula poziția fiecăreia dintre imagini în cea finală.
Mai recent s-au elaborat algoritmi eficienți pentru cazuri mult mai dificile, în care secvențele video conțin efecte ``zoom'' sau mișcare înainte-înapoi. Algoritmii fac o proiecție pe o ``conductă'' virtuală, care permite alipirea imaginilor cu rezultate spectaculoase.
O aplicație originală a imaginilor-mozaic este utilizarea lor pentru ghidarea vehiculelor robotice în medii controlate. Un proiect al Institutul de Robotica al Universității Carnegi Mellon utilizează mozaicuri imense, formate din imagini ale podelei unei hale, pentru a permite localizarea în interior a unei echipe de elevatoare robotizate. Un vehicul de recunoaștere trece în prealabil deasupra întregii suprafețe a halei, înregistrînd imagini și ``lipindu-le''. În timpul funcționării, celelalte elevatoare pleacă de la puncte fixe, și compară încontinuu imaginea de la propria cameră cu imaginea panoramică obținută în prealabil. În felul acesta se poate obține o localizare cu o precizie de cîțiva milimetri.
În numeroase situații informația vizuală este captată în mod continuu, în intenția de a detecta schimbările care se petrec. Un exemplu clasic provine din aplicațiile de supraveghere (surveillance). Dacă avem o incintă cu un sistem de camere video a căror orientare poate fi controlată de la distanță, vrem ca în cazul în care un intrus este descoperit, camerele să-și schimbe orientarea astfel ca intrusul să rămînă mereu în cîmpul vizual. În acest caz va trebui să calculăm mișcarea siluetei între fiecare două imagini consecutive.
O altă posibilă aplicație este navigarea automobilelor robotizate (vedeți exemplul NAVLAB în articolul despre cercetarea în robotică), sau monitorizarea automată a traficului. În cadrul unui proiect de cercetare al universității Stanford din California, s-au dezvoltat sisteme care permit detectarea și urmărirea siluetelor automobilelor pe străzi. Urmărind viteza de mișcare a automobilelor în imagine se poate evalua viteza lor reală; se pot detecta în felul acesta fie excesele de viteza, fie blocajele de circulație. În cazul automobilelor robotizate, urmărirea contururilor celorlalte mașini din cîmpul vizual este folosită pentru a evita coliziunile.
Exista numeroși algoritmi pentru analiza mișcării și urmărirea contururilor. Poate cei mai simpli și mai răspîndiți sunt cei bazați pe analizarea fluxului optic (optical flow). O metodă de a determina deplasarea fiecărui pixel între două imagini succesive, pornind de la presupunerea că în imagine culorile variază gradual. Să presupunem că imaginea este un gri din ce în ce mai închis, de la stînga la dreapta. Pentru a determina mișcarea, comparăm culoarea unui punct din imaginea originală cu a unui punct din cea finală; dacă punctul în final e mai închis la culoare, obiectul s-a deplasat spre stînga. Pentru fiecare punct din imagine se obține astfel un vector care indică direcția și deplasarea punctului pentru a ajunge la poziția sa din imaginea succesivă. În felul acesta, pentru a urmări un contur de-a lungul unei secvențe video, putem aplica aceiași vectori de deplasare fiecărui punct de pe contur.
Dacă există o tehnologie consacrată în CV, atunci e vorba de stereoscopie. Stereoscopia este procedeul prin care se poate obține informație tridimensională pornind de la două sau mai multe imagini. Principiul este cel pe care se bazează percepția umană. Faceți următorul experiment: țineți pentru cîteva secunde un deget la cîțiva centimetri de ochi. Închideți și deschideți ochii pe rînd: veți observa cum degetul ``sare'', datorită poziției diferite față de ``dispozitivul'' folosit pentru obținerea imaginii. Depărtați apoi degetul la distanța maximă posibilă și încercați din nou; de data aceasta, deplasarea va fi considerabil mai mică. Distanța dintre pozițiile degetului în cele doua imagini (cea de la ochiul stîng și cea de la cel drept) se numește disparitate. Ea este proporțională cu distanța dintre ochi și invers proporțională cu distanța între deget și ochi.
Figura 8 explică procedeul folosit de algoritmii pentru procesarea imaginilor stereoscopice. Dacă reușim să identificăm punctele corespunzătoare din cele două imagini putem calcula disparitatea d. Din Formula d = f B/z deducem distanța z pînă la obiect (f fiind distanța focală, și B distanța dintre cele două obiective). Dacă putem calcula z pentru fiecare punct din imagine, înseamnă că putem afla distanțele pînă la toate punctele vizibile în ambele imagini.
Aplicațiile stereoscopiei sunt nenumărate: practic orice sistem care trebuie să măsoare distanțe rapid, fără prea mare precizie, poate folosi stereoscopia. Calcularea precisă a unui model 3D pornind de la un sistem stereoscopic este însă dificilă, cerînd o calibrare (calculul parametrilor sistemului, f și B) foarte precisă. Prețul scăzut al sistemelor stereoscopice și relativa simplitate a algoritmilor le face foarte atractive. Figura 9 prezintă stereoscopia aplicată folosind imagini aeriene.
Termenul de ``învățare'' este folosit în CV cu multă generozitate. Practic orice algoritm care determină parametri de funcționare poate fi atribuit acestei categorii. Un exemplu este ``antrenarea'' unui sistem pentru segmentare de imagini. Unul din autori lucrează la implementarea unui astfel de sistem. Acesta folosește o rețea neurală și un clasificator bayesian. Sistemul este antrenat să separe în imaginile unei livezi regiunile de iarbă, copaci, cer și alte obiecte. Sistemul va fi folosit de un tractor robotizat pentru detecția obstacolelor.
Deși folosește aceleași date, antrenarea este diferită pentru cele două sisteme. Se folosește un set de mici regiuni din imagini ``tipice'' din livadă, segmentate și clasificate manual. Rețelei neurale i se prezintă apoi fiecare regiune, și în funcție de clasificare (corectă sau incorectă) se ajustează parametrii rețelei prin algoritmul backpropagation. În cazul clasificatorului bayesian, datele de antrenament sunt folosite pentru a extrage informații statistice despre distribuția culorilor în fiecare clasă de obiecte (iarbă, pomi, etc). Mai precis, algoritmul utilizează datele de antrenament pentru a calcula culorile medii și covarianța fiecărei clase.
Încheiem aici acest mini-tur al Computer Vision. Vrem încă o dată să subliniem vastitatea domeniului, și faptul că numeroase aspecte importante nu au fost atinse. Nu am discutat, de pildă, despre ``alinierea'' informației provenind de la diferiți senzori, despre calibrarea sistemelor stereoscopice, despre extragerea informației 3D dintr-o secvență video, despre stabilizarea imaginilor și multe alte domenii.
Sperînd ca am reușit să vă trezim interesul, vă recomandăm o excelentă sursă de informații în format electronic. Proiectul ``CV-online'' a fost inițiat de Catedra de Informatică a Universității din Edinburgh; http://www.dai.ed.ac.uk/CVonline/. Colaboratorii sunt cercetători de renume, care au contribuit și contribuie în continuare benevol la cel mai mare depozit de informații despre CV disponibil pe Internet.