[SCRÂȚIT] [FOSȘIT] [CLIC] BERTHOLD HORN: Vom începe astăzi vorbind puțin despre câștigul de zgomot. Cu alte cuvinte, relația dintre erorile de măsurare și erorile de estimare a cantităților care vă interesează despre mediu. Și se întâmplă să am acest exemplu pe computer. Nu este legat de viziune, dar ilustrează unele dintre puncte. Deci ce este asta? Acesta este un echivalent interior al GPS-ului în care în loc să folosim sincronizarea semnalelor de la sateliți, folosim sincronizarea semnalelor de la punctele de acces Wi-Fi. Și este în lucru de câțiva ani, dar nu prea există încă. De exemplu, în acest moment, aveți nevoie de Android 9. Și singurul telefon care rulează Android 9 este Pixel. Și majoritatea punctelor de acces Wi-Fi nu-- ei bine, toate punctele de acces nu îl acceptă. Am mers cu mașina în căutarea lor. Am înregistrat mii și am găsit unul. Oricum, ideea este că în viitor, vom putea măsura distanțele până la punctele de acces. Și, desigur, vă puteți imagina că precizia este oarecum limitată, deoarece radiația electromagnetică se deplasează cu o nanosecundă pe picior. Deci, trebuie să măsurați cu adevărat acești timpi de călătorie dus-întors de la telefon la punctul de acces și înapoi cu o precizie foarte mare. Dar să presupunem că o faci. Deci ai o grămadă de puncte de acces. Adică, avem patru chiar aici, în camera asta. Și apoi, treaba ta este să determine exactitatea locației tale. Și la fel ca în GPS, puteți măsura distanța până la satelit , să spunem, 10 metri. Asta nu înseamnă că precizia la care te poți aștepta pentru coordonatele tale x, y, z - latitudine, longitudine și altitudine - este de 10 metri. De fapt, de obicei este mult mai rău. Și în terminologia GPS, asta se numește diluare a preciziei. Și în GPS, este diferit pentru orizontală decât pentru verticală. Acesta este un alt punct interesant, că vă puteți determina poziția orizontală cu o precizie mai mare decât poziția verticală. Așa că, ca în această dimineață, GPS-ul telefonului meu spunea că mă aflam la minus 36 de metri. Și știu că Boston este la nivelul mării și nivelul apei crește, dar probabil că nu este exact. Deci, ideea este că atunci când facem această analiză a câștigului de zgomot a unui proces de viziune artificială, probabil că va fi diferit în direcții diferite. Deci, nu este doar un singur număr care spune că precizia ta este de 1 metru. Deci, înapoi la acesta aici. Deci, punctele verzi sunt pentru punctele de acces Wi-Fi - frumos, plasate simetric. Punctele roșii sunt locuri posibile în care poate fi telefonul tău mobil. Iar cercurile, sau elipsele, sunt zone de-- sau contururi de eroare constantă. Deci, cu alte cuvinte, dacă treceți la acea curbă, veți fi în eroare în ceea ce privește distanțele pe care le puteți măsura. Și, întorcând asta, vă spune exactitatea la care vă puteți aștepta. Și arată foarte frumos la mijloc acolo. Sunt cercuri mici, adică A, că îți vei putea determina locația destul de precis și B, că nu există o diferență în direcții diferite. Nu este ca și cum ai putea determina x mai bine decât y. Dar apoi, când ieși în afara gaurii convexe a respondenților, vei vedea că lucrurile devin alungite. Avem aceste elipse și devin mai mari aici jos. Ce înseamnă asta? Ei bine, este că nu vă veți putea măsura exact exactitatea în această direcție. Dar o poți determina totuși destul de bine în această direcție. De ce, mă rog? Ei bine, dacă vă gândiți la distanțele până la respondenți și la modul în care se schimbă pe măsură ce vă deplasați, dacă vă deplasați în această direcție, vă deplasați în unghi drept, aproape, față de acei vectori. Și astfel nu modificați cu mult lungimea acelor vectori . Și, în mod corespunzător, nu veți vedea o schimbare mare a semnalului. Și astfel, în mod corespunzător, nu veți putea determina cu exactitate poziția. În timp ce dacă te miști radial, dacă mă mișc în această direcție, am un impact direct asupra distanței până la acela și cel de sus. Și cu acesta, sunt într-un unghi. Dar este ca 45 de grade, deci aceasta este rădăcina pătrată de 2-- 1 peste rădăcina pătrată de 2, deci este 70%. Da, sigur. Este cea din urmă. Deci, ideea este că roșul este o poziție posibilă pentru echipamentul meu de detectare, iar cercul din jurul roșului este cât de departe trebuie să merg înainte ca eroarea să devină o anumită valoare de prag. Deci, cu alte cuvinte, dacă sunt aici și măsoară aceste distanțe și nu există nicio eroare de măsurare, atunci suma pătratelor erorilor va fi 0. Dacă mă îndepărtez puțin, distanța mea față de respondenți este greșită. Și pot... în acest caz, am patru dintre acele numere. Și mă uit la cât de mari sunt și adun suma pătratelor ca măsură generală a erorii. Deci, când desenez cercul, acesta este locul tuturor punctelor care au aceeași eroare de dimensiune. Și aici, puteți vedea că trebuie să mă îndepărtez înainte să văd acea eroare. Și invers, sunt mai puțin sensibil la eroare și nu voi putea determina poziția la fel de precis. Deci ăla e destul de curat. Dar să presupunem că avem trei transpondere. Acum, puteți vedea că devine puțin mai dezordonat și rezultate ușor surprinzătoare . Una este că aici, aceste lucruri care arată ca niște elipse devin non-eliptice, pentru că sunt elipse în limita deplasărilor foarte mici. Dar pentru deplasări mai mari, curba poate avea orice formă. Dar, în cele mai multe cazuri, ne vom concentra pe cazul infinitezimal - simplifică viața. Deci, ce este interesant la asta? Ei bine, unul dintre lucruri este că este destul de precis aici, care este departe de respondenți și este departe de centroid. Te-ai gândi, ei bine, poate ar trebui să fie destul de bine la centroid, sau la intersecția bisectoarelor unghiului, sau la intersecția perpendicularelor de pe cealaltă parte a triunghiului - ceva de genul ăsta. Dar nu este cazul. Și deci acest lucru este interesant, pentru că înseamnă că ați putea să faceți lucruri departe de locul unde sunt cei care răspund. Deci, cei care răspund ar putea fi ca pe un hol și tot îți va oferi o precizie bună departe de asta. În același timp, putem arăta că, dacă le pui într-o linie, este o idee foarte proastă. Și, desigur, asta sunt ei aici... peste tot. Ei sunt doar... oricum. Și din nou, ideea aici este că, dacă sunt aici și mă mișc puțin în lateral, nu schimb prea mult distanța până la cei trei respondenți, pentru că mă mișc destul de mult în unghi drept față de cei trei. vectori. Și, prin urmare, nu voi observa cu adevărat că m-am mutat. Și, prin urmare, dimpotrivă, nu pot determina exactitatea mea în acea direcție, de asemenea. Deci asta e cu trei. Și să mergem încă unul. Deci cu doi respondenți. Și puteți vedea că există unele zone în care funcționează foarte bine aici, dar între ele, nu atât de bine. De ce? Ei bine, pentru că dacă mă mișc pe orizontală, chiar nu schimb foarte mult distanța. Ar fi a doua... ar fi pătratică. Se va mișca, schimbându-se ca x pătrat. Și astfel, pentru x mic, este o schimbare foarte mică. Și chiar mai rău aici. Și apoi, începi să vezi ceva. Poate puteți vedea un loc de locuri în care funcționează destul de bine. Și proprietatea lor este că din fiecare dintre acele poziții în care funcționează bine, cei doi respondenți par să fie în unghi drept unul față de celălalt. Și asta are sens, pentru că, practic, spui, OK, am o constrângere într-o direcție și o direcție în unghi drept. Dacă rotesc sistemul de coordonate, pot face acel x și y. Am o constrângere în x și am o constrângere în y. Este ca și condiția ideală. Dacă cele două direcții sunt foarte asemănătoare, atunci mă pot deplasa în unghi drept față de medie și să nu schimb foarte mult lucrurile. Deci, se pare că punctele în care respondenții apar la 90 de grade unul de celălalt sunt deosebit de bune. Și care este locul tuturor acestor puncte? Geometrie, teoreme despre cercuri - deci punctele de la periferia unui cerc au diametrul, punctele de capăt ale diametrului, la un unghi drept unul de altul. Nu așa se spune teorema, dar cred la ce vreau să spun. Deci, dacă desenez un cerc cu linia care leagă cei doi respondenți ca diametru, punctele din acel cerc vor avea această proprietate. Și nu este surprinzător, acestea sunt punctele în care obțin o precizie bună, chiar și în acest caz simplu. OK, destule. Să revenim la... Deci ideea este foarte simplă. Este că avem un fel de transformare care ne duce de la o cantitate și un mediu pe care vrem să le măsurăm -- nu știu, distanță, viteză, orice -- la ceva ce putem observa în instrumentul nostru, camera, să zicem . Și deci problema directă este că noi-- să luăm doar cazul simplu al unui scalar. Există un x. Și nu observăm x direct. Putem măsura f din x. Și bineînțeles, în viziune, problema noastră este să mergem în altă direcție. Dacă măsoară f din x, ce este x? Și dacă f este inevitabil-- o funcție plăcută, netedă, monotonă , putem face asta. Dar apoi a doua întrebare este, OK, măsurătorile mele nu sunt perfecte, așa că nu știu foarte bine f de x. Ce înseamnă asta despre x? Și OK, asta înseamnă că x nu va fi precis, ceea ce nu este catastrofal, dar cât de mare este eroarea? Și, desigur, răspunsul este foarte simplu. Deci, iată funcția noastră. Și să presupunem că avem un anumit x. Apoi direcția înainte este luăm x, urcăm la grafic, citim o anumită valoare, y. Și ceea ce facem este că primim y de la camera noastră sau orice altceva și mergem în direcția opusă. Deci inversăm acea funcție. Desigur, vor fi probleme dacă are mai multe valori. Atunci nu va exista un răspuns unic. Dar pentru moment, să presupunem că o putem inversa. OK, deci următoarea întrebare este, ce se întâmplă dacă există o eroare? Ei bine, în direcția înainte, este destul de simplu. Să presupunem că iau o a doua valoare aici, atunci va fi o eroare aici sus-- delta y. Și care este relația dintre delta x și delta y? Calcul, derivate... OK, știi care este răspunsul. Este delta y peste delta x este practic derivata lui f din x, sau cel puțin în limită, deoarece le facem foarte mici. Deci relația dintre zgomotul din cantitatea care ne interesează și zgomotul din măsurare este doar derivata acelei funcție de transfer. Și invers, încercăm să mergem invers. Vom întoarce asta pe cap. Și acum vedem că zgomotul din rezultatul nostru este legat de zgomotul din măsurarea prin acest 1 peste f prim. Deci clar, f prim egal cu 0 este rău. Și asta nu este prea surprinzător. Dacă acest lucru continuă și devine plat, înseamnă că lucrul pe care îl măsurăm nu răspunde la cantitatea care ne interesează. Deci, nu este surprinzător, nu o putem recupera. Dar, de asemenea, dacă f prim al lui x este mic, nu este atât de bine. Pentru că dacă suntem aici și facem o schimbare în x, aceasta va fi o schimbare aproape imperceptibil de mică în y. Și invers, dacă există vreun zgomot în măsurare, nu știu cu adevărat unde sunt. Pentru că să presupunem că zgomotul în măsurare este că, ei bine, asta înseamnă că au o incertitudine de acea dimensiune în cantitatea pe care încerc să o estimez. Si asta e. Doar că... acesta este câștigul de zgomot. În multe situații, nu ne facem prea multe griji pentru asta. Trebuie să ne îngrijorăm în viziunea artificială, așa cum am menționat, din cauza zgomotului din măsurători. OK, deci acesta este un caz foarte simplu. Tocmai am primit cantitatea scalară. Să extindem puțin acest lucru. Recuperăm un vector. Deci să presupunem... deci aceasta este direcția înainte. Încercăm să măsurăm ceva, cum ar fi locația în spațiu a punctului final al brațului manipulator robot -- x, y, z. Și folosim o cameră sau câteva camere pentru a-l fotografia. Și astfel măsurăm ceva din imagine pe care îl vom numi x, care este o transformare a cantității pe care o dorim. Acum, în acest caz, nu va fi adesea atât de liniar, dar să presupunem că am avea un caz simplu în care există o transformare liniară. Ei bine, atunci desigur, facem doar asta. Dacă putem inversa acea matrice, acesta este răspunsul nostru. Am estimat unde se află punctul final al manipulatorului robot. Dar, desigur, ne interesează și pe noi cât de bun este răspunsul? Și așa am dori să știm dacă schimb x puțin, cât de mult se schimbă b? Așadar, un mod grosolan de a vorbi despre câștig ar fi doar să luăm amploarea modificării rezultatului și să o împărțim la mărimea modificării măsurătorii. Dar asta nu este... nu ia în considerare anizotropia. După cum am văzut în acele diagrame, eroarea poate fi foarte mică dacă mergeți într-o anumită direcție. Dar ar putea fi destul de mare în altă direcție. Deci răspunsul este puțin mai nuanțat. Ar trebui să fim puțin mai atenți. Deci, să spunem puțin mai multe despre asta. Cum rezolvăm ecuațiile liniare? Folosim eliminarea gaussiana. Și dacă faci asta, vii cu o formulă, care include inversul determinantului. Și astfel concluzia este că determinantul egal cu 0 este foarte rău, pentru că atunci nu poți face asta. Și, de fapt, mărimea determinantului fiind mic nu este nici atât de bună. De ce? Ei bine, pentru că veți lua 1 peste un număr mic, vă oferă un număr mare. Și apoi înmulțiți măsurătorile experimentale cu acel număr mare. Și astfel, orice mică, mică abatere din aceasta va fi mărită de inversul determinantului. Și să ne întoarcem la un exemplu pe care l-am făcut, care a fost 2D. Deci, matricea noastră în acest caz este 2 cu 2. Deci, pentru început, doar pentru a vă reîmprospăta memoria - și am făcut asta ultima dată, dar cred că am primit o mulțime de priviri goale și așa că o voi face din nou. Deci, care este inversul acestei matrice 2 cu 2? Asta este . Și de unde știu asta, sau cum pot verifica asta? Ei bine, trebuie doar să înmulțiți. Si ce primesti? ad minus bc, apoi ab minus ab plus ab. Și aici obținem cd minus cd. Și apoi, în sfârșit, obținem minus bc plus ad. Deci acestea, desigur, sunt 0. Și acestea sunt la fel. Și astfel, pentru matrice 2 cu 2, credem că poate obține în mod explicit o inversă. Și, desigur, avem mult interes pentru această cantitate. Pentru că dacă acea cantitate este mică, atunci calculul nostru este supus amplificării erorii. Și asta a apărut pentru că ne uitam la calculul mișcării imaginii. Deci aveam -- la doi pixeli -- aveam ecuația noastră de constrângere, care arăta așa. Deci a avut două dintre acestea. Și acum, rezolvăm pentru mișcarea u și v. Și, desigur, obținem doar... doar folosind formula de aici și așa mai departe. Așa că doar îl conectăm. Deci există un exemplu în care putem aplica această idee de câștig de zgomot direct. Și știm că dacă această cantitate este mică, vom amplifica foarte mult zgomotul. Și am trecut deja prin argumentul care înseamnă că gradienții de luminozitate la cei doi pixeli sunt similari. Ele sunt orientate în aceeași direcție sau aproape în aceeași direcție. Și asta înseamnă că nu oferă informații foarte diferite. Este aproape ca și cum ai fi făcut o singură măsurătoare. Așa că nu e de mirare că răspunsul este neclar. Și putem intra în diagrama spațiului vitezei. Fiecare dintre aceste constrângeri - aceasta este o linie dreaptă. De ce? Ei bine, pentru că este o funcție liniară a lui u și v egală cu 0. Deci asta ne va da o linie dreaptă. Acest lucru ne va oferi o linie dreaptă. Practic căutăm un punct în plan care se află pe ambele linii. Deci căutăm intersecția celor două linii. Dacă cele două linii sunt în unghi drept, acesta este un punct foarte bine definit. Dacă cele două linii sunt aproape paralele, atunci vă puteți imagina că orice deplasare mică poate muta foarte mult punctul de intersecție. Deci, acesta este cazul care nu este atât de bun. Și dacă îl mut puțin pe acesta, să spunem că îl voi muta aici, este o schimbare uriașă în punctul de intersecție. Deci, asta corespunde cazului în care cei doi gradienți sunt aproape paraleli și asta face ca această cantitate să fie mică. Observați că nu toată speranța este pierdută. Este adevărat că componenta în această direcție... nu o știm prea bine. Dar avem constrângeri foarte bune în această direcție. Deci, aceasta este o altă lecție, și anume că putem avea o situație în care câștigul de zgomot este mare, dar poate să nu fie la fel de mare în toate direcțiile, așa cum am văzut în diagramele pe care vi le-am arătat. Și este bine să știi în ce componentă poți avea încredere. Dacă îmi voi pune robotul să se mute și să ia o piesă, este un lucru util de știut. BINE. Așa că haideți să revizuim puțin și vreau să trec la ceva numit timp de contact. Decupăm materialul în diagonală. Adică, ar fi frumos să prezint toate aceste lucruri mai întâi și toate acele lucruri în al doilea rând. Dar probabil ai adormi. Vreau să vă motivez arătându-vă că dacă puneți aceste piese împreună, puteți obține rezultate destul de puternice. Deci hai sa mergem acolo. Să vedem dacă putem, în primul rând, să trecem în revistă ce am făcut până acum. Deci avem această idee-- presupunerea de luminozitate constantă. Și avem acea imagine solidă, care a fost o funcție de x, y și t. Și am urmat o curbă până aici, care este poate imaginea unui anumit lucru din mediul înconjurător care se mișcă sau camera se mișcă. Dar presupunem că, pe măsură ce se mișcă, proprietățile sale fizice nu se schimbă, așa că va fi încă fotografiat cu aceeași luminozitate. Deci, de-a lungul acestei curbe, acest lucru este adevărat - derivata totală. Și din asta, am obținut ecuația noastră de constrângere. Probabil că te vei sătura să-l vezi pe acela. Și deci aceasta este ipoteza de luminozitate constantă. Și din aceasta, prin regula lanțului, obținem această constrângere, care se numește și ecuația constrângerii de modificare a luminozității. Și folosim asta în multe moduri diferite. Adică, este fundamental pentru ceea ce se întâmplă într-o imagine când există mișcare. Și apoi, ne-am uitat în special la problema mouse-ului optic, care este o versiune simplificată a lucrurilor pe care le vom analiza mai târziu. Este simplificat în sensul că presupunem că mouse-ul optic lucrează pe o suprafață plană și că întreaga imagine se mișcă ca una singură. Cu alte cuvinte, u și v sunt aceleași pentru întreaga imagine. Și acesta este, evident, un caz foarte frumos și simplu. Și am spus că o modalitate de a rezolva asta este să o transformăm într-o problemă cu cele mai mici pătrate. Deci vom aduna pe întreaga imagine în direcția x și y, vom integra -- sau, în cazul discret, vom lua unele dintre rândurile și coloanele -- din această cantitate, care se presupune că este 0. Deci ar trebui să obținem 0. De ce ar putea să nu fie 0? Ei bine, dacă introduceți valori greșite pentru viteza, u și v, nu veți obține 0. Și astfel, o modalitate de a încerca să găsiți viteza potrivită este să găsiți minimul acestei integrale. Acum, în practică, măsurătorile tale -- Ex, Ey și Et -- vor fi corupte de zgomot. Și astfel nu veți obține niciodată ca această integrală să fie 0. Deci răspunsul este că nu vom găsi locul unde este 0. Răspunsul este că o vom face cât mai mică posibil. Și aceasta este estimarea noastră a valorii corecte pentru u și v. Și am putea justifica asta printr-un argument statistic probabil, dar cred că probabil că nu este benefic să mergem acolo. Vom doar... pare a fi un lucru intuitiv corect de făcut. OK, deci asta vom minimiza. Și avem doar doi parametri, așa că în mod clar aceasta este o problemă de calcul. Luăm doar derivata și setăm rezultatul egal cu 0. Deci presupunem că aceasta variază ușor cu u și v, așa cum este evident. Da? Ei bine, bine, așa că hai să o punem așa. Deci, să presupunem că l-am făcut Ex, Ey, Et și acum îmi spuneți că u este 1 și v este 2. Și îl pot conecta la ecuație și obțin un număr mare. Sunt probabil să spun, nu cred că ai dreptate. Și apoi spune, ei bine, u este 1 și v este 3. Și îl conectez în această ecuație, obțin un număr mai mic. În care ai avea încredere? Deci este... în mod ideal, acesta ar trebui să fie foarte mic, sau chiar 0. Și... PUBLIC: Și de ce este așa? BERTHOLD HORN: Îmi pare rău? PUBLIC: De ce vrei un număr mai mic pentru asta? BERTHOLD HORN: Ei bine, pentru că dacă nu a existat nicio eroare de măsurare - dacă nu a existat nicio eroare nici în măsurare, fie în cunoștințele tale despre u și v, atunci ar fi 0 la fiecare pixel și, deci, se integrează pe întreaga imagine. . BINE. Bine, și nu o să fac asta, pentru că este prea aproape de ceea ce ai făcut tu în problema temelor. Deci ne oprim aici. OK, ce vom face? Ei bine, un caz foarte simplu este în care viteza este aceeași peste tot - cazul fluxului optic. Și noi am făcut asta. Celelalte cazuri simple în care u și v nu sunt constante, dar variază într-un mod foarte previzibil în imagine. Și am văzut asta ultima dată când vorbeam despre focalizarea expansiunii. Așa că haideți, din nou, să trecem în revistă și să revenim la tot drumul la proiecția în perspectivă. Corect, deci am avut o relație între coordonatele lumii și coordonatele imaginii. Deci literele mari sunt coordonate în lume, iar cele mici corespund în imagine. Deci asta a fost proiecția în perspectivă, din nou, într-un sistem de coordonate centrat pe cameră. Și apoi am spus, ei bine, acum să presupunem că lucrurile se mișcă -- X mare, Y mare, bz se schimbă. Și cum se schimbă micul x și micul y? Ei bine, facem diferențe în funcție de timp. Și obținem 1 peste f, dx dt este 1 peste z mare X dt. Și apoi, din păcate, îl avem și pe acesta. Sau scris într-o formă ceva mai frumoasă... nu? Deoarece dx dt este viteza în direcția x. Și pentru asta am folosit simbolul u. Și, în mod similar, în 3D, vom folosi suportul mare U pentru viteza în direcția x în lume. Și la fel, așa că avem asta. Și apoi, ne-am uitat la situația în care u este 0 și v este 0 și am numit-o focalizarea expansiunii pentru acea mișcare particulară. Și deci, dacă conectăm micul u este 0, obținem o relație aici care este... oh, unde este x0-ul meu? Deci hai sa o facem. Deci avem 0 este 1 peste zu minus-- iar acum X mare peste Z mare știm că este x peste F. deci și acesta este x0. Aici viteza este 0. Și, în mod similar, pentru direcția y, deci obținem x0 este f peste z, u peste w. Deci avem o relație între viteze, distanțe și unde este focalizarea expansiunii. Și apoi, am vorbit despre acea cantitate care apare acolo, care este w peste z, și ce este asta? Ei bine, poate mai ușor dacă îl întoarcem pe cap, așa cum am făcut data trecută. Și, desigur, W mare este componenta mișcării în direcția z. Deci e dz aici. Deci aceasta este o distanță peste viteză. Și așa am spus ultima dată că unitățile vor fi metru peste metru pe secundă sau secundă. Deci, acesta este de fapt momentul să contactăm... cât timp va dura până ne izbim de acel obiect dacă nimic nu se schimbă. Și aceasta este, evident, o cantitate utilă de încercat și de găsit. Și așa vom încerca să o găsim dintr-o secvență de măsurători de imagine. Acum, de fapt, o să numim asta-- o să-i dăm un nume c. Și c este de fapt 1 în timpul contactului. Și motivul pentru care este în mare parte pentru a face algebra mai simplă. După ce găsim c, desigur, putem găsi doar inversul său. Dar are avantajul că, dacă mișcarea este foarte ușoară, atunci timpul de contact poate fi mare, unde c doar devine aproape de 0. Da, scuze. Nu, am ezitat, pentru că nu părea corect. Dar mulțumesc. BINE. OK, deci să începem foarte simplu. Să presupunem că există doar mișcare în direcția z. Așa că mă îndrept spre perete. Și, desigur, imaginea se extinde pe măsură ce mă apropii de perete. Și care este punctul central al expansiunii? Ei bine, dacă mă mut direct la perete, concentrarea expansiunii va fi chiar în josul butoiului. Va fi la 0, 0. Deci, să luăm un caz special. Și apoi, conform formulelor pentru x0 și y0-- și dacă desenez diagrama pentru câmpul de mișcare, va arăta așa. Și așa câteva lucruri. Una este, ei bine, dacă pot măsura acei vectori, atunci am terminat. De ce trebuie să fac toate celelalte lucruri? Ei bine, treaba este că nu cunoaștem acei vectori. Tot ce avem sunt imagini. Imaginile sunt modele de luminozitate. Imaginile sunt luminozitatea în funcție de x și y. Nu există vectori acolo. Deci o abordare ar putea fi să găsim vectorii și apoi să-i intersectăm pentru a găsi unde se află acel punct. Deci, pentru noi, acest câmp vectorial este un instrument util pentru a vizualiza ceea ce se întâmplă. Dar datele experimentale reale sunt că există o imagine și apoi luăm o altă imagine. Iar cealaltă imagine este fie extinsă, fie micșorată. Și treaba noastră este să rezolvăm această problemă. Apoi, am avut săgețile îndreptate spre interior, ceea ce înseamnă că acesta este de fapt un focus de compresie, mai degrabă decât un focus de expansiune. Dar, desigur, depind doar de direcția de mișcare. Dacă stau aici și peretele se retrage cu o viteză pozitivă, atunci se va comprima în imagine și înțeleg asta. Pe de altă parte... și nu există niciun pericol. Timpul de contact este negativ. Am părăsit suprafața cu ceva timp în urmă. Dar cazul în care vom fi mai interesați este în care viteza peretelui în raport cu mine este negativă. Și apoi această diagramă este inversată și există un focus de expansiune. BINE. Deci ce putem face cu asta? Deci, în acest caz, ne întoarcem la aceeași veche ecuație. Și acum, în acest caz particular, U și V-- am făcut că am făcut capitalul U și capitalul V 0. Deci tot ce a mai rămas este acel al doilea termen. Și astfel U și V iau această formă. OK, așa că bagă asta acolo. Obținem, să vedem, U-- obținem cx, Ex plus y, Ey plus Et este 0. Așa că tocmai am combinat acești doi termeni. Și deci dacă aș vrea să... La fel cum am făcut înainte, putem măsura mișcarea unidimensională dintr-un pixel. În mod similar, aici putem măsura inversul timpului de contact doar din derivatele de luminozitate într-un punct al imaginii. Desigur, nu este probabil să fie foarte bun, deoarece toate aceste cantități sunt supuse zgomotului. Și de fapt, desigur, estimarea derivatelor înrăutățește lucrurile. Deci avem două numere care sunt supuse zgomotului. Le scadem. Dacă sunt similare ca mărime, nu mai rămâne decât zgomotul. Deci aceasta nu va fi o metodă foarte precisă. Înainte de a continua, totuși, să ne uităm la acest termen aici. Și voi numi asta gradient radial. Și am pus-o între ghilimele, pentru că nu e cea mai mare notație. Dar îl folosim atât de mult încât avem nevoie de o notație. Și ne putem gândi la el ca la acel produs punct. Avem doi vectori. Și care sunt acelea? Ei bine, acest vector este gradientul de luminozitate. Și continuăm să vedem gradientul de luminozitate. Și doar indică în direcția celei mai rapide schimbări de luminozitate a imaginii. O modalitate de a gândi imaginile, E de x și y, este ca o hartă topografică. Deci, dacă vă gândiți să traduceți luminozitatea în înălțime, atunci puteți vizualiza lucrul tridimensional. Iar imaginea este o suprafață în lucrul tridimensional. Iar gradientul de luminozitate este doar gradientul suprafeței. Este un vector în direcția celei mai abrupte ascensiuni. Dacă vreau să ajung cât mai repede la acest munte, urc pe panta. Și dacă vreau să cobor cât mai repede, merg în direcția opusă. Deci, acesta este Ex, Ey. Este gradientul luminozității. Și atunci ce este x și y? Ei bine, acesta este un vector radial. Este ca în sistemul de coordonate polare. Mi-aș putea imagina ridicarea unui sistem de coordonate polare în imagine cu originea în centru și acesta este acel vector. Și deci ceea ce face asta este că ia produsul punctual al celor doi. Deci, de exemplu, dacă sunt în unghi drept, atunci acesta va fi 0. Și dacă sunt paralele, atunci vor fi cât mai mari posibil. Acum, am putea... să vedem, în ce direcție vreau să merg? Să încercăm asta. Am putea normaliza acest lucru și îl putem transforma într-un vector unitar. Deci, în primul rând, recunoașteți că împărțind la rădăcina pătrată a lui x pătrat plus y pătrat, îl transform într-un vector unitar. Pentru că acum, dacă iei un produs punctat cu el însuși, primești 1. OK, așa e clar? Deci există un vector unitar. Vectorii unitari sunt utili pentru indicarea directiei. Deci aceasta nu are... ei bine, magnitudinea este 1, deci magnitudinea nu-mi spune nimic util. Dar este un mod de a vorbi despre direcții diferite. Și apoi, luarea produsului scalar cu alt vector face ce? Ei bine, vă oferă componenta acelui vector în acea direcție. Deci iată un vector. Și mă interesează cât de mult se îndreaptă în această direcție. Iau produsul punct și primesc acea componentă. Deci, ceea ce calculează cu adevărat este cât de mult din gradient este în această direcție radială. Și de aceea folosim acel termen, gradient radial. Și motivul pentru care îl pun între ghilimele este pentru că nu este chiar corect, pentru că există acest factor pe care l-am omis-- că nu este doar gradientul radial, ci este înmulțit cu raza. Dar, practic, măsoară cât de mult din variația luminozității este în direcția de ieșire din centrul imaginii. BINE. Și acum sunt gata să rezolv problema. Pentru că am această ecuație aici și am rezolvat-o pentru un singur punct, doar că nu prea am încredere în asta. Deci, ceea ce voi face este ca înainte să folosesc cele mai mici pătrate. Așa că vom minimiza... și asta este peste întreaga imagine. Și din nou, rețineți că avem de -a face cu cazuri foarte simple în care mișcarea din imagine nu este un câmp vectorial arbitrar, ci este definită de un număr mic de parametri. Da? Asta aici? Oh, deci asta iese din ecuația de acolo sus. Deci, există o ecuație pentru 1 peste f u este 1 peste z mare U minus wz x peste y-- peste z. Și, mai întâi de toate, se presupune că [AUDIO OUT] este acum 0. Presupunem că nu există mișcare în direcția x sau y, deci acești termeni dispar. Și celălalt termen-- am definit c la b w peste z. Și apoi, marele X peste z mic x peste F, din cauza ecuației de proiecție a perspectivei. OK, deci da, probabil că există mai mult de un pas de acolo sus până acolo jos. Dar este aplicarea proiecției în perspectivă a ecuației în cazul special în care există doar mișcare de-a lungul axei optice. Nu există mișcare în alte direcții. OK, deci din nou, ceea ce se întâmplă aici este că dacă am avea valoarea corectă a lui c și nu ar exista zgomot de măsurare, acesta ar fi 0 la fiecare pixel. Și deci, dacă o adunăm peste toți pixelii, ar trebui să fie totuși 0. Dacă introducem valoarea greșită a lui c, ar trebui să fie diferită de zero - să crească cu eroarea noastră în c. Așadar, găsirea lui c care face ca aceasta să fie cât mai mică posibil este modul nostru de a estima ceea ce este. Și da, poate fi justificat în termeni de... dacă presupui că zgomotul este gaussian și faci toate acele chestii statistice, probabilistice. Dar nu vreau să fac asta. Cred că este intuitiv că, dacă acesta ar trebui să fie 0 atunci când am informațiile corecte, atunci să o faceți cât mai mic posibil în prezența zgomotului este un lucru sensibil de făcut. Acum, doar... calcul. Există o singură necunoscută acolo, un singur buton pe care îl pot modifica. Deci voi vedea unde are o derivată 0. Și atât de bine, ce primesc? Primesc de 2 ori... e un pătrat acolo. Așa că voi primi de două ori tot ce este sub pătrat. Și apoi trebuie să diferențiez și acest termen. Deci, înmulțit cu-- și acum, derivata acestuia în raport cu c este, desigur, doar acea parte. Așa că înmulțiți cu-- și dacă este egal cu 0, nu prea îmi pasă de 2, așa că scăpați de asta. Și acum, pot să împart asta în două integrale. Și o să opresc dx dy destul de curând, pentru că este subînțeles dacă am integrala dublă peste imagine. OK, deci pot rezolva pentru c este integrala a-- să numim acest G pătrat. Și acesta este G-- oh, scuze, minus G Et G pătrat, unde G este acest gradient radial, care va apărea atât de des încât mă săturasesc să-l scriu. Deci, există o modalitate de a estima timpul până la contact, deoarece c este inversul timpului până la contact. Și este destul de interesant, pentru că nu există lucruri de nivel înalt aici. Nu detectăm margini, sau urmărim puncte sau nu facem ceva sofisticat - recunoaștem pudelii din spatele palmierilor. Doar facem această analiză a numărului de forță brută. Și este foarte eficient. Avem un milion sau 10 milioane de puncte, fiecare dintre ele prost. Dar le combinăm în acest fel, și binele la o parte din 1.000. Ce faci atunci când implementezi asta, ce faci de fapt? Ei bine, trebuie să luați imaginea și să estimați gradientul de luminozitate, ceea ce este banal. Luăm pixeli vecini în direcția x și îi scădem. Iată Ex-ul nostru. Și apoi luați pixeli învecinați în direcția y, scădeți-i. Acesta este Ey. Și avem nevoie de Et, așa că luăm două cadre, unul după altul și luăm pixelii corespunzători și îi scădem. Acesta este Etul nostru. Sau poate exista o scară, dar aceasta este ideea de bază. Din acestea, calculăm apoi acest gradient radial, care este ușor de făcut. x și y sunt poziția în imagine față de centrul imaginii. Vom mai vorbi despre asta mai târziu. Și apoi, le calculăm doar la sume. Deci aceste integrale duble sunt doar sume peste toți pixelii. Trecem doar prin toți pixelii adunând aceste lucruri. Și deci într-adevăr, bine, dacă vrei să o faci secvenţial, ai nevoie de doi acumulatori. Le setați la 0, apoi parcurgeți imaginea rând cu rând, pixel cu pixel. Și la fiecare pixel, calculezi G. Calculați x Ey din el. Calculați G. Și apoi un acumulator-- înmulțiți G cu et. adauga asta la acel acumulator. Celălalt acumulator, iei G pătrat și îl arunci în acela. Și apoi, când ai trecut prin imagine, ai aceste două sume. Le împărțiți și gata. Deci este total lipsit de creier. Nu există inteligență acolo, artificială sau de altă natură. Și numesc asta un citat, „calculare directă”. Pentru că există o mulțime de alte moduri de a aborda această problemă. De exemplu, ai putea măsura dimensiunea... ca și cum ai ieși dintr-o parcare și ar fi un autobuz MIT în fața ta. Apoi puteți măsura în imagine, de câți pixeli este imaginea autobuzului? Și câți pixeli pe cadru în timp se schimbă și așa mai departe? Poti sa faci asta. Dar înseamnă că trebuie să detectezi autobuzul. Trebuie să găsiți marginile. Trebuie să estimați începutul și sfârșitul autobuzului. Și mai bine îl măsurați cu o precizie foarte mare, ca o sutime de pixel. Și nu este prea greu să afli unde este marginea autobuzului în termeni de pixeli, dar o sută de... și de ce trebuie să măsori asta cu precizie? Pentru că nu se schimbă prea mult de la un cadru la altul. Deci, există și alte moduri de a face acest lucru. Dar aceasta este... este forță brută, fără minte și elegantă. Asta este punctul meu de vedere. Bine, acum, desigur, acesta este foarte specializat. Avem de-a face doar cu un caz în care alergăm direct în perete. Și astfel ne vom uita la cazuri mai interesante într-un minut. Dar ceea ce sper să fac, dacă pot relua proiectorul, este să demonstrez o parte din acest lucru. Așadar, ceea ce vă voi arăta este un mic program numit MontyVision, care vă permite să creați aplicații de procesare a imaginilor printr-un proces grafic de conectare, practic, citat, „filtre”. Așa că permiteți-mi să aduc asta aici și să vă arăt asta pentru o secundă. Deci așa arată. Și conectați împreună cel mai din stânga este o sursă de fișiere, care, în acest caz, este fișierul .avi, video. Apoi intră într- un splitter care îl taie în fluxuri, inclusiv trecând de la culoare la nivelul de gri. Există un decompresor, pentru că tot videoclipul este comprimat, altfel ar fi ridicol de mare. Și apoi intră în caseta de timp pentru a contacta și iese redarea video de acolo. Și de această dată pentru a contacta caseta are un set de parametri care apar undeva în afara ecranului chiar acum. OK, așa că o voi pune înapoi unde să- l pot vedea pe ecran. Și să sperăm că acest lucru funcționează. Oh. OK, așa că voi rula asta de mai multe ori, pentru că asta trece destul de repede. Așa că iată că ne întâlnim cu un camion care este folosit în industria minieră. Este un fel de camion mare. Și ceea ce vedem sunt un număr întreg de lucruri diferite. Voi încerca și eu să scap de asta. Ei bine, lasă-mă să-l rulez din nou. Deci vedeți un cerc -- cerc roșu -- care denotă focalizarea expansiunii, estimarea focalizării expansiunii. Și puteți vedea că vom lovi acea anvelopă sau acea roată. Și apoi, veți vedea cele trei bare din dreapta. Deci, al treilea este c, lucrul pe care tocmai l-am calculat. Și puteți vedea că este roșu care înseamnă rău și crește în sus pe măsură ce ne apropiem. Este inversul timpului de contact. Și celelalte lucruri, cum ar fi timpul de contact este acolo în cadre. Și putem face un complot pentru a vedea cât de precis este în comparație cu momentul în care lovim de fapt ținta. Deci, acest lucru este ușor diferit de ceea ce am făcut, deoarece acest lucru permite o anumită mișcare în direcția x și y și o vom face într-o secundă. Și, ca rezultat, are trei calități de calcul, pe care le vom numi a, b și c. Și acestea sunt cele trei bare pe care le vedeți în dreapta. Și dacă am merge direct în jos, primele două ar fi 0. Nu ar fi nici în sus, nici în jos, dar nu sunt. Există o componentă x și o componentă y mică care-- și, desigur, aceasta este zgomotoasă. Deci nu este perfect. OK, atunci hai să ne uităm la una diferită. Newman... Ei bine, cred că sunt obsedat să dau peste camioane... unul dintre coșmarurile mele. Deci iată un alt camion cu care ne lovim. Cercul, din nou, indică focalizarea expansiunii. Cele trei bare sunt a, b și c. Și cea mai dreaptă este cea pe care acum știm să-l calculăm. Și voi arăta că mai sunt de câteva ori. Și crește pe măsură ce mergem, pentru că timpul de contact este din ce în ce mai scurt, așa că 1 în timpul contactului devine din ce în ce mai mare. Timpul de contact calculat este în jos în partea dreaptă. Acum, se dovedește că, dacă ar fi să facem acest lucru cadru cu cadru, ați observa că aproape de sfârșit este greșit. Și de ce este asta? Ei bine, există o grămadă de motive diferite. Una dintre ele este că imaginea devine defocalizată și astfel informațiile se schimbă. Presupunem într-un fel că imaginea este doar mărită, dar în sistemul care are o lentilă, cu excepția cazului în care ajustăm obiectivul pentru a rămâne focalizat, vom ieși din focalizare. Un alt aspect este că inițial, mișcarea imaginii este foarte mică. Este o fracțiune de pixel între cadre. Dar apoi, desigur, pe măsură ce ne apropiem de obiect, lucrurile explodează cu adevărat. Și astfel, întreaga noastră presupunere despre estimarea derivatelor luând pixeli vecini și scăzându-i și toate chestiile astea nu funcționează foarte bine. Și cum te descurci cu asta? Ei bine, o modalitate este de a combina pixeli astfel încât pe super pixeli, mișcarea să fie un număr mic de pixeli. Și știm că atunci funcționează. Deci, ceea ce am putea face este să rulăm asta la mai multe scale. Deci aveți rezoluția completă a imaginii. Și când lucrurile sunt departe, acesta este cel care ne va oferi cele mai bune informații. Apoi, de exemplu, facem o medie de 2 pe 2 blocuri de pixeli. Acum avem o imagine care are un sfert mai mulți pixeli. Și poate face față de două ori mișcarea imaginii, deoarece o anumită cantitate de mișcare a imaginii în imaginea originală corespunde acum la jumătate din câte pixeli în aceasta redusă. Și apoi, facem asta din nou. Facem acea poză redusă, din nou... 2 pe 2, medie și acum suntem pe locul 16. Deci, acest lucru devine foarte ieftin de calculat în comparație cu imaginea originală. Și deci nu există costuri reale - costuri suplimentare la asta. Ei bine, unii. Deci, ce înseamnă 1 plus un sfert, plus un șaisprezecele, plus un șaizeci și patru plus... OK, ei bine, știi cum să însumezi serii geometrice. Și răspunsul este... nu știu... 4/3 sau ceva. Deci da, costă mai mult, dar nu este un cost uriaș. Vă puteți permite să faceți acest lucru la mai multe scale. Și asta vă permite, apoi, să faceți față tuturor vitezelor, începând cu o mișcare foarte lentă sub-pixeli până acolo unde lucrurile explodează cu adevărat. OK, lasă-mă să mai fac ceva și să conectez asta la cameră. Sper că va funcționa. Oh, nu-mi face asta. OK, deci iată o cameră web. Și cred că aici e relativ întuneric. Lasă-mă să încerc hârtia. Ieșiți din focus. Încercați să găsiți ceva care să-i dea o textură plăcută cu care să lucrați. Cred că există un scaun care are multe găuri în el. Să încercăm asta. OK, așa că voi încerca să o țin cât mai nemișcată posibil. Deci, din nou, cele trei bare sunt a, b și c. Și sunt peste tot în spectacol, dar relativ mici. Acum, dacă mișc camera în sus, a treia bară ar trebui să coboare și să fie verde pentru siguranță, ceea ce înseamnă că timpul de contact este negativ. Dacă o mut în jos, a treia bară se va ridica și va fi roșie, ceea ce înseamnă că sunt pe cale să mă lovesc de ceva. Și cred că motivul pentru care are această mișcare sacadată este pentru că nu-i place acest proiector. Deci are un timp de ciclu foarte lent. Ar trebui să ruleze la 28 de cadre pe secundă și, evident, nu este. BINE. Acum, dacă încerc să mă mut în x-- lasă-mă să văd dacă pot să mă deplasez în x-- prima bară ar trebui să crească. Oh, nu o țin drept, așa că am diafonia între x și y. Chiar acum mă mut în y. Și mă mișc în direcția opusă în y. Deci a doua bară urcă, iar a doua minge coboară. Și aici, mă pot deplasa în direcția x - prima bară urcă, iar prima bară coboară. Și vreau să spun, pentru mine, acest lucru este fascinant, pentru că este un instrument atât de îngrijit. Și nu are nicio magie în el și îi putem înțelege limitările. Putem calcula care este eroarea și așa mai departe. Nu este ca ceva foarte elaborat și are un cod ascuns în el. Așa că permiteți-mi să vă arăt acea versiune. Să vedem. Oh. Oh bine. Aha, înțeleg. Este inchis. Deci, una dintre caracteristicile acestui cod este că vă poate arăta câteva rezultate intermediare. Trebuie să mă uit la panoul de control pentru a vedea ce arată acum. Deci, acum, este sub-eșantionare 2 câte 2. Și permiteți-mi să arăt Ex. Să scăpăm de asta. OK, deci Ex este doar derivata în direcția x. Și pozitiv este afișat verde, negativ în negru. Și este destul de slab în majoritatea părților imaginii, cu excepția cazului în care este linia neagră. Acolo, pe o parte a liniei negre, există o schimbare rapidă a luminozității. Și de cealaltă parte a liniei negre, există o schimbare rapidă a luminozității. Deci, asta vă oferă franjurile verzi și roșii în direcția x. Acum, dacă îl întorc astfel încât acea linie neagră să fie orizontală, va fi mai puțin, deoarece derivata x acum este foarte mică. Văd asta, pentru că este mai mult sau mai puțin constantă în direcția x. În timp ce, dacă mă uit la derivata y-- oh, de fapt pot arăta x și y împreună într-o prezentare ușor diferită. Deci, aici, derivata x controlează roșul, iar derivata y controlează verde. Și ai acest tip amuzant de sentiment aproape tridimensional despre rezultat. Dar gradientul arată direcția celei mai rapide variații. Așa că gândiți-vă din nou la ceea ce am spus despre analogia cu o suprafață - o hartă topografică. Și de aceea ni se pare un pic tridimensional. OK, deci acestea sunt lucrurile de bază pe care le calculăm. Pot arăta și, în schimb, Et. Acum, Et, dacă aș fi solid ca o piatră, ar fi 0 peste tot. Și, evident, nu sunt. Să vedem dacă mă pot ține de ceva pentru a-l face mai constant. Așa că o poți vedea scăzând în magnitudine, deși nu pot să par... OK. Deci asta este o direcție de timp. Scădem imagini succesive. Și să vedem, să ne uităm la G. Deci G este acea derivată radială, x. Și ce poți spune? Ei bine, merge spre exterior. Vezi cutia aceea pătrată? Este verde de jur împrejur, ceea ce nu ar face Ex, pentru că Ex ar fi opus pe cele două părți. Dar pentru că înmulțim cu vectorul din centrul imaginii, de fapt ajunge să fie verde pe tot parcursul. Acum, putem face încă un lucru, și anume să o înmulțim cu derivata de timp Et. Deci, în acea formulă, vă puteți aminti că există un produs al ET în acest gradient de luminozitate. Și, evident, dacă acesta este 0, va spune că nu există mișcare. Dacă există mișcare, atunci aceasta va fi diferită de zero. Și în special... hmm. Este regretabil că nu este... oh, bine. Așa că aici puteți vedea că în majoritatea locurilor-- aș vrea să funcționeze mai repede, pentru că este foarte greu de-- în majoritatea locurilor acum este verde, pentru că mă îndepărtez de suprafață. Când fac asta, în majoritatea locurilor, va fi roșu. Și motivul pentru care celelalte zone este pentru că se zgâlțâie înainte și înapoi. Nu sunt un manipulator foarte bun. Dacă aș avea un manipulator robot, am putea face asta mai bine. OK, deci oricum, vrem să vedem altceva despre asta? Deci, înainte de a pune asta deoparte, există întrebări? Da. Ai o problemă foarte limitată, foarte constrânsă, care este problema aterizării muscii la suprafață sau a unei persoane care se lovește de un perete. Dacă există mai multe mișcări, acest lucru nu va funcționa. Și asta o să facem. Deci ne extindem încet. Am început cu o necunoscută, care a fost exact inversul timpului de contact. Și acum vom face puțin mai mult. Dar, în cele din urmă, ceea ce am dori să facem este să ne ocupăm de mișcări arbitrare, în care u și v nu sunt constrânși doar de câțiva parametri, dar ar putea fi diferiți pe toată imaginea. Deci u și v, chiar acum, sunt o funcție simplă a unei constante. Unde este ecuația? Aici. Și la ce am dori să ajungem în cele din urmă, după câteva etape, este unde u și v pot varia în mod arbitrar pe întreaga imagine. Și puteți vedea cum va fi problema, nu? Pentru că la fiecare pixel avem ecuația noastră magică acolo sus, ecuația constrângerii schimbării luminozității. La fiecare pixel, obținem o constrângere. Deci, dacă avem un milion de pixeli, avem un milion de ecuații. Dar avem 2 milioane de necunoscute, pentru că la fiecare pixel, ne-ar plăcea să cunoaștem u și v. Deci asta nu sună prea bine. Așa că va trebui să introducem câteva ipoteze suplimentare pentru a rezolva această problemă. Pentru că acum, se pare că avem un milion de ecuații și două milioane de necunoscute. Știm care este răspunsul la asta. Dar, din fericire, în cele mai multe cazuri, există informații suplimentare. Pentru început, când mă mișc prin cameră și tu te miști pe locurile tale, în majoritatea locurilor din imagine, punctele învecinate se mișcă nu la fel, dar foarte asemănătoare. Și așa că, dacă s-ar mișca la fel, atunci am putea integra cu ușurință asta în abordarea noastră. Dacă sunt asemănătoare, este puțin mai greu. Dar asta vom face. Vom spune că încercăm să recuperăm acest câmp vectorial în situația în care lucrurile se pot mișca independent, dar există ceva-- nu este ca și cum te-ai uita la-- oh, nu-ți amintești asta. Dar odinioară, noaptea târziu, posturile de televiziune ieșeau și nu exista semnal. Și apoi receptorul radio ar pune practic zgomot alb pe ecran. Așa că veți vedea asta: fiecare pixel nu are nicio legătură cu fiecare alt pixel. Deci, aceasta este o situație cu care nu ne vom ocupa, pentru că nu este o situație firească. În timp ce îmi fac treburile zilnice de a mânca și orice altceva, am de-a face cu o situație în care pixelii vecini au de obicei aproape aceeași viteză. OK, hai să revenim la asta și să încercăm să o generalizăm puțin. Deci următorul lucru cel mai general de făcut este să spunem, OK, să avem mișcare în U și V și în direcția x și y . Deci nu vor mai fi U și V-- U mare și V mare acolo sus-- 0. Dar va fi-- le vom permite să varieze, de asemenea. Deci, să vedem. Înainte să merg acolo, lasă-mă să spun ceva despre... Mi-a lipsit total asta. Dar tot ce am făcut până acum , am primit răspunsul și apoi am spus, o, dar cum va eșua? Nu am făcut asta aici. Deci vă amintiți că acesta a fost c este egal cu raportul a două integrale. Și, desigur, va eșua dacă integrala lui G pătrat este 0, de exemplu. Acesta este un mod în care poate eșua. Deci ce înseamnă asta? Ei bine, asta înseamnă că există 0 gradient radial peste tot în imagine. Și o modalitate de a se întâmpla asta este că ești într-o mină de cărbune fără lumini. E este 0. Acesta nu este un caz deosebit de interesant. Celălalt este că luminozitatea-- derivata radială-- este 0 peste tot. Asta înseamnă că componenta gradientului în direcția radială este 0. Deci avem această expresie aici. Acesta este 0. Și asta înseamnă că... să vedem. Aceasta înseamnă că direcția radială și gradientul sunt în unghi drept unul față de celălalt. Așa facem ca produsul punctual să fie 0. Așa că hai să încercăm să desenăm o imagine ca asta. Deci iată o imagine. Și spune că suntem acolo. Atunci direcția radială este aceea. Și spunem că gradientul trebuie să fie în unghi drept față de el, astfel încât luminozitatea să se poată schimba în acea direcție, dar nu se poate schimba în această direcție. Deci în această direcție ne putem schimba. Nu ne putem schimba în asta. Și, în mod similar, pentru orice altă direcție - putem avea luminozitatea să se schimbe în acest fel, dar nu radial. Deci, ce fel de model ar face asta? Ce zici de un ochi? Este asta... va avea variații în direcția radială. Deci asta nu merge. Așa că, dacă nu este un ochi, întoarceți-l la 90 de grade peste tot. Un x va face bine. scuze, ce ai spus? PUBLIC: Rotiți-l. BERTHOLD HORN: Dacă îl rotim... hmm. Dacă desenăm o felie și o rotim... diagrame circulare. Deci, dacă avem o diagramă circulară, atunci oriunde este gradientul în direcția de rotație, nu există nicio variație a luminozității spre interior și spre exterior. Deci întreg sectorul de plăcintă este o singură culoare. Aceasta este o altă culoare și așa mai departe. Și deci acesta este un caz în care acest lucru va eșua. Și asta are sens? Adică, te-ai aștepta să eșueze? De ce... ai putea face mai bine? Deci te uiți la... nu vezi nimic altceva în lume decât această diagramă circulară și te îndrepți spre ea. Ei bine, clătinarea din cap. Imaginea nu se schimba. Adică, facem presupuneri, ca și cum nu poți vedea pete fine, mici la suprafață, care să-ți dea un indiciu. Presupunând că este perfect neted și ai doar acestea, dacă ai mărit cu un factor de 2, arată la fel. Deci este perfect consecvent. Această metodă nu va funcționa. Și nu se poate. Nu... nu există informații despre care să funcționeze. Așa că vom reveni la această problemă când o vom generaliza. Din nou, uitându-ne la cazul în care va eșua și este rezonabil să eșueze? Am putea face mai bine? Acum, în multe cazuri, ne putem descurca mai bine, doar pentru că, dacă mă uit la o bucată de hârtie, nu este perfect netedă. Sunt mici fluctuații, sunt mici fibre. Și astfel, acest model general ar putea arăta așa, dar există pete mici acolo și pot să le acord atenție. Și, în mod similar, acest algoritm ar putea, dacă contrastul este suficient de mare al acelor pete mici, ar ridica un Ex, Ey diferit de zero și ar calcula timpul de contact. OK, deci mai general... caz puțin mai general. OK, deci acum le permitem u și v să fie diferite de zero. Și deci avem u de f is-- Copiez doar ecuația de acolo. Și pentru comoditate, voi înmulți prin f. BINE. Deci doar definesc două variabile noi. Deci am avut deja c era w peste z, care este inversul timpului de contact. Și acum, definim încă două, care sunt fu peste z, care este f ori x0. Și fv peste z, care este f peste y0. De ce este asta? Ce înseamnă asta? Ei bine, ceea ce vom găsi este timpul să contactăm și FOE. Dar este mai convenabil să definiți aceste variabile care sunt funcții de timp de contact și FOE, pentru că atunci ecuațiile sunt simple. Avem doar câțiva termeni în ele. Deci, acesta de aici este doar de f ori componenta x a focarului de expansiune, iar acesta este de doar de cinci ori componenta y. Deci, odată ce cunoaștem a și b, putem calcula unde este focalizarea expansiunii , presupunând că cunoaștem f. Un lucru pe care nu l-am menționat este în formula noastră de aici pentru c, f nu apare. Deci este destul de interesant, pentru că înseamnă că nu avem nevoie de anumite proprietăți ale camerei pentru a face acel calcul, ceea ce este surprinzător, pentru că, în multe scopuri, trebuie să știi. De exemplu, dacă abordați , OK, timpul până la contact este distanța împărțită la viteză. Ei bine, pentru a calcula distanța, aveți nevoie de f. Pentru a calcula viteza, aveți nevoie de f. Deci, este o surpriză foarte plăcută că pentru a calcula timpul de contact, nu avem nevoie de el. Intuitiv, ceea ce se întâmplă este că, dacă mă apropii de un perete, acesta se va ivi în afară. Și dacă mă apropii de ea cu un teleobiectiv, tot se va arăta spre exterior. Și dacă treci de fapt prin ecuația proiecției perspectivei , aceasta va crește în dimensiune în același ritm. Și aveți dreptate că este mare X peste mare Z. Așa că am aplicat aici ecuația de proiecție a perspectivei. OK, deci acum avem u și b ca necunoscute funcționale [INAUDIBILE] și le conectăm la ecuația noastră preferată. Și să vedem. Obținem... Deci aceasta este ecuația noastră de constrângere a schimbării luminozității. Și voi apela, din nou, acest G pentru a reduce cantitatea de scriere a gradientului radial. Și voi folosi aceeași metodă pentru a încerca să găsesc răspunsul. OK, deci avem această expresie, care, dacă am avea valorile corecte pentru a, b și c, este 0. Dacă integrăm peste imagine, ar trebui să fie totuși 0. Dacă avem valorile greșite ale a, b , și c, nu va fi 0. Și astfel formulăm problema ca făcând aceasta cât mai mică posibil. Acum, în absența zgomotului de măsurare, l- am putea face de fapt 0. În practică, Ex, Ey și ET vor fi supuse zgomotului de măsurare, așa că nu vom putea să-l punem la 0. Dar este totuși valid. abordare pentru a o prezenta ca acest tip de problemă cu cele mai mici pătrate. OK și, desigur, doar un număr finit de parametri - a, b și c. Deci este o problemă de calcul. Continui să spun asta, pentru că mai târziu, vom căuta funcții, nu parametri. Și atunci nu putem folosi calculul -- deci nu putem diferenția cu privire la o funcție -- este versiunea scurtă a acelei povești. OK, deci ce se întâmplă dacă facem diferența? Ei bine, derivata acelei integrale este integrala derivatei integrandului. Integrandul este acest lucru pătrat. Deci obținem de 2 ori mai mult. Deci vom obține 2 în-- Deci avem de 2 ori mai mult , și apoi trebuie să luăm aici derivata acelui termen cu privire la a. Și singurul lucru aici care depinde de a este această parte. Deci asta este doar Ex. Și apoi, repetăm ​​asta. Și din nou, luăm derivata integrandului. Deci primim de două ori acest lucru. Și derivata termenului de aici față de b este evident doar Ey. Deci, al treilea pas este... Nu voi scrie asta din nou. Și singurul lucru care depinde de c este cG. Deci luăm derivata și obținem doar G. Deci obținem trei ecuații și, în mod magic, le putem rezolva efectiv. Deci, aceste cazuri simple au o caracteristică minunată că există o soluție în formă închisă. Pot să scriu care este răspunsul. Și asta este neprețuit, pentru că da, poți oricând să calculezi numeric chestii. Dar este foarte greu să spui lucruri despre soluție. Să presupunem că vreau să-ți spun că există un singur răspuns. Ei bine, dacă aveți o modalitate numerică de a găsi minimul, ar putea exista un alt minim în altă parte. Și dacă am o soluție analitică, soluția în formă închisă , pot spune lucruri precum, cât de sensibil este la zgomot? Ei bine, pot doar să diferențiez în ceea ce privește lucrul care are zgomot în el. Dacă o fac numeric, va trebui să recalculez. Și apoi spui, OK, e în regulă. Răspunsul este OK pentru acest set de parametri. Dar setul diferit de parametri? Trebuie să recalculezi. În timp ce dacă este o formă analitică, există formula. Iata. Deci, din păcate, asta nu se întâmplă tot timpul. Odată ce facem lucrurile destul de complicate, de obicei nu putem găsi o soluție în formă închisă. OK, deci ce facem cu asta? Ei bine, integrala unei sume este suma integralelor. Deci putem rescrie asta astfel. Le omit pe cele 2, pentru că asta nu are nicio diferență. Deci doar înmulțesc acest termen cu Ex și apoi îl împart în mai multe integrale, deoarece integrala unei sume este suma integralelor. Deci acesta va fi GEx. OK, deci asta e o ecuație. Și veți observa că este o ecuație liniară în a, b și c. Deci asta ne dă imediat speranța că putem rezolva această problemă destul de ușor. Și dacă repet pentru a doua ecuație... Deci trei ecuații liniare și trei necunoscute. Și înainte de a continua, câteva lucruri. Una dintre ele este că ar trebui să recunoașteți părți din asta. Asta am avut înainte când mergeam drept în jos pe axa optică, unde a și b sunt 0. Apoi am rămas doar cu această parte. Aveam doar o ecuație și o necunoscută, set care a fost frumos și ușor. Un alt lucru este că matricea coeficienților este simetrică. Deci acest coeficient este același cu cel. Și acel coeficient la fel ca acela. Și acesta este același cu cel. Și, de multe ori, a avea o matrice simetrică oferă un oarecare avantaj în ceea ce privește înțelegerea stabilității soluției. Deci care sunt aceste lucruri? Ei bine, cum facem asta, chiar înainte de a începe să rezolvăm ecuațiile? Deci, să ne uităm la coeficientul a de aici. Ei bine, este doar integrala lui Ex pătrat peste întreaga imagine. Așa că parcurgem imaginea și, la fiecare pixel, ne uităm la pixelul vecin. Scădem nivelurile de gri pentru a estima E sub x. Pătrați-l și adăugați-l într-un acumulator. Și facem asta pentru toți pixelii. Apoi avem un alt acumulator în care estimăm Ex și Ey privind pixelii vecini în direcția y, înmulțind aceste două diferențe. Și apoi avem un al treilea acumulator. Și G, trebuie să facem de x ori Ex plus y ori Ey. Și apoi luăm rezultatul, înmulțim cu x. Aruncăm asta în acel acumulator. Acum, nu trebuie să o facem pe aceasta, pentru că este la fel ca aceea din cauza simetriei matricei coeficienților. Trebuie să-l acumulăm. Trebuie să acumulăm pe acesta și pe celălalt. Și din nou, acești doi, din cauza simetriei, nu trebuie să le facem. Așa că parcurgem imaginea și avem șase acumulatoare pe care doar îi adăugăm pe măsură ce mergem. Și, bineînțeles, ai putea paralela asta, pentru că nu interacționează. Adică, operația pe care o fac pe acest pixel, în acest caz, este complet independentă de operațiunea pe care o fac pe acel pixel. Deci, dacă aveți un GPU, puteți face o mulțime de pixeli simultan. Puteți accelera dramatic acest lucru. Deși, l-ai văzut rulând pe un ThinkPad prost, și nu făceam nimic de lux. Utilizează un software care are cinci ani. Deci, chiar și cu asta, dacă nu este conectat la acest proiector, primește 28 de cadre pe secundă. Deci nu este esențial să o paralizezi, dar dacă ai vrut, ai putea. Și apoi l-ai putea rula la mii de cadre pe secundă, care, apropo, este ceea ce rulează șoarecii optici. De obicei, rulează la 1.800 de cadre pe secundă sau într-un mouse de gaming, chiar mai mare. Dar imaginile tind să fie mai mici. Imaginile sunt adesea doar 32 pe 32. OK, așa că acumulăm cele șase. Observați că acestea nu depind de nicio modificare în timp. Acestea depind doar de modelul de luminozitate, de textura din imagine. Apoi avem nevoie de încă trei, care depind de schimbările în timp. Si asta e. Deci avem un total de, să vedem, nouă acumulatoare pe care trebuie să le urmărim. Și apoi ajungem la final și apoi trebuie să rezolvăm trei ecuații și trei necunoscute. Și cred că am alergat peste ore. Deci sunt întrebări înainte de plecare?