[SCRÂTÂT] [FOSȘIT] [CLIC] PROFESOR: Am început să vorbim despre cele două aspecte ale formării imaginii, unde și cât de strălucitoare. Și unde am vorbit despre proiecții de perspectivă. Și într-un sistem de coordonate centrat pe cameră, este foarte ușor să înțelegeți doar asta și amploarea acesteia pentru a putea vorbi despre mișcare. Și așa am diferențiat doar asta. Și am avut o versiune ușor diferită a acesteia, în care am folosit ecuația de proiecție a perspectivei pentru a o scrie. Apoi am introdus ideea de focalizare a expansiunii. Acesta este locul în care u este 0. Și în mod clar, acolo este locul în care această parte este 0. Și, așadar, dacă rezolvați pentru x, obținem x acolo. Este tu/w. Deci, focalizarea expansiunii este punctul din imagine spre care vă deplasați. Și apoi introducem [INAUDIBILUL] și am vorbit despre diferite moduri de a estima asta. Apoi, dintr-un punct de vedere oarecum diferit, ne-am uitat la imaginea solidă. Deci ne gândim la o imagine ca... luminozitatea în funcție de x și y și, uneori, x și y și t. Și așa există o imagine video solidă. Și în acest caz, am analizat posibilitatea ca luminozitatea unei imagini dintr-un anumit punct din mediu să nu se schimbe în timp. Așa că am introdus ipoteza de luminozitate constantă. Deci, pe măsură ce urmărim un punct și imaginea acestuia în cadre succesive, spunem că, în multe circumstanțe, luminozitatea nu se va schimba. Și putem exploata asta. Deci, dacă noi... este destul de interesant să privim această imagine solidă și să o tăiem în direcții diferite. Și veți vedea o natură foarte striată din cauza acestui fenomen. Deci feliile, desigur, nu sunt independente. Și vedem că lucrurile sunt striate, cum ar fi extrudarea pastei de dinți cu mai multe culori diferite pe măsură ce lucrurile se mișcă în imagine. Și apoi din aceasta, am obținut ecuația constrângerii de modificare a luminozității , care ne oferă o relație între mișcarea din imagine și gradientul de luminozitate și rata de timp a schimbării luminozității. Și apoi am abordat problema că acest lucru nu ne oferă capacitatea de a rezolva local pentru viteză, deoarece aceasta este o ecuație liniară în u și v. Deci definește doar o linie în spațiul vitezei. Deci, privind un singur pixel, nu putem recupera mișcarea, spre deosebire de cazul 1D, unde am putea. Și deci avem nevoie de mai multe constrângeri. Ei bine, o formă extremă de constrângere este aceea în care totul se mișcă cu aceeași viteză. Și așa cum am anunțat, există o lucrare sub Materiale despre Stella care se referă la asta. Și face ultima parte a temei anterioare. Și ceea ce face este să minimizeze unele erori. Deci, dacă acest lucru se aplică la fiecare pixel și avem o constantă u și v pentru întreaga imagine, ca în cazul mouse-ului optic, atunci putem scrie problema în acest fel. Și din nou, acea integrală ar trebui să fie mică sau ar trebui să fie 0 dacă nu a existat nicio eroare în u și v și dacă nu a existat zgomot. Dar suntem mulțumiți doar să minimizăm asta. Și aceasta va fi cea mai bună estimare a noastră pentru u și v. Și este foarte constrâns. Avem una dintre aceste ecuații pentru fiecare pixel. Și căutăm doar două necunoscute. Deci, acesta este un caz în care avem milioane de ecuații. Și avem doar două necunoscute. Deci este foarte favorabil. Asta înseamnă că rezultatul va fi mult mai precis și mai fiabil decât ar fi altfel. Așadar, făcând asta, obținem ecuația liniară în necunoscute cu o matrice simetrică cu coeficienți 2 cu 2. Așa că parcurgem imaginea și estimăm gradientul Ex Ey. Estimăm rata de modificare a luminozității, Et. Și apoi acumulăm aceste totaluri. Și când terminăm cu asta, avem două ecuații liniare în u și v. Și știm cu toții cum să rezolvăm ecuații liniare, mai ales dacă sunt doar două dintre ele. Acum, ca de obicei, trebuie să ne uităm când eșuează. Și așa am făcut asta. Am spus că, ei bine, depinde de determinant. Deci problema este când acea matrice de coeficienți este singulară. Deci avem o problemă dacă acesta este 0 sau dacă este egal cu acesta. Și ne-am uitat la diferite condiții, cum ar fi e egal cu 0. Desigur, dacă aveți o imagine neagră, atunci aceasta nu va funcționa. Și, de asemenea, dacă Ex este 0 sau Ey este, de asemenea, 0. Și să ne uităm la încă una. Să presupunem că avem o imagine ca aceasta. Și ceea ce încercăm să facem este să ne dăm seama dacă această recuperare a mișcării va funcționa. Deci cum putem ataca asta? Ei bine, în două moduri, unul este ce tip de imagine este acela. Putem vedea intuitiv de ce va funcționa sau nu va funcționa? Iar celălalt este doar de a descompune și de a calcula derivatele. Deci e sub x va fi derivata acestui lucru plus derivata argumentului față de x de multe ori. Și astfel, derivata acestuia în raport cu x, desigur, este doar a. Și scoateți x-ul ca să nu arate în mod confuz ca un ori. Și apoi pot să mă uit la derivata y. Deci, acesta este un tip de imagine foarte special. Și în acest caz, am Ex și Ey. f poate fi o funcție complicată. Dar important este că Ex și Ey sunt peste tot în același raport . Și astfel, în această integrare, pot înlocui Ey cu b de a ori Ex. Și așa va fi adevărat. Această condiție va fi adevărată și va eșua. Deci, acesta este un alt mod de a spune condiția în care această metodă nu va funcționa. Și apoi ne putem uita la ce fel de imagine este aceea. Ei bine, ca de obicei, nu pot desena niveluri de gri pe tablă și nu pot desena degrade. Dar pot desena contururi de luminozitate constantă, izofote, care sunt perpendiculare pe gradient. Și deci care sunt izofoții? Ei bine, izofoții sunt unde E x, y este constant. Aceasta înseamnă că f de ax plus by este constantă. Asta înseamnă că ax plus by este o constantă. Și asta este ecuația a ce? Este o linie dreaptă, nu? Deci izofotele sunt linii drepte. De asemenea, toate sunt linii drepte paralele. Ele diferă doar în C. a și b sunt fixate din timp. Deci acesta este genul de imagine care ne dă probleme. Da, știm asta, nu? Pentru că dacă alunecă în această direcție, nu putem măsura asta. Nu există nicio schimbare în imagine. Dacă alunecă în acea direcție, putem. Dar nu ne permite să determinăm cealaltă parte a ei. Deci asta e problema mouse-ului optic. Așa că de aici am trecut la timp pentru a contacta. Și ne-am uitat la... așa că am avut asta. Există diferite moduri de a rescrie asta. Să vedem. În ce sens vreau să fac asta? Deci w este componenta z a mișcării în lume. Deci asta este dZ dt. Și nu știu. Asta poate suna sau nu. Dar aceasta este o derivată a logului lui z. Deci, dacă pun lucrurile pe o scară logaritmică, aceasta este doar panta graficului pe acea scară logaritmică. Deci e interesant. Deci totul depinde de rapoarte, părți fracționale, mai degrabă decât de valori absolute. Deci, ceea ce este important este prin ce parte fracțională se schimbă z într-un anumit interval de timp? Nu cu câți metri. Și acesta este unul dintre motivele pentru care am putea face asta fără calibrare. Nu trebuia să știm care este distanța focală a camerei , de exemplu, pentru că doar raportul, partea fracționată contează. Și acum, un alt mod de a te gândi la timpul de contact este în ceea ce privește dimensiunea imaginii. Așa că să presupunem că aici este un obiect din lumea de mărimea S și iată imaginea lui de dimensiunea s mic. Apoi pot scrie o ecuație care să relaționeze acele cantități bazate pe triunghi, triunghiuri similare, acest triunghi în exterior și acest triunghi în cameră. Deci am s/f este S/Z. Este doar mărirea laterală a camerei, care în acest caz este mult mai mică decât 1. Imaginea este mult mai mică decât obiectul. Dar oricum îi numim mărire. Ei bine, pot să înmulțesc încrucișat. Deci am acea relație. Și de ce fac asta? Ei bine, pentru că acum voi diferenția asta și voi vedea cum se schimbă în timp. Și așa se schimbă. Dacă ne apropiem de obiect, atunci s va crește. Deci se vor schimba. Deci vom avea Z ds dt. Și este un produs. Așa că primim și Z. Ia-l pe celălalt. Vom primi s ori dZ dt. Și atunci avem nevoie de derivatul acestui produs. Ei bine, dimensiunea obiectului, probabil, este constantă. Nu modificăm parametrii imagistici. Deci aceasta este derivata care este 0. Și derivata lui 0, desigur, este 0. Deci obținem această relație. Și asta ne spune că... în ce sens l-am folosit aici? S ds dt peste S este Z peste dZ dt peste Z. Deci, modificarea dimensiunii imaginii, în modificarea fracțională a dimensiunii imaginii este exact modificarea fracționară a distanței. Și așa, de exemplu, dacă imaginea imaginii autobuzului crește cu 1% pe măsură ce treceți de la un cadru la altul în secvența dvs. video, atunci asta înseamnă că TTC este 100. Și deci... la 20 de cadre un al doilea, asta înseamnă că sunt doar 5 secunde distanță. Deci, o concluzie este că, în multe cazuri practice importante , timpul de contact nu este de zeci de cadre, ci de sute de mii de cadre. Altfel, ai avea o problemă. Probabil că ai fi aproape gata să te lovești de ceva și s-ar putea să ai probleme cu compensarea. Deci, dacă timpul de contact în multe cazuri este de mii, înseamnă că schimbarea fracțională per cadru este de 1 peste mii. Și astfel modificarea fracțională a imaginii de la cadru la cadru este relativ mică. Și asta înseamnă că dacă ar fi să folosim o metodă care depinde de măsurarea efectivă a dimensiunii imaginii, estimarea cât de mare este imaginea autobuzului în imaginea ta, ar fi mai bine să fie cu adevărat precisă, ca o parte din câteva mii. Și asta înseamnă că va avea nevoie de precizie subpixeli, că nu va fi suficient de bun pentru a măsura pur și simplu unde se află partea din față și din spate a autobuzului în imagine. Și de aceea se dovedește a nu fi o modalitate bună de a estima timpul de contact, spre deosebire de metoda pe care am descris-o. Așadar, acesta este un lucru pe care am vrut să-l transmit, această relație foarte simplă că, dacă există o anumită modificare procentuală a dimensiunii între cadre, aceasta se traduce direct într-o anumită modificare procentuală a distanței. Și asta se traduce direct în timp de contact. Deci este un mod foarte ușor de a înțelege asta. Acum, când am făcut asta, sau tu ai făcut-o, am avut o situație foarte simplă. Am început să ne deplasăm direct către un perete, astfel încât am avut constrângeri atât asupra direcției de mișcare, cât și asupra suprafeței pe care ne uităm. Deci chiar-- vă amintiți că primul lucru pe care l- am calculat a fost C, care a fost componenta în direcția Z. Și am avut un raport simplu de două integrale. Și acesta este cazul în care ne îndreptăm direct spre perete, peretele este... ce înseamnă? Axa optică este perpendiculară pe perete. Z este constantă pe perete. Nu variază pe măsură ce mergem la stânga și la dreapta. Deci, acesta este un caz foarte simplu. Atunci am spus, ei bine, să fim puțin mai generali. Să presupunem că ne putem deplasa lateral pe măsură ce mergem. Și apoi am adăugat mișcarea în x și mișcarea în y. Și am avut problema ceva mai interesantă în care căutăm trei necunoscute, A, B și C. Și am ajuns cu trei ecuații liniare și trei necunoscute. Și chiar acum îmi amintesc ce aveam să spun. Din nou, toate acestea sunt descrise în ziarul care este pe site la timp pentru a contacta. Cred că titlul complet este „Timpul de contractare relativ la o suprafață plană”. Și acum lucrarea discută și alte lucruri. Este la fel ca cealaltă hârtie. Prima jumătate este exact ceea ce am făcut în clasă, iar apoi merge în alte direcții. La fel şi eu. Deci acesta este cel mai general pe care îl putem obține? Ei bine, încă facem o presupunere că Z este constantă. Deci ne apropiem de perete, iar axa optică este perpendiculară pe perete. Ei bine, ce se întâmplă dacă camera noastră este înclinată sau, dimpotrivă, ne apropiem de un perete care este înclinat în lume? Deci, o generalizare diferită are ca Z să fie un plan înclinat, astfel încât să nu mai fie cazul că adâncimea este constantă pe măsură ce scanez la stânga și la dreapta sau în sus și în jos în imagine. Și ei bine, care este ecuația unui avion? Ei bine, va fi o ecuație liniară în x și y. Așa că o modalitate prin care aș putea să o scriu este în acea formă. Deci, acesta ar putea fi un model mai complicat de privit. Și ei bine, s-ar putea să vă așteptați la un moment dat ca ecuațiile să devină destul de complicate. Și, de fapt, s-ar putea să nu existe o soluție în formă închisă. Și asta e bine. O poți face numeric. Dar în ceea ce privește înțelegerea a ceea ce se întâmplă și a efectului de zgomot, este bine să ne concentrăm mai întâi pe cazurile în care există o soluție în formă închisă. Deci, ceea ce poți face, de fapt, este să spui, bine. Așa că acum o vom generaliza permițând înclinarea avionului. Dar să revenim la cazul în care ne deplasam direct în jos pe butoi, drept în jos pe axa optică. Și în acest caz, atunci vom avea doar aceste trei necunoscute. Deci, în loc să avem A, B și C necunoscute, avem aceste trei sau unele funcții ale acestora. Și așa vrem să facem asta pentru că este o algebră destul de simplă, mai dezordonată. Ajungem cu trei ecuații liniare și trei necunoscute. Și putem rezolva pentru asta. Așa că putem face timpul de contact în cazul în care suprafața este înclinată. Așa că nu mai presupunem că mergem în partea laterală a camionului care iese dintr-o parcare. Dar am putea veni într-un unghi. Deci, acesta este un caz interesant de luat în considerare. Dacă le facem pe amândouă? Ce se întâmplă dacă permitem ca suprafața să fie înclinată, precum și mișcarea noastră să fie generală? Ei bine, putem formula această problemă destul de ușor. Și ajungem cu șase necunoscute. Din păcate, nu mai sunt ecuații liniare. Și astfel, din punct de vedere al durerii și al agoniei, nu sunt prea distractive de scris. Și, de asemenea, este nesatisfăcător pentru că ajungem cu acest set mixt de ecuații. Unele dintre ele sunt liniare. Unele dintre ele sunt pătratice. Și este foarte greu să spui ceva general despre ei. În timp ce în aceste cazuri speciale, putem face o analiză completă a zgomotului și așa mai departe. Deci nu vom face asta. Doar știi că este acolo. Apoi ajungem la de ce este suprafața plană? Ei bine, suprafața este plană pentru că ne va da ecuații liniare. Deci începem cu o suprafață plană. Acum, suprafețele reale ar putea să nu fie plane. Si apoi, ce? Ei bine, le putem aproxima prin polinoame, o suprafață local pătratică. Și trecem prin același proces. Am stabilit o problemă cu cele mai mici pătrate. Și noi, din păcate, nu vom găsi soluții în formă închisă. Dar îl putem configura astfel încât un proces numeric să ne dea o soluție. Acum, motivul pentru care nu facem asta este în principal pentru că de fapt nu vă cumpără nimic. Deci, în practică, când implementați acest lucru, descoperiți că modelarea suprafeței ca plană vă oferă o estimare foarte bună a timpului de contact. Și dacă îl modelezi ca pe ceva mai complicat, acum ai mai multe necunoscute, ceea ce este bine într-un fel, pentru că îți permite să modelezi lumea mai precis. Dar, în același timp, pierzi această constrângere excesivă. De fiecare dată când introduceți mai multe variabile, există o oportunitate ca soluția să se îndrepte într-o altă direcție. Deci, există câteva plusuri și minusuri. Și, în general, singura dată când vrei să te gândești la asta este dacă obiectul are o formă în adâncime în care modificarea adâncimii este similară cu distanța de la obiect. Deci, dacă camionul este acolo... sunt la 50 de metri distanță de camion și partea laterală a camionului este... o parte este poate cu 2 metri mai aproape de mine decât cealaltă, nu are nicio diferență. Adică, este o schimbare de 4% a distanței. Și asta nu va afecta nimic. Dacă sunt chiar în fața camionului, sunt la 2 metri distanță și o parte are 1 metru și cealaltă este la 4 metri, atunci da, atunci s- ar putea să ai nevoie de asta. Dar am constatat în practică că nu avem nevoie de acel nivel suplimentar de sofisticare. Aceste două lucruri sunt suficiente în practică. Atunci permiteți-mi să vorbesc pe scurt despre multi-scale. Așa că, când ți-am arătat implementarea, când te-ai apropiat cu adevărat de impact, lucrurile s-au prăbușit. Deci, graficul timpului până la contact estimat a fost destul de similar cu timpul real până la contact. Deci aceasta a fost o situație născocită cu viteză constantă, astfel încât timpul de contact a scăzut liniar pe măsură ce timpul trecea, pentru că ne-am apropiat din ce în ce mai mult de suprafață. Și apoi, când ne-am uitat la rezultatele calculate, au fost cam așa, zgomotoase. Și asta se datorează în parte pentru că măsurarea poziției nu a fost foarte precisă. Se uita în jos pe banda de măsurat. A existat un offset interesant pe verticală, deci există o părtinire. Deci nu este doar zgomot. De fapt, timpul estimat până la contact a fost supraestimat, ceea ce în sine nu este bun, pentru că dacă ești pe cale să te lovești de ceva, nu vrei să ți se spună că de fapt va dura mai mult decât timpul real. Pe de altă parte, deoarece este o părtinire fixă ​​sistematică, o puteți compensa. Nu înseamnă că nu ar trebui să încerci să-ți dai seama de unde vine. Dar este destul de simplu să potriviți o altă pantă la asta. Dar apoi, la sfârșit aici, am avut niște vârfuri. Și, practic, rezultatele nu au fost de încredere. Și am menționat deja câteva motive pentru asta. Și una dintre ele este că mișcarea imaginii este mare. Așa că mai devreme am spus că atunci când autobuzul este departe, mișcarea imaginii este foarte mică. Imaginea autobuzului va tinde să se extindă și să se contracte și să se miște cu o fracțiune de pixel. Și aici aceste metode excelează cu adevărat. Pe măsură ce mergem mai departe, am făcut câteva presupuneri că anumite distanțe, epsilonii sunt mici. Când estimăm E sub x, E sub y, E sub t, de exemplu, luăm o diferență finită și spunem, oh, aceasta este aproape o derivată, deoarece epsilonul este mic. Ei bine, asta nu va funcționa dacă avem un salt mare în x, y sau t. Și deci acesta este unul dintre motivele pentru care asta se destramă. Adică, există și alte motive. Unul dintre ele a fost că camera nu a fost focalizată. Și astfel nu mai aveai o imagine clară a obiectului. Dar această primă parte este ușor de rezolvat. După cum am menționat deja mai devreme, vreau doar să reiterez că, dacă avem o imagine cu o rezoluție mai mică - să spunem că avem jumătate din numărul de rânduri și jumătate din numărul de coloane din imagine - ei bine, atunci mișcarea în termeni de pixeli pe cadru este jumătate din ceea ce era înainte. Și ceea ce a fost o mișcare mare în imaginea brută originală este acum jumătate din asta. Și asta înseamnă că o vei avea în continuare să se destrame, dar se va destrama mai târziu. Deci această parte va fi în continuare OK. Și apoi se va prăbuși acolo jos. Și, desigur, apoi puteți repeta acel proces și spuneți, OK, așa că acum în imaginea aceea, brusc, mișcarea a ajuns să fie mai mult de un pixel pe cadru. Deci, să luăm, din nou, subeșantion, medie și subeșantion. Și apoi o putem continua. Și astfel multi-scale înseamnă doar că lucrăm în acel set de imagini care devin din ce în ce mai mici. Și putem face față mișcărilor care devin destul de mari. Și, de asemenea, am menționat că dacă facem media simplă de 2 cu 2 blocuri, asta înseamnă că a doua imagine este doar un sfert din dimensiunea primei. Deci cantitatea de muncă este de 1 plus 1/4 ori mai mult decât ar fi luat doar pe imaginea brută. Și apoi o facem din nou, așa că va fi al 16-lea. Și astfel, cantitatea totală de muncă - ei bine, scrierea codului, desigur, necesită un pic mai mult efort. Dar în ceea ce privește timpul, nu este o penalizare mare să lucrezi la mai multe scale. Și obții rezultate extrem de îmbunătățite. Și vom vorbi puțin mai târziu despre cum să facem subeșantionarea. Aceia dintre voi care ați luat 6003, desigur, realizează că nu puteți eșantiona fără a obține alias, decât dacă ați filtrat mai întâi trece-jos. Deci, de fapt, ceea ce doriți să faceți este un filtru trece jos și apoi un subeșantion. Și nu trebuie neapărat să subeșantionați pe scara în x cu 2 și y cu 2. Puteți subeșantiona prin-- nu știu-- rădăcina pătrată a lui 2, care este mai puțin agresivă și introduce mai puține artefacte. Dar pentru moment vom ignora asta și vom lua doar ideea foarte simplă a mediei blocurilor 2 cu 2, care este o formă brută de filtrare trece-jos. Și nu face exact ceea ce trebuie să faci, dar elimină-- suprimă o parte din conținutul de înaltă frecvență. Și deși vor exista artefacte de aliasing, acestea vor fi mult reduse. Și aceasta este o metodă atât de simplă de implementat. Și funcționează destul de bine. Ei bine, hai să vorbim puțin despre ce să fac... ce fac cu timpul de contact? Deci există o serie de aplicații interesante. În fiecare an au loc mai multe incidente cu avioane pe pistă de unde sunt decolate vârfurile aripilor. Așa că aceste avioane au aripi foarte lungi și, de obicei, sunt aruncate înapoi. Deci nu sunt îngrozitor de vizibile. Și astfel există o oportunitate de a le lovi într-o clădire sau într-un alt avion. Și este un lucru foarte scump de rezolvat. Nu vă pune viața în pericol în majoritatea cazurilor, dar este ceva ce încercați și evitați. Și pe măsură ce te apropii de locul în care te urci în avion, de multe ori este o persoană acolo jos cu un baston cu lumină roșie . Și se numesc wingmen. Și motivul este că trec pe sub vârful aripii, astfel încât pilotul să poată privi înapoi și să vadă unde este proiecția la sol a aripii. Și voi încerca să nu lovesc scara aceea cu aripa. Deci, se pare că ai putea implementa timp pentru contract. Adică, îl poți implementa cu ușurință pe Android, de exemplu. Așa că ai putea construi o cutie mică cu adevărat ieftină. Singurul scop în viață este să privești și să vezi dacă ceva se apropie rapid și apoi să te avertizezi. Și așa ne-am gândit să sugerăm asta producătorilor de avioane și altele. Și nu a ajuns nicăieri. Dar Boeing a acceptat ideea și au venit cu o soluție radar de 150.000 de dolari. Și, evident, va fi mult mai distractiv de implementat pentru corporație decât ceva la fel de prostesc ca acesta. Deci, oricum, struguri acri. Următorul proiect este aterizarea NASA pe Europa. Deci Europa este departe. Și avem o idee despre ce este acolo, dar nu prea multe. Deci nu este ca și cum am avea hărți topografice detaliate și imagini. Și așa vor ceva care să doboare în mod fiabil o navă spațială. Și astfel o idee este să folosiți timpul pentru a contacta controlul. Deci haideți să vedem cum facem asta. Deci avem un sistem de control tipic. Introducem timpul dorit pentru a contacta. Apoi avem o estimare reală și le scădem pe cele două. Și asta ne oferă un fel de semnal de eroare. Și îl înmulțim cu un câștig și îl folosim pentru a controla avionul, motorul rachetei pentru a schimba accelerația. Și apoi există un sistem dinamic, care este de ordinul doi, în sensul că controlăm accelerația, nu înălțimea direct. Înălțimea este cu două integrale mai jos de partea pe care o putem controla. Și apoi există un sistem de imagistică. Și astfel acest sistem face ceva foarte simplu, care poate nu este cel mai bun pe care îl poți face, dar este ușor de analizat, și anume să încerci și să menții timpul de contact cu același. Așadar, dacă măsurarea dvs. arată că, la rata actuală de coborâre, veți avea un timp de contact mai scurt decât doriți, atunci va adăuga ceva mai multă forță motorului. Și invers, dacă se pare că plutești prea mult, ar trebui să cobori, atunci timpul de contact va apărea mare. Și apoi semnalul de eroare vă va face să reduceți puterea motorului. Deci un sistem foarte simplu. Și am văzut că timpul de contact este foarte ușor de implementat. Și nu îi pasă care sunt imaginile în mare măsură. Deci nu știm cu adevărat cum arată suprafața Europei , decât de departe. Dar nu depindem de o anumită textură, sau de calibrare, sau de harta topografică a suprafeței sau așa ceva. Această metodă funcționează cu orice textură. Ei bine, doar că am văzut că au existat anumite texturi speciale în care ar eșua. Dar, probabil, Europa nu a fost pictată într-unul dintre aceste modele unice cu dungi. Care este dinamica acestui lucru? Pentru că această idee a controlului timpului de contact poate fi folosită și în alte situații , cum ar fi în mașinile autonome. Dar să ne concentrăm pe coborâre aici. Acum, de ce timp constant pentru a contacta? Ei bine, nu prea știm cum să calculăm cu precizie, fiabil și ușor înălțimea dintr- o imagine a camerei monoculare, cu excepția cazului în care avem o țintă, cum ar fi un Walmart și știm ce dimensiune au Walmart-urile. Deci putem calcula cât de sus suntem. Ei bine, nu sunt niciuna pe Europa. Aşa sper. Asta nu va funcționa pentru noi. Deci, dacă am putea calcula separat înălțimea și viteza, atunci am putea face lucruri mult mai sofisticate. Dar știm că putem obține foarte robust raportul lor într-un mod foarte simplu. Deci asta este atracția acolo. Deci avem Z/w este T. Și acum presupunem că T este constant. Este foarte curios că atunci când DARPA a avut marea provocare, desigur, MIT a fost implicat în asta. Și am echipat o mașină. Și a existat o secvență pe care am crezut că ar fi interesant de calculat după fapt. Au înregistrat tot acest videoclip. Să facem ceva cu el. Să calculăm timpul de contact. Și așa este vehiculul care iese dintr-o parcare și se apropie de autobuzul de transport al MIT. Iar dacă trasezi timpul pentru contact, este aproape constant. Deci mașina încetinește. Cu cât se apropie de autobuz, cu atât încetinește mai mult. Și deci nu am idee ce a făcut asta în algoritmul de control al acelui vehicul autonom, dar a fost interesant de observat că a folosit un timp constant pentru a contacta controlul pentru a se apropia de autobuz fără să dau peste el. Ei bine, iată o ecuație pe care o putem rezolva. Deci trece Z peste dZ dt este T. Și deci dZ dt este 1/T Z. Și ei bine, există o ecuație diferențială obișnuită pentru care ar trebui să cunoașteți soluția, ținând cont că T este o constantă. Deci dZ dt este proporțional cu Z. Ce fel de funcție face asta? Quadratic? Exponenţial? Oricine? BINE. Deci obținem Z este e la minus t peste T, ceva de genul acesta. Diferențiem asta, iar derivata este proporțională cu funcția în sine. Și așa că dacă implementăm acest sistem de control al timpului constant de contact , ceea ce vom descoperi este că vom obține o coborâre care arată așa. Deci, iată Z0-ul nostru. Deci va fi frumos, treptat și neted și nu va ajunge niciodată acolo. Deci asta e dezavantajul. Deci ce faci acolo? Ei bine, putem face ceea ce fac muștele. Ei folosesc timp constant pentru contact atunci când aterizează pe tavan. Și când picioarele lor ating tavanul, se opresc. Așa că putem avea sârmă care atârnă de nava noastră spațială și când atinge pământul, oprim motoarele. Și apoi va cădea doar ultimul metru sau 2. Și această metodă, desigur, a mai fost folosită în navele spațiale planetare. Dar îl putem combina aici cu timpul de contact. Deci, la un moment dat, avem un dispozitiv de măsurare a distanței, un fir real și apoi pur și simplu scade sub control gravitațional până când lovește suprafața, cred. Deci acesta este un aspect al acestui lucru. Și putem intra într- o analiză a erorilor a ceea ce se va întâmpla acolo. Doar pentru distracție, putem compara acest lucru cu o abordare mai tradițională. Deci, o abordare mai tradițională ar fi să rulăm motorul la viteza lui. Și decelerăm. Și îl pornim doar în momentul în care trebuie să îl pornim, astfel încât să nu ne izbim de suprafață. Deci acum această metodă necesită să cunoaștem distanța până la suprafață și să cunoaștem viteza. Așa că trebuie să știm o mulțime de lucruri, în cazul în care, cu timpul de a contacta controlul, nu știm. Păstrați timpul de contact constant. Deci, un avantaj al acestei metode alternative este că este mai eficient din punct de vedere energetic. Așa că aici vom ajunge aproape într-un mod de plutire. Deci irosim combustibil într-un fel. Deci există un compromis. Așa că ignorăm faptul că nava spațială devine mai ușoară pe măsură ce folosește combustibil și astfel accelerația se va schimba. Vom presupune doar că este constantă. Și așa integrăm asta o dată și obținem o constantă de integrare. Și putem aplica condițiile la limită, care sunt că la un moment dat ajungem la suprafață. Și apoi ne integrăm a doua oară. O integrăm și obținem că Z este 1/2 a t pătrat plus o altă constantă de integrare. Și din nou, folosim condiția la limită și ajungem cu z este 1/2 a. Desigur, poți face asta invers. Ar putea fi mai ușor să începi cu asta și apoi să diferențiezi pentru a ajunge la accelerația constantă. Deci de ce m-am deranjat să fac asta? Ei bine, pentru că este interesant să întrebi, sub acel tip de control, care este timpul să contactezi? Și cum calculăm asta? Ei bine, avem nevoie de Z și dZ dt. Deci luăm doar raportul dintre acești doi. Deci T este... și asta va fi 1/2. Deci, care este timpul de contact în orice parte a acestei manevre. Și este fascinant că este jumătate din ceea ce primești aici. Aici, desigur, timpul de contact ar fi T minus T0. Dar datorită acestui control constant al accelerației, obținem acel rezultat. Oricum, este doar o modalitate de a compara timpul constant până la controlul contactului cu o abordare mai tradițională . Abordarea mai tradițională este oarecum mai eficientă din punct de vedere al consumului de combustibil. Dar este mult mai greu de implementat. Necesită estimări precise ale distanței și vitezelor. Oricum, aparent, NASA a decis că poate estima cu precizie distanța și viteza. Deci aceste programe nebune de viziune artificială, cine știe dacă vor funcționa? Deci nu vor face asta. Dar vă puteți imagina că există și alte aplicații pentru asta. Pentru că acesta este un senzor foarte prost. Adică, este pur și simplu o chestiune de estimare a gradienților cu forță brută și de acumulare de totaluri, de înmulțire și apoi de a rezolva o grămadă de ecuații. Deci este foarte simplu. Acum, înainte de a trece la un alt subiect, vreau să subliniez o altă generalizare pe care o vom aborda mai târziu și aceasta este fluxul optic. Deci, lucrarea despre Stella care vorbește despre problema mouse-ului optic este în primul rând... care este titlul? „Debitul fix computațional, determinarea fluxului fix”. Debit fix, ce înseamnă asta? Ei bine, înseamnă că mișcarea tuturor părților imaginii este aceeași. Și după cum am explicat, pentru un mouse optic, acesta este un model foarte bun. Asta e foarte exact. Dar pe măsură ce mă plimb prin cameră, mișcarea diferitelor părți ale imaginii nu este aceeași, deoarece ești la distanțe diferite. Și am văzut cum putem scoate asta dintr-o ecuație de proiecție în perspectivă prin diferențiere. Și obținem niște termeni care sunt afectați de împărțirea cu z și așa mai departe. Și apoi, de asemenea, unii dintre voi s-ar putea să se miște, o mișcare independentă. Nu e asta. Deci, aceste probleme sunt deosebit de ușor de rezolvat atunci când există doar câțiva parametri. Deci, pentru mouse-ul optic există două-- mișcare în x, mișcare și y. Ei bine, s-ar putea să întorci mouse-ul. Deci ar putea fi trei. Și probabil că vom aborda asta într-o problemă de teme. Așadar, va fi o ușoară generalizare a ceea ce am făcut cu funcția adăugată că nu doar urmăriți poziția mouse-ului, dar dacă utilizatorul îl întoarce, doriți și să recuperați asta. Poate nu pentru că este o intrare interesantă pentru interfața grafică, ci pentru că ar putea strica estimarea mișcării x și y dacă rotiți. Oricum, toate acestea sunt cazuri în care avem un număr destul de mic de necunoscute și avem un sistem extrem de supradeterminat. Avem o măsurătoare la fiecare pixel. Dacă nu avem asta? Ei bine, asta va fi o problemă, pentru că la fiecare pixel avem o astfel de ecuație. Deci avem o constrângere. Deci, dacă avem 10 milioane de pixeli, avem 10 milioane de constrângeri. Grozav. Cu excepția fiecărui pixel acum, avem și o viteză necunoscută. Vai! Cretă ieftină. Deci asta înseamnă că avem de două ori mai multe necunoscute decât ecuații. Ei bine, asta e o rețetă pentru dezastru. Deci extrem de subconstrâns și este o problemă prost pusă. Și în acest caz, este prost pus în sensul că există un număr infinit de soluții. Și de fapt, dacă îmi oferi o soluție, pot construi cu ușurință o altă soluție, pentru că tot ce trebuie să fac este la fiecare pixel de care trebuie să mă supun acestei constrângeri. Deci, la fiecare pixel, sunt undeva pe această linie. Și acum îmi dați, citat, „soluția corectă” care scrie aici pentru acel pixel. Ei bine, treaba este că pot merge acolo. Nu schimba nimic. Și asta e destul de dramatic. Asta înseamnă că pot trece sistematic prin imagine și la fiecare pixel vă pot oferi un număr infinit de alte valori care vor funcționa. Deci vom avea nevoie de o constrângere grea. Și o constrângere pe care o putem folosi și pe care o vom folosi mai târziu este aceea că punctele învecinate din imagine nu se mișcă independent. Este posibil să nu se miște cu aceeași viteză, dar tind să se miște cu o viteză similară. Deci este un lucru bun și un lucru rău. Adică, e bine în asta, oh, aici avem un fel de constrângere. Și este un lucru rău, pentru că nu este ca o ecuație care spune că u plus 3v este 15 sau așa ceva. E mai vag. E ca și cum, oh, variază ușor. Ce înseamnă asta? Ce e lin? Ce schimbare de epsilon poți permite? Deci, asta face ca problema să fie foarte interesantă și netrivială. Vom ajunge la asta mai târziu. Nu avem instrumentele în acest moment pentru a face asta, dar este doar pentru a vă avertiza asupra faptului că fluxul fix nu este totul și pune capăt tuturor. Mai urmează. Acum, să presupunem că nu aveți instrumentele necesare pentru a rezolva această problemă. Ei bine, puteți face ceva, care este să împărțiți imaginea în bucăți și apoi să aplicați flux fix pentru fiecare piesă. Și ideea este că, ei bine, dacă facem piesele suficient de mici, nu vor exista prea multe variații în viteza în interiorul acelei piese. Și deci ipoteza că u și v sunt constante în acea zonă mică nu este una atât de rea. Și așa că acum există tot felul de compromisuri, pentru că dacă facem aceste cutii foarte mari, obținem doar o imagine foarte grosieră a fluxului. Avem doar un vector de flux pentru fiecare dintre aceste casete. Pe de altă parte, dacă facem zonele subimagine foarte mici, avem mult mai puțină constrângere. Și avem mult mai puțin din această minunată proprietate de suprimare a zgomotului a unui sistem supradeterminat. Și, de asemenea, atunci când ne uităm la zone mici ale unei imagini, este mult mai probabil ca acestea să fie similare cu tipul de imagine despre care am vorbit și care nu funcționează. Dacă mă uit la o zonă foarte mică a imaginii și are doar această margine în ea, ei bine, acesta este exact genul de lucru în care intervine problema cu deschiderea. Și nu pot determina care este mișcarea în acea direcție. Deci da, poți face asta. Puteți folosi ceea ce avem noi-- metoda fluxului fix pe o grilă a unei imagini tăiate. Dar există compromisuri și sunt oarecum neplăcute. Dacă faceți aceste zone destul de mici, unele dintre ele pot fi chiar mai mult sau mai puțin uniforme ca luminozitate. Dacă mă uit la acel perete gri, este uniform ca luminozitate. Și dacă se mișcă, nu pot spune. Este la fel. Deci, oricum, acesta este ceva care a fost făcut și funcționează, dar nu este soluția pe care o vom căuta. Ne îndreptăm spre a vorbi mai mult despre luminozitate decât despre proiecția în perspectivă. Dar vreau să fac încă un lucru cu proiecția în perspectivă. Și asta are de-a face cu punctele de fuga. Și acestea joacă un rol în calibrarea camerei sau, uneori, în găsirea orientării relative a două sisteme de coordonate. Și doar pentru a face acest sunet mai puțin misterios, dacă avem obiecte create de om , acestea au adesea suprafețe plane. Și au adesea unghiuri drepte între suprafețele lor plane, cu excepția cazului în care te duci pentru a începe acolo. Și atunci când ne uităm în imagini, vom găsi adesea o mulțime de margini drepte. Și adesea, multe dintre ele sunt paralele. Și așa putem de fapt exploata asta. Deci, dacă, de exemplu, pluți deasupra unei clădiri, cum ar fi clădirile principale de la MIT, toate pe o grilă dreptunghiulară, poți determina din imagine anumite puncte de fuga. Și din asta, puteți determina rotația dvs. în raport cu sistemul de coordonate al acelui bloc dreptunghiular. Și așa e ceva acolo. Sau dacă vă uitați la un cub sau la un alt obiect de calibrare, este posibil să puteți recupera parametrii sistemului de imagistică. Deci, este important în calibrarea camerei, ceea ce este, desigur, important în robotică și alte aplicații. Deci haideți să vedem despre ce este vorba. Deci, în prima problemă de teme, una dintre întrebările care vi s-a pus este, care este predicția unei linii? Și există diferite moduri de a aborda asta algebric sau geometric. O modalitate geometrică este doar să spun, iată linia mea. O să-l conectez la centrul proiecției. Și ce primesc? Ei bine, iau un avion. Dacă mă conectez... dacă mă uit la locul tuturor acelor linii care leagă acel punct de linie, formează un plan. Și atunci care va fi imaginea lui? Ei bine, o să intersectez asta cu planul imaginii. Deci, care este intersecția unui plan cu altul? Este o linie dreaptă. Deci, există o modalitate simplă de a vedea acea linie în 3D proiectată într-o linie în 2D. Este o proiecție amuzantă prin faptul că, dacă ar fi să marchezi asta ca pe o bandă de măsurat cu intervale egale, și apoi te uiți la proiecția acelor semne, acestea nu vor fi distanțate egal, deoarece partea în care banda de măsurat este aproape de tine va imaginea cu o mărire mai mare, astfel încât semnele să fie mai depărtate atunci. Deci faptul că o linie merge la o linie este puțin prea încrezător. Ne face să credem că înțelegem foarte bine problema, când de fapt este puțin subtilă. Deci, cealaltă cale este algebrică. Astfel, o modalitate prin care putem face acest lucru este să spunem că o linie în 3D poate fi definită în diferite moduri. Una dintre ele este că avem un punct pe linie și apoi avem o direcție. Și am putea la fel de bine să folosim un vector unitar pentru a defini direcția. Deci, acesta este un mod de a vorbi despre o linie în 3D. Care sunt alte moduri? Vă puteți gândi la alte moduri? Putem face o reprezentare parametrică în care avem, de exemplu, x este o funcție a unui parametru T și y este o funcție a parametrului T și z este o funcție a parametrului T sau putem avea o reprezentare implicită, sau avem poate intersecta două plane. Și de ce este convenabil? Ei bine, ecuația unui plan este o ecuație liniară. Și atunci când intersectezi două plane, atunci avem de-a face cu două ecuații liniare. Am văzut deja că a avea ecuații liniare poate fi un plus. Dar să rămânem cu asta. Și sub formă de componentă, desigur, asta înseamnă doar că este x0 plus s. Cum l-am numit, alfa sau așa ceva? Alfa s. Deci, acum vom proiecta asta în imagine folosind proiecția în perspectivă. Și putem, desigur, să folosim forma componentă pe care am folosit-o acolo sau putem folosi forma vectorială. Și așa obținem... din păcate, acest lucru nu duce la un rezultat foarte elegant și frumos. Sau, mai degrabă, nu este fără... îmi pare rău. Bănuiesc că Z depinde de gamma. Doar dacă nu mergem mult mai departe decât îmi doresc, când va deveni din nou frumos și elegant. Deci asta este transformarea noastră. Și deci s este un parametru care variază de-a lungul liniei. Deci puncte diferite de pe linie au valori diferite ale lui s. Și dacă acesta este un vector unitar, atunci s este de fapt o măsură a lungimii de-a lungul acolo. Din cauza acestei împărțiri cu Z, e cam dezordonat. Dar un lucru care este interesant de făcut este să ne uităm la ce se întâmplă atunci când mergem foarte departe de-a lungul liniei. Deci mergem acolo. Deci facem e foarte mare. Ei bine, asta înseamnă că putem ignora s0 și putem ignora z0. Și obținem alfa peste gamma. Gamma, nu beta. Și acesta se numește punctul de fuga. Deci, pe măsură ce vă deplasați pe această linie, începeți să mergeți din ce în ce mai încet în imagine. Și te apropii, dar nu ajungi niciodată în acest punct. Și astfel, de fapt, imaginea unei linii infinit de lungă nu este o linie infinit de lungă în planul imaginii. Începe de undeva și de aici începe. Apoi, pe măsură ce ne deplasăm de-a lungul liniei în 3D, nu ne deplasăm de-a lungul liniei în 2D într-un mod uniform, pentru că atunci când suntem foarte departe, ne putem deplasa mult în 3D. Și are doar un efect mic în imagine. Așa că asta îl face cam ciudat. Acum, un lucru pe care ar trebui să-l recunoaștem imediat este că liniile paralele au același punct de fugă, deoarece offset-ul x0, y0, Z0, originea dreptei noastre, nu intră în această ecuație. Doar direcția contează. Și deci este interesant, pentru că asta înseamnă că dacă avem o grămadă de linii paralele în 3D, toate vor da naștere la același punct de fugă. Deci, dacă ne uităm la o clădire dreptunghiulară, există trei seturi de muchii, fiecare conținând linii paralele. Și așa ne așteptăm să vedem trei puncte de fugă. Deci, să vedem dacă pot face asta. Acest lucru ar putea fi... Acum, este un pic extrem pentru că am ales punctele de fuga destul de aproape. Deci iată un cub. Ei bine, nu atât de bine. Dar oricum, dacă ar fi adevărat, ar exista trei seturi de linii paralele, care dau naștere fiecare unui punct de fugă. Și ce dacă? Ei bine, ideea este că, dacă pot găsi acele puncte de fuga în imagine, le pot folosi în avantajul meu pentru a afla ceva despre geometria situației de preluare a imaginii . Și doar pentru a vă anunța că acesta nu este un lucru teoretic vag de care nimănui îi pasă, iată o aplicație. Așa că în fiecare an câțiva oameni sunt uciși pe marginea drumului din cauza șoferilor distrași, chiar înainte de a trimite mesaje. Și așa că există un interes să încercăm să avertizam pe oricine s-a oprit acolo -- ofițer de poliție, muncitor în construcții, orice-- că există o mașină pe o traiectorie care ar putea să-i afecteze. Deci cum faci asta? Ei bine, poți să bagi o cameră foto, poate un telefon Android, în fereastra cruiserului. Și urmărește-- asta este în mare parte noaptea-- urmărește farurile trecând. Și este monocular, deci nu are informații de profunzime. Dar se poate da seama dacă traiectoria este posibil periculoasă sau nu. Dar unul dintre lucrurile pe care trebuie să le facă este să-și dea seama de geometria sistemului său de coordonate și a sistemului de coordonate al drumului. Nu doriți ca persoana care îl folosește să fie nevoită să iasă cu echipament de topografie și să măsoare unghiurile și așa mai departe. Deci, camera trebuie să încerce singură să determine rotația sistemului său de coordonate centrat pe cameră în raport cu linia, drumul, x, y și z. Și așadar, o modalitate de a face asta este să cauți un punct de fugă. Deci, în cazul în care secțiunea de drum este dreaptă, puteți utiliza metode de procesare a imaginii pentru a găsi acele linii. Și apoi le puteți intersecta pentru a găsi punctele de fuga. Și apoi le puteți folosi pentru a recupera cel puțin doi parametri ai transformării. Unul este cât de mult este întors camera față de direcția drumului, iar celălalt este cât de mult este întors camera față de linia către orizont. Deci avem pan și tilt. Și putem obține pan și înclinare folosind puncte de fuga. Uf, nu vreau să fac asta. Deci, să ne gândim la folosirea acestui lucru în calibrarea camerei, o altă aplicație. Deci, în calibrarea unei camere, există mai mulți parametri pe care îi căutați. Principalele sunt centrul de proiecție. Deci spui, ei bine, da, centrul de proiecție este acolo unde este obiectivul. Da. Dar unde este obiectivul? Și față de ce? Deci, iată senzorul nostru de circuit integrat. Și aici sus este lentila sau gaura pentru moment. Și probabil, cine a construit chestia asta încearcă să pună centrul de proiecție deasupra mijlocului cipului. Dar asta nu va fi neapărat făcut cu acuratețe. Adică, aceste lucruri sunt microscopice în unele cazuri, precum chestia asta. Avea o distanță focală de 4 milimetri. Și astfel avem de-a face cu cantități foarte mici. În plus, pixelii de aici pot avea 10 microni, sau în telefonul mobil poate doar 5. Deci este foarte puțin probabil să poți poziționa obiectivul în așa fel încât să fie precis la o poziție a senzorului. Așa că trebuie să recuperăm acea poziție. Și, de asemenea, trebuie să recuperăm înălțimea proiecției centrale deasupra planului imaginii. Și în cele din urmă, vom folosi un sistem centrat pe cameră, care are originea în centrul proiecției. Dar pentru a face asta, trebuie să înțelegem cum rândul și coloana din senzorul de imagine se traduc în x și y în acel sistem de coordonate centrat pe cameră. Deci răspunsul scurt este, dacă îmi oferiți un sistem de coordonate în cip, care este, să spunem, un număr de coloane și rânduri, vreau să știu unde este acel punct. Și de obicei, numărul de rânduri și coloane nu va fi luat din centrul cipului, ci dintr-unul dintre colțuri. Și când îmi dai poziția centrului de proiecție, ce unități vreau? Dimensiunea pixelului. Ar fi bine să-l avem în microni. Dar dacă nu știi dimensiunea pixelilor, nu poți face asta. Și invers, nu trebuie să cunoașteți dimensiunea pixelilor pentru proiecție. Putem exprima asta. La fel ca distanța focală, o putem exprima în termeni de dimensiune a pixelului, mai ales ușor dacă pixelul este pătrat. Adică, altfel, trebuie să te ocupi de faptul că dimensiunile x și y nu sunt la aceeași scară. Deci asta e sarcina. Spune-mi unde este acel punct. Și poate fi necesar să fie repetat, mai ales dacă este o cameră care are capacitate de zoom, pentru că atunci toate acestea se vor schimba pe măsură ce măriți și micșorați. Și ați dori să efectuați din nou acest tip de calibrare. Deci, există diferite moduri de a face acest lucru. Unul este... și vom mai vorbi despre asta mai târziu. Dar iată una foarte simplă. Folosim un obiect de calibrare. Și astfel un obiect de calibrare este ceva cu o formă cunoscută. Și am vorbit deja despre asta când am arătat diapozitivele, unde am folosit sfera ca obiect de calibrare. Deci o sferă ar fi un obiect de calibrare util aici? Deci imaginea sferei, așa cum ați văzut în problema 1 a temei, este o secțiune conică. Și așa, de exemplu, dacă sfera s-ar afla direct deasupra acestei linii, proiecția ei ar fi un cerc. Sfera este aici sus. Și de unde știu asta? Ei bine, pentru că conectez sfera la centrul proiecției. Și primesc un con circular drept. Și îl extind aici jos și îl intersectez cu acest plan și intersectez conul circular drept cu un plan perpendicular pe axa lui. Și obțineți un cerc. Dar când mut sfera în lateral, va deveni eliptică. O să devină... imaginați-vă... să luăm un caz extrem în care asta se întâmplă aici. Și acum îl proiectați în imagine, devine o elipsă foarte alungită. Și dacă o muți suficient de departe, va fi o hiperbolă. Deci da, poți face asta. Dar atunci ar fi nevoie să determinați cu precizie poziția acelei figuri, fie că este o elipsă, sau hiperbolă, sau cerc, sau parabolă, și parametrii ei. Deci asta se poate face. Dar câștigul de zgomot este mare. Nu este o metodă foarte bună. Marele avantaj al acestui lucru este că o sferă este ușor de realizat, ușor de obținut. Un cub nu este. Deci hai să încercăm un cub. Știu că un cub nu este ușor pentru că atunci când tatăl meu și-a făcut maestru în echipamente de operare pentru a face obiecte, sarcina lui era să facă un cub de 1 centimetru. Și trebuia să fie precisă la un micron. Și se pare că i-a luat destul de mult timp să o facă pentru că trebuia să fie precisă la un micron, iar părțile laterale trebuiau să fie în unghi drept și așa mai departe. Deci, a face o sferă ca obiect de calibrare este oarecum mai ușor decât a face un cub. Dar cubul are câteva avantaje uriașe. Și o modalitate de a o exploata este această diagramă. Deci, dacă luăm o imagine a cubului, putem detecta marginile. Vom vorbi despre asta mai târziu. Și apoi le putem extinde pentru a găsi punctul de fugă. Și apropo, punctele de fuga nu trebuie să fie neapărat în imagine. S-ar putea ca imaginea pe care o vedeți de fapt să fie chestia asta. Punctele de fugă sunt în acel plan, dar ele, în multe cazuri, nu sunt în imagine. Și de aceea mă lupt parțial. Pe lângă faptul că nu am abilități de desen, m-am luptat cu acea diagramă, deoarece, în situația reală, tind să fie mai departe. Și astfel distorsiunea perspectivei, așa cum se numește, nu ar fi la fel de extremă. Şi ce dacă? Deci am un obiect de calibrare care este un cub. Și apoi îi fac o poză. Și găsesc punctele de fugă. Ce atunci? Ei bine, un lucru pe care îl știu este că cubul are trei seturi de linii paralele. Și acestea sunt în unghi drept unul față de celălalt. Dacă nu ar fi, atunci ar fi un paralelipiped, nu un cub. Deci sunt în unghi drept unul față de celălalt. Și asta este foarte important pentru că mă aduce la ecuațiile pentru punctele de fugă. Înseamnă că direcțiile către punctele de fugă sunt în unghi drept unul față de celălalt. Deci, iată centrul meu de proiecție și apoi am trei vectori corespunzători celor trei seturi de linii. Deci, există unul care merge în sus și în jos, și unul din partea aceea și unul din partea aceea. Și le pot desena prin centrul proiecției. Deci iată unul, iată altul și iată al treilea. Și care sunt acele linii? Ei bine, acestea sunt linii în direcția liniilor 3D, pe care cred că le-am pierdut acum. Așa că am spus că toate liniile din acest pachet paralel proiectează în același punct de fugă. Dar există unul special, care este cel care trece prin centrul proiecției. Așa că gândiți-vă la toată această mulțime de linii paralele. Și toate ajung în același punct de dispariție. Dar ele pot fi reprezentate printr-o singură linie. Putem alege doar unul. O alegem pe cea care trece prin centrul proiecției. Și deci asta este. Deci, acesta este... și, din cauza modului în care funcționează proiecția noastră, există un punct aici jos și un punct aici în planul imaginii. Deci, dacă îmi spuneți cei trei vectori care indică în 3D de-a lungul liniilor, vă pot spune unde vor fi reprezentați doar prin această construcție, pentru că iată direcția care merge de-a lungul uneia-- aici toate aceste linii paralele. Toți merg în acea direcție. Și tot ce trebuie să fac este să urmăresc asta înapoi în planul imaginii și acesta va fi punctul ei de dispariție. Deci, acesta este punctul de dispariție 1, punctul de dispariție 2. Le-am numit altceva. Îmi pare rău. Cred că le-am numit a, b și c. Acum, lucrul bine este că știu că, dacă obiectele mele de calibrare sunt un cub, acești trei vectori de aici de sus nu sunt orice trei vectori vechi, ci toți sunt în unghi drept unul față de celălalt. Greu de desenat asta, dar există trei relații între ei. Deci, să numim centrul necunoscut de proiecție p. Asta e sarcina noastră. Găsiți p, având în vedere a, b și c. Ei bine, atunci pot spune asta. Deci de ce este asta? Ei bine, p minus a este vectorul de-a lungul acestei linii. Și p minus b este vectorul de-a lungul acelei linii. Și aceștia sunt aceiași vectori ca acești doi. Și știm că sunt în unghi drept. Și produsul scalar al doi vectori care sunt în unghi drept este 0. Deci obținem calibrarea, evident. Facem o imagine. Găsim punctele de fugă. Și apoi avem acele trei ecuații și avem trei necunoscute, și anume componentele lui p, centrul de proiecție. Sau un alt mod de a-l privi este că trebuie să cunoaștem această înălțime. Numiți-o f. Și trebuie să știm unde este aceasta pe senzorul de imagine. Deci există două grade de libertate aici, un grad de libertate acolo, trei în total. Dar pur și simplu vorbind, încercăm să aflăm unde este asta. Și acesta este un vector în 3D, deci are trei grade de libertate. Avem trei ecuații. Grozav. Ei bine, dacă te uiți la ele, vei vedea că sunt de ordinul doi la p. p este necunoscutul. Și sunt de ordinul doi. Sunt pătratice. Deci există un număr finit de soluții, cu excepția cazurilor patologice. Dar care este numărul de soluții? Deci, cu o singură pătratică, știm că sunt posibil două. Deci poate sunt mai multe soluții. Deci există un lucru numit teorema lui Bézout, pe care îl vom folosi destul de mult. Și spune că numărul maxim de soluții este produsul ordinului ecuațiilor. Deci, de exemplu, dacă am două pătratice, este posibil să existe patru soluții, de 2 ori 2. Aici am trei pătratice, deci este posibil să existe opt soluții. Deci este neplăcut, așa că vrem să vorbim mai multe despre asta. Apropo, se numește teorema lui Bézout după Bézout, care a scris asta și, de fapt, Newton a folosit acest rezultat în Principia lui. Dar nu a oficializat-o cu adevărat. L-a folosit ca și cum oricine ar ști asta, așa ceva. Și când Bézout a scris-o, de fapt nu a dovedit-o riguros. Deci sunt o mulțime de... e ca de obicei. Cineva ajunge cu numele pe ceva și există o întreagă poveste interesantă în spatele ei, cum ar fi, OK, el nu-- de fapt nu a fost primul, sau de fapt nu a înțeles bine, sau așa ceva. Oricum, este o teoremă importantă pentru noi. Acum, cu ecuații liniare, produsul este întotdeauna 1, nu? 1 la orice putere este 1. Deci, cu ecuațiile liniare, atâta timp cât putem potrivi constrângerile cu necunoscute, am terminat. Din păcate, în alte cazuri nu este chiar atât de simplu. Dar putem face ceva, și anume observați că acestea nu sunt doar ecuații pătratice vechi. Au o structură foarte specială. Și le putem scădea în perechi pentru a scăpa de termenul de ordinul doi. Așa că putem obține... deci să vedem. Dacă scădem primul și al doilea, ajungem cu asta. Acesta este 0. Și apoi putem obține încă câteva. Atât de grozav. L- am redus la trei ecuații liniare. Și știm că au o singură soluție. Ei bine, nu atât de repede. Sunt acele trei ecuații liniare liniar independente? Trebuie să ne facem griji pentru acel caz marginal în care matricea este singulară și așa mai departe. Ei bine, adevărul este că dacă adăugăm două dintre acestea, obținem al treilea. Deci nu sunt ecuații independente. Deci, de fapt, când ajungem la al treilea, ar trebui să ne oprim. Deci da, îl putem reduce la două ecuații liniare. Dar tot am rămas cu un pătratic. Și deci răspunsul este că există două soluții. Și nu vom face de fapt algebra, dar este destul de simplu. Nu am terminat cu asta. Am vrut să spun ceva mai mult, dar nu avem timp. Deci un lucru pe care am vrut să-l spun în continuare este că acele ecuații liniare, ce definesc ele în spațiul 3D? Avioane. Deci fiecare dintre ele definește un plan. Și ceea ce facem cu adevărat este că intersectăm acele avioane. Și se dovedește că două avioane se intersectează pe o linie. Și se dovedește în acest caz că acea linie conține al treilea plan. Deci cel de-al treilea avion nu-ți aduce nimic. Și apoi doar pentru a rezuma modul în care funcționează, și vom termina asta data viitoare, de multe ori, avem nevoie de calibrarea unei camere. Timpul de contact este unul dintre puținele locuri în care nu am avut nevoie de o cameră calibrată. Și pentru a calibra o cameră, folosim adesea obiecte de calibrare. Adică, nu trebuie să fie un cub. Ar putea fi, de exemplu, colțul unei camere, atâta timp cât cunoașteți geometria acesteia. Și apoi, în acest caz, punctele de dispariție sunt adesea utile. Și putem stabili geometria punctelor de fugă, care ne conduc la un set de ecuații. Și când le rezolvăm, găsim poziția centrului de proiecție. Acum, dacă lentilele ar fi perfecte, asta ar fi. Deci asta ar fi pentru calibrarea camerei. Și vom vorbi mai multe despre calibrarea camerei mai târziu. Lentilele noastre au distorsiuni radiale și există motive pentru care oamenii nu scapă complet de asta. Deci, de fapt, în practică, când faceți calibrarea camerei robotice reale, aceasta este plus parametrul de distorsiune radială . Deci bine. Asta e pentru azi.