[SCRÂTÂT] [FOȘIT] [CLIC] PROFESOR: Deci vorbim despre orientarea relativă, una dintre a doua din cele patru probleme din fotogrammetrie relevante pentru stereo binocular, precum și structura vederii în mișcare , structura din mișcare. Și am dezvoltat o soluție. Și ne întrebăm despre circumstanțele în care asta nu va funcționa. Și în special, există suprafețe în care nu putem determina orientarea relativă? Și am ajuns acolo. Am descoperit că au existat suprafețe cvadrice în acea familie de suprafețe. Acum, rețineți că acesta este într-un sistem de coordonate care a fost special aliniat pentru a simplifica ecuația. Deci, acesta este, în primul rând, centrul este la origine. Și topoarele sunt aliniate. Deci, într-un caz mai general, am avea o ecuație cu aspect mai complicat, în care nu avem doar termenii de ordinul doi. Dar avem și termeni de ordinul întâi și termeni de ordinul zero, constante. Dar în clasificarea formelor, aceasta este o formă convenabilă. Și am observat că dacă avem toate semnele pozitive, atunci avem un elipsoid. Și dacă A, și B și C sunt la fel, atunci este o sferă. Dacă avem un semn negativ, avem un hiperboloid dintr-o singură foaie. Dacă avem două semne negative, avem un hiperboloid din două foi. Și dacă avem trei semne negative, atunci nu avem niciun loc real. Dar dacă o extindem la numere complexe, atunci putem vorbi despre un elipsoid imaginar. Acum, ecuația particulară pe care am obținut-o din problema orientării relative a intrat în această categorie. Și de fapt, modul în care putem ajunge acolo este să observăm că nu a avut un termen constant. Deci era de ordinul doi, dar avea doar termenul de ordinul doi și termenul de ordinul întâi. Și gândiți-vă la asta ca la o astfel de ecuație. Și asta înseamnă că R egal cu 0 este soluția. Și astfel acel punct este la suprafață. Și ce a fost asta din nou? Ei bine, asta a fost originea sistemului cu mâna dreaptă. Sau în cazul viziunii în mișcare, acesta este locul în care se află camera la momentul 2. Deci, este interesant. Aceasta înseamnă că această suprafață ciudată este una în care trebuie să fim de fapt pe ea cu ochiul drept, sau să ne deplasăm pe ea, în cazul vederii în mișcare. Ei bine, se dovedește că, în plus, dacă introducem un minus B pentru R, este și asta o soluție. Și ce este asta? Ei bine, dacă ne deplasăm la stânga de-a lungul liniei de bază cu B, atunci ne aflăm la originea sistemului de coordonate din stânga. Deci, de fapt, acea suprafață trebuie să treacă prin ambii ochi, ca să spunem așa. Sau în cazul vederii în mișcare, trebuie să începem de la suprafață și să ajungem înapoi la suprafață. Și acest lucru nu ar trebui să fie surprinzător, pentru că totul ar trebui să fie simetric între stânga și dreapta. Se întâmplă că am ales ca referință sistemul de coordonate din partea dreaptă. Dar ne-am aștepta ca același lucru să fie valabil și pentru sistemul de coordonate din stânga. BINE. În plus, deoarece aceasta este o ecuație omogenă, adică un polinom din R este egal cu 0 fără termen constant, nu există o scalare. Nu putem spune dimensiunea vectorului. Deci R egal cu kb este și o soluție, nu? Dacă R egal cu B ca soluție sau R egal cu minus B, atunci R egal cu kb este. Și asta înseamnă că întreaga linie de bază este la suprafață. Deci asta are o serie de implicații. Unul dintre ele este, sugerează că, ei bine, poate acesta este un caz rar. Cât de probabil este să fii la suprafață cu ambele poziții ale camerei și întreaga linie de bază dintre ele să fie la suprafață? Celălalt lucru înseamnă că este o suprafață reglată. Adică putem desena linii în suprafață, ceea ce desigur, nu putem face în cazul elipsoidului, nu? Dacă desenăm o tangentă, aceasta atinge suprafața într-un loc. Și apoi, pleacă în spațiu. Dar se pare că suprafața de care ne interesează este guvernată. Și asta înseamnă că, fără a face toată algebra detaliată, trebuie să fie aceea. Pentru că niciunul dintre acești doi nu este guvernat. De asemenea, odată ce am decis că este un hiperboloid dintr-o singură foaie, știm că are de fapt două reguli. Adică, în orice moment, putem trage o linie care rămâne pe suprafață mergând într-o direcție. Și există un al doilea care îl traversează. Deci e destul de interesant. Și asta corespunde cu metoda folosită la fabricarea meselor, scaunelor, ce ai scos din bețe drepte unde folosești două bețe care se încrucișează. Și deci este interesant că găsim această suprafață. BINE. Pare un caz cu totul special. De ce ne facem griji pentru asta? Ei bine, chestia este că aceasta este ecuația generală pentru cvadrică. Dar acoperă și un număr mare de cazuri speciale. Hiperboloizi parabolici și altele -- puteți găsi întreaga listă a acestor cazuri speciale online. Nu le voi trece prin toate , ci doar să mă concentrez pe una în special, care este plană. Acum, știm că aceasta este ecuația unui avion în 3D. Și dacă luăm o a doua ecuație a unui alt plan în 3D, acum ambele sunt liniare în X, Y și Z. Dar dacă le înmulțim pe cele două, atunci produsul va fi egal cu 0. Și care este acea ecuație descriind? Ei bine, descrie acele două avioane. Și dacă o înmulțim, obținem o cvadrică. Obținem ceva care are termeni de ordinul doi în X, Y și Z. Și, în mod curios, o suprafață ca aceasta se încadrează în această categorie. Și suprafețele plane sunt destul de comune în lume. Deci trebuie să ne facem griji pentru asta. Acum, se dovedește că pentru ca acestea să nu aibă o constantă pentru ele, unul dintre avioane trebuie să treacă prin originea sistemului drept și originea sistemului stâng. Cu alte cuvinte, trebuie să treacă prin linia de bază. Și deci unul dintre avioane este un plan epipolar. Și care este imaginea unui plan epipolar? Este o linie dreaptă, nu? Pentru că îți trece direct prin ochi. Și așa vezi că se apropie. Și deci nu este deosebit de interesant, pentru că nu vedem nimic din suprafața lui. Dar celălalt plan este arbitrar. Celălalt avion poate fi orice. Și asta e înfricoșător, pentru că asta înseamnă că potențial, atunci când ne uităm la o suprafață plană, ajungem cu această ambiguitate. Și nu este doar o problemă pentru stereo binocular și pentru reconstrucția hărților topografice. Dar este o problemă și pentru vederea în mișcare , recuperarea structurii din mișcare. Pentru că cele două probleme sunt într-adevăr la fel, din punct de vedere matematic. Și ei bine, ne vom opri aici, cu excepția faptului că nu ne-am uitat cu adevărat la modul în care geometria afectează lucrurile dincolo de asta. Deci, în special, pare puțin probabil să ne confruntăm cu această situație. Pentru că aveți toate aceste circumstanțe speciale. Dar poate că suprafața ta reală este destul de aproape de una dintre acestea. Și apoi, nu te vei întâlni exact cu această problemă. Dar aveți o amplificare mare a zgomotului , un câștig mare de zgomot. Așa că am dori să stăm departe de această situație. Și se dovedește că câmpul vizual are o mare influență în acest sens. Deci nu voi dovedi nimic despre asta. Dar practic, dacă avem un câmp vizual mare, atunci această problemă devine mult mai bine pusă, mult mai stabilă. Dacă avem doar un petic îngust și mic la suprafață, șansa ca acel petic să fie foarte asemănător cu unul dintre acestea este mare. Și deci este destul de instabil. Câmp vizual atât de mare, un câmp vizual mare. Și asta a dus la niște lucruri amuzante. Una dintre ele a fost că oamenii și-au dat seama destul de devreme când au început să facă fotografii aeriene. Dar nu aveau tehnologia lentilelor pentru a construi ceva care avea o reproducere a imaginii de o calitate incredibil de înaltă , de care aveau nevoie pentru a putea vedea o mulțime de detalii. Distorsiuni radiale scăzute, deci nu aveau imaginea distorsionată și, de asemenea, un câmp vizual mare. Deci, ceea ce au făcut a fost că au lipit o grămadă de camere împreună într-o structură foarte rigidă. Deci era un set de grinzi de oțel. Și ai înfipt aceste camere acolo. Și se numesc capete de păianjen, pentru că păianjenii au opt ochi. Și deci există o asemănare cu această soluție. Desigur, asta nu înseamnă că acum trebuie să calibrați aceste camere una față de cealaltă, astfel încât din fotografiile individuale să puteți compune o imagine mozaic ca și cum ar fi fost făcută de o singură cameră cu un câmp vizual larg. Dar arată clar că aceasta a fost o problemă bine-cunoscută care are 100 de ani în urmă. Cel puțin din punct de vedere practic, matematica a durat ceva mai târziu. BINE. Structura de orientare relativă din mișcare-- care a fost numărul 2. Să trecem la numărul 3. Și pe măsură ce mergem mai departe, facem din ce în ce mai puține detalii, pentru că multe dintre ideile de bază sunt comune pentru toate acestea. OK, deci orientare relativă - să trecem la orientarea interioară, care este practic calibrarea camerei. Și vei spune, o, dar noi am făcut asta. Ei bine, am avut o idee, care a fost folosirea punctelor de fuga. Deci problema a fost găsirea X0, Y0 și F, punctul principal și distanța principală. Și am avut o modalitate de a face asta, și anume să imaginăm o formă de cărămidă dreptunghiulară. Deci, logica noastră de calibrare ar putea fi o cărămidă prelucrată mai atent. Dar asta era ideea de bază. Și asta funcționează. Nu este foarte precis. Este greu să-l faci foarte precis. Și deci ceea ce ne dorim este o metodă mai generală. De asemenea, trebuie să luăm în considerare distorsiunea radială. Și metoda pe care am dezvoltat-o folosind o cărămidă dreptunghiulară nu se pretează foarte bine la asta. Deci, ce este asta despre distorsiunea radială? Ei bine, am menționat că putem face aceste computere analogice din sticlă care sunt atât de puternice în redirecționarea razelor în direcția corectă, astfel încât să ajungă la o focalizare fină și să ne ofere o imagine foarte detaliată, dar există compromisuri, tot felul de compromisuri . Și am menționat că, de fapt, este imposibil să faci un obiectiv perfect. Și practic trebuie să decideți cu ce veți suporta și ce nu. Și distorsiunea radială este ceva care în general, cu excepția cazului în care faci o fotografie a unei structuri arhitecturale cu multe linii drepte, nu observi mare lucru. Deci, dacă faci poze cu oameni, păduri și pisici pentru a le posta pe YouTube, nu contează cu adevărat că există o distorsiune radială. Pentru că nimeni nu o va observa niciodată. Și astfel, în proiectarea lentilelor, multe dintre celelalte probleme au fost reduse în dificultate, permițând distorsiunea radială, ceea ce înseamnă, practic, doar că există un punct în imagine - centrul distorsiunii. Și când exprimăm coordonatele în coordonate polare, atunci imaginea nu apare unde ar trebui. Dar apare în altă parte pe această linie. Și această eroare variază în funcție de rază. Și de obicei este aproximat folosind un polinom. Deci notația obișnuită este ceva de genul acesta. Deci puteți vedea că delta x delta y este proporțională cu x și y. Deci este un vector care este paralel cu vectorul rază. Deci este de-a lungul acelei linii radiale. Și apoi, termenul de ordinul cel mai mic este r pătrat. De ce, mă rog? Ei bine, voi lăsa asta pentru o potențială problemă la teme. De ce nu includem k0 din r sau ceva? Apoi, următorul termen este după al patrulea. Și în multe cazuri, primul termen este suficient de bun pentru a te duce undeva. Și atât de des, găsim doar primul termen. Da, spre margine. Dar acești coeficienți tind să fie foarte mici. Deci, dacă cumpărați un teleobiectiv de la, să zicem, Zeiss, obțineți cu el o diagramă a distorsiunii radiale. Și sunt calibrate manual. De aceea plătiți mulți bani pentru acele lentile. Și veți vedea că există această creștere pătratică. Dar există și o scădere de ordin mai mare. Și de asta se ocupă de obicei al doilea mandat. Deci da, distorsiunea se înrăutățește mult pe măsură ce ieși spre colțurile imaginii. Și nu prea este o problemă în centru. În viziunea artificială, de multe ori, putem scăpa doar cu un prim termen pătratic, pur și simplu simplificăm. Acum, cum măsori asta? Ei bine, o metodă faimoasă folosită în trecut este metoda liniilor de plumb. Așa că intri într-o zonă cu mult spațiu, cum ar fi un garaj. Și iei niște sfoară și niște greutăți. Și atârnă greutățile de-a lungul acelor sfori. Și de ce faci asta? Ei bine, pentru că acum, în primul rând, șirurile vor fi linii drepte. Vor fi întinse de sârmă. Și apoi, vor fi paralele, pentru că, probabil, gravitația arată în aceeași direcție în acele locuri. Nu sunt suficient de departe unul de altul. Și apoi, faci o poză cu asta. Și apoi, poza ta ar putea arăta, dacă ai exagerat, ar putea să arate așa. Și, în primul rând, puteți vedea că există o distorsiune. Și apoi, de asemenea, puteți vedea ce tip este. Aceasta se numește distorsiune în butoi, deoarece arată ca doagele de pe un butoi. În unele cazuri, s- ar putea să găsiți opusul. Și asta se numește distorsiune în pernuță. Bănuiesc că nu mai facem prea mult cusut manual în lumea noastră modernă, oricum. Deci poate părea un concept ciudat. Dar oamenii aveau nevoie de o modalitate de a-și pune ace deoparte. Și aveau o pernă mică. Iar forma pernei este forma pe care o vedem acolo. Deci sunt pini pe sinusul lui k1. Și celălalt lucru este, desigur, odată ce ai aceste imagini, poți să te uiți la raza de curbură a acestor linii. Și le folosiți pentru a estima k1. Dar o vom face prin măsurarea reală a imaginilor. Un punct subtil aici este, vrem să trecem de la coordonate nedistorsionate la distorsionate? Cu alte cuvinte, vom lua ecuația noastră de proiecție a perspectivei . Asta ne spune unde ar trebui să apară lucrurile. Și apoi, ne uităm la imagine pentru a vedea unde apar de fapt . Și apoi, potrivim această aproximare polinomială la aceasta. Sau vrem să trecem de la distorsionat la nedistorsionat, folosind din nou un polinom? Și de ce am putea dori să facem asta? Ei bine, pentru că distorsionarea este ceva ce putem măsura. Nu avem o modalitate de a măsura în mod direct cantitățile nedistorsionate . Deci cele două sunt legate, desigur, prin ceea ce se numește inversiunea de serie. Nu este o surpriză că așa se numește. Dar nu este ceva ce se preda de obicei. Și nu este în totalitate banal. Dar îl puteți automatiza și utiliza un algoritm care vă va duce de la polinomul care merge într-o direcție la polinomul care merge în cealaltă direcție. Modul în care ne afectează este că afectează sistemul de coordonate în care dorim să facem optimizarea finală. Pentru că, evident, va fi mai ușor să faceți optimizarea într-unul dintre acestea, în funcție de modul în care ați exprimat polinomul. Și cred că vom încerca să minimizăm eroarea din planul imaginii. Deci, din acest punct de vedere, s-ar putea să vrem să trecem de la nedistorsionat la distorsionat. Dar ne vom agăța de asta. Deci bine. Apropo, distorsiunea radială... ce zici de distorsiunea tangenţială? Ei bine, din fericire, nu trebuie să ne mai facem griji pentru asta. Dar doar pentru referință, așa ar arăta. Nu, mă scuzați. Minus y plus x. Din nou, polinom - ceva care crește odată cu puterea razei din imagine. Deci nu este o problemă în mijlocul imaginii. Și apoi, se înrăutățește când ajungi la colțuri. Și acum, este într-o direcție care este ortogonală. Deci delta x delta y-- acel vector în 2D-- este acum perpendicular pe acest vector, pe vectorul xy, nu? Deci, dacă luăm produsul direct, puteți vedea aici. Deci asta era o problemă, deoarece sistemele de imagistică erau aparate cu tuburi cu vid electromagnetice. Și pe lângă distorsiunea radială, ar avea o distorsiune tangențială bazată pe exact modul în care ați plasat acei electromagneți și așa mai departe. Nu este o problemă la dispozitivele moderne, deoarece cipul are o geometrie perfectă. Și lentilele, dacă sunt simetrice rotațional, au doar distorsiuni radiale. Dar fiți conștienți de faptul că se numește distorsiune radială. Pentru că mai este unul. Există câțiva factori suplimentari pe care îi ignorăm, pentru că sunt mici și pentru că depind de calitatea ansamblului obiectivului. Una se numește decentrare. Și, în special, dacă centrul de distorsiune nu este același cu punctul tău principal, deci distorsionezi un alt punct decât ceea ce ai considera în mod normal centrul imaginii în ceea ce privește proiecția în perspectivă , atunci tu" vom obține o compensare care depinde de poziție. Și de obicei, este foarte mic. Pentru că, de obicei, lucrurile sunt asamblate suficient de precis pentru ca asta să nu fie o problemă. Dar dacă doriți să faceți lucrări de înaltă calitate, cum ar fi fotografia aeriană, atunci trebuie să includeți asta. Un alt lucru de luat în considerare este dacă planul imaginii este înclinat. Deci iată obiectivul nostru. Și acum, imaginea ta... desigur, nu va fi înclinată atât de mult. Dar este un lucru mecanic pe care cineva l-a construit. Deci, există posibilitatea ca acolo să fie o mică eroare. Și asta, desigur, înseamnă că mărirea nu este destul de constantă. Și concentrarea va fi, de asemenea, o problemă. Dar dacă este un efect foarte mic, focalizarea nu va fi afectată prea mult. Dar tot va introduce o distorsiune. Și se dovedește că acestea două sunt legate. Deci, dacă vrei, poți avea un model mai complicat pentru distorsiune. Nu vom face asta. Dar se dovedește, în cele din urmă, când facem optimizarea neliniară, puteți avea orice doriți. Vom începe cu câteva formule în formă închisă. Dar, la sfârșit, vom arunca mâinile în sus și vom spune, oh, aceasta este o problemă neliniară dificilă. Îl dăm doar unuia dintre acele pachete. Și în acel moment, modelul tău de distorsiune poate fi mai complicat fără penalități mari, altele decât problemele de supraadaptare, cum ai introdus atât de mulți parametri încât îl va ajusta în mod special la măsurătorile tale experimentale. Iar precizia ridicată aparentă rezultată este falsă. Dar dincolo de asta, putem avea ceva mai complicat... deci care este strategia? Deci, ceea ce vom urma este metoda de calibrare a dimensiunii camerei cu unele modificări. Da. Ei bine, asta e o întrebare bună. Pentru că constatăm că ajustările mecanice și reglarea fină la producător sunt costisitoare. Soluțiile software tind să fie ieftine. Și astfel, în vremurile moderne, a fost în mare parte o chestiune de extindere a modelului de distorsiune și de a avea câțiva parametri de reglat. În trecut, era într-adevăr o chestiune de reglare fină când fabricați. Nu a fost făcut pentru nimic, în afară de fotografia aeriană, unde vrei ca geometria să fie absolut dreaptă. Și ar avea ajustări fine. Și dacă ai modificat pe oricare dintre ele, garanția ta era moartă. Așa că, firește, au depus mult efort pentru a pune la punct. Și în unele cazuri, soluția nu a fost de fapt ajustarea înclinării planului imaginii, ci introducerea unei pane de prismă, un unghi foarte mic care ar compensa acest lucru. Și ai măsura cât de multă înclinare există în planul imaginii, apoi ai merge la depozit și ai alege elementul de compensare care ar scăpa de acea componentă. BINE. Așa că Tsai a venit cu această schemă. Și implică, după cum vă puteți imagina, un obiect de calibrare. Și obiectul de calibrare ar putea fi orice despre care cunoașteți coordonatele foarte precis. Și va trebui să facem o distincție între obiectele de calibrare plană, care, evident, sunt mai ușor de făcut și de păstrat în magazie, și să facem foarte precis folosind metode de reproducere litografică , sau obiecte de calibrare tridimensională, cum ar fi cărămida dreptunghiulară despre care am vorbit, care sunt mai greu de realizat, mai greu de întreținut cu precizie. Și apoi, pe de altă parte, au câteva avantaje în ceea ce privește calibrarea. Deci există o tensiune acolo. Așa că obținem corespondențe, de data aceasta între punctele imaginii și punctele cunoscute de pe acest obiect tridimensional. Acum, ceea ce face să nu fie chiar atât de ușor ca atunci când vorbeam despre metoda punctului de fuga este că este puțin probabil să reușim să stabilim, obținând o bandă de măsură, care este relația dintre obiectul de calibrare și cameră. Deci stau pe podea. Îi facem o poză, punem camera pe un trepied. Și putem ieși și putem măsura cât de departe este primul punct pe acel obiect. Dar atunci, cum se rotește în spațiu? Și pur și simplu nu este practic, mai ales că nu știi de fapt unde este centrul de proiecție , acel punct nodal frontal despre care am vorbit când vorbim despre proiecția imaginii. Și asta înseamnă că trebuie să adăugăm o orientare exterioară. Deci, în loc să găsim doar orientarea interioară a camerei, așa cum am făcut atunci când am folosit punctele de fuga, acum vom rezolva problema de a afla unde se află obiectul de calibrare în spațiu și cum este rotit, precum și găsirea camerei. parametrii. Și asta produce rezultate mult mai precise, pentru că nu există erori de măsurare externe , sau erori pentru că nu știm, în această lentilă complicată cu multe elemente, exact unde este punctul nodal frontal. Nu este ca și cum ar fi un mic semn pe lateral. Pentru că nu poate fi un semn pe lateral. Este chiar în interiorul lentilei. Deci cum l-ai desemna? BINE. Deci, să vedem. Deci asta face totul mai complicat, nu? Pentru că orientarea interioară are trei grade de libertate, dacă ignorăm pentru moment distorsiunea. Și ce zici de orientarea exterioară? Ei bine, asta e translație și rotație. Poziția de translație și rotație, obiectul de calibrare. Deci sunt șase grade de libertate. Așa că am luat ceva care este destul de simplu, are trei necunoscute. Și l-am transformat în ceva care are nouă. Dar de fapt face problema mai simplă și produce rezultate mult mai precise. BINE. Deci, în orientarea interioară, avem vechea ecuație de predicție prospectivă. BINE. Deci xc, yc, zc sunt în coordonatele camerei. Deci, dacă știm un punct din sistemul de coordonate al camerei, putem calcula poziția imaginii. Și x0, y0, f-- asta e orientarea interioară. Dreapta? Este punctul principal și distanța principală. BINE. Acum, strategia aici va fi aceea că vom încerca să eliminăm niște parametri care nu ne plac și cu care sunt greu de gestionat , cum ar fi distorsiunea radială. Deci vom încerca să găsim o metodă care, imediat, modifică măsurătorile în așa fel încât rezultatele să nu depindă de distorsiunea radială și apoi vom obține o soluție în formă închisă pentru unii dintre parametrii din toți acești parametri. , iar apoi, în cele din urmă, când nu mai putem găsi soluții în formă închisă, recurgem la scrierea numerelor. Și de ce ne deranjam măcar cu asta? Ei bine, pentru că metodele numerice minimizează o cantitate care are minime multiple. Și îl vrem pe cel adevărat. Nu vrem să rămânem blocați în minimul local greșit. Și deci avem nevoie de o estimare inițială bună. Și așa obținem estimarea inițială bună. Deci, în acest proces, ni se permite să încălcăm multe dintre principiile pe care le-am stabilit, pentru că acesta nu va fi răspunsul. Aceasta este prima noastră presupunere pentru soluția iterativă de calcul numeric . Și așa, de exemplu, am spus că ar trebui să minimizăm eroarea în poziția imaginii. Dar asta e foarte greu de făcut direct. Deci vom minimiza o altă zonă care este legată de eroarea de poziție a imaginii. Și asta e în regulă, pentru că nu ne vom opri aici. Aceasta este doar pentru a obține starea inițială. BINE. Deci xIyI-- ar putea fi doar rândul și coloana din senzorul de imagine. Sau ar putea fi la milimetri de un punct de referință. Dar este foarte convenabil să folosești doar numerele rândurilor și coloanelor. Și apoi pentru f, ei bine, f ar putea fi în milimetri. Dar ar putea fi și în pixeli. Să presupunem că pixelii noștri sunt pătrați. Și folosim doar numărul rândului și al coloanei ca coordonate pentru poziția imaginii. Atunci este foarte convenabil să exprimați f în dimensiunea pixelilor. Are 1.000 de pixeli. De ce? Ei bine, pentru că atunci când aplicăm ecuația de proiecție a perspectivei , atunci unitățile de deasupra și dedesubt se potrivesc. Și astfel putem folosi orice unități dorim -- milimetri sau pixeli. Deci bine. Acum, deci există trei parametri aici. Și apoi, adăugăm la acel exterior. Și asta, desigur, este rotația și translația. Și așa avem un vector pentru cameră, care va fi o versiune rotită a vectorului pentru scenă plus o traducere. Deci, aceasta este din nou, camera. Și, desigur, acesta este xc, yc, zc despre care am vorbit aici. Și aceasta este scena, sau obiectul, sau coordonatele lumii, sau orice vrei să numești. Nu este cu adevărat un sistem de coordonate mondial. Este un sistem de coordonate în obiectul de calibrare. Deci cunoaștem obiectul de calibrare foarte precis. Și îi cunoaștem coordonatele în raport cu un sistem care este încorporat în acel obiect, cum ar fi poate colțul acelui cub sau cărămidă dreptunghiulară. BINE. Acum, așa cum am spus, vom ignora instinctele noastre mai bune. Și pentru început, vom folosi aici matrice de rotație. 2, 3r, 2 xsyszs. OK, deci aceasta, desigur, este o coordonată în obiectul de colaborare în propriul său sistem de coordonate. Și apoi, o vom roti. Și apoi, mutăm obiectul cu această distanță. Și, desigur, acesta este necunoscutul. Acest lucru este necunoscut. Și asta este necunoscut. Și așa cum am menționat mai devreme, folosim ecuațiile într-un mod ciudat. Pentru că, în mod normal, ați folosi aceste ecuații pentru a lua o poziție în obiectul de calibrare și a-l transforma într-o poziție în obiectul camerei. Acesta este scopul lor în viață. Dar dăm asta peste cap. Acestea sunt lucrurile pe care le știm. Și nu știm ce este această matrice. Și nu știm care este acel vector. Și deci acestea sunt lucrurile pe care le vom încerca și să le recuperăm. BINE. Deci acum, combinăm orientarea interioară și orientarea exterioară. Și ceea ce obținem este... și o ecuație similară pentru y. r21 xs plus r22 ys plus-- și apoi, partea de jos este exact aceeași cu cea de sus. BINE. Și din nou, scris în acest fel, practic ne permite să mapăm de la coordonatele din obiectele de calibrare la coordonatele imaginii. Dar vrem să-l folosim pentru a recupera cât mai multe dintre aceste lucruri . BINE. Acum, am menționat că ar fi convenabil să scăpăm de problemele distorsiunii radiale și să reglam lucrurile chiar la sfârșit pentru a obține acești coeficienți. Și, de asemenea, se dovedește a fi dificil să obții f la început și tz. Deci f apare aici. Acum, o modalitate prin care ne putem ocupa de asta este să privim doar direcția din imagine. Deci, cred că a dispărut acolo sus. Dar dacă lucrăm în coordonate polare, distorsiunea radială schimbă doar lungimea. Nu schimba unghiul. În mod similar, dacă schimb distanța principală f, tot ceea ce se întâmplă este ca imaginea să fie mărită cu f. Și așa se mișcă radial. Și același lucru se întâmplă dacă schimb distanța z la obiect. Tot ce se întâmplă sunt schimbările de mărire. Și din nou, ne mișcăm de-a lungul razei. Deci ideea este să facem ceva pentru a face față acestui unghi și să uităm distanța radială din acest sistem de coordonate polare. Și așa, de exemplu, putem face asta. Putem împărți aceste două ecuații, nu? Pentru că acum, am scăpat de f. Avem o nouă ecuație care nu implică f. Și să vedem. xs plus-- și am scăpat și de tz. 23 zs plus ty. Dreapta? Deci tz apare aici și acolo. Și cei doi termeni se anulează. Și așa am rămas cu tx și ty. Deci am combinat două ecuații, două constrângeri. Primim unul nou, care conține mai puține necunoscute. Deci va fi mai ușor de găsit. Deci acum, înmulțim încrucișat. Și adunăm termeni. Și obținem xs yi prim r11. Și adun termeni în așa fel încât să fie clar care sunt necunoscutele. Și, desigur, în cazul nostru aici, necunoscutele sunt componentele lui r, și tx și ty. xs-- asta va fi-- ei bine, acestea două sunt egale. Și dacă aduc asta pe cealaltă parte, primesc acest minus care este egal cu 0. Deci există o ecuație. Și să ne uităm la acea ecuație pentru a vedea ce este acolo. Deci, în primul rând, xs și ys și zs -- asta este coordonatele și obiectul de calibrare. Le știm noi. Apoi, avem xi prim și yi prim. Acestea sunt coordonatele imaginii. Și le-am măsurat. Deci lucrurile din paranteze sunt cunoscute. OK, doar o secundă. Și ceea ce este necunoscut sunt r11, r12, etc., etc. Deci aceasta este o ecuație liniară în acele necunoscute. Oh bine. Ele sunt aceste lucruri. Deci, lasă-mă doar... da. Mulțumesc că ai subliniat asta. Deci, pentru a face acest lucru, trebuie să știm unde este punctul principal, astfel încât să îl putem scădea. Și, desigur, nu știm de fapt unde este. Dar în acest scop, avem nevoie doar de o aproximare. Și astfel putem lua centrul senzorului de imagine. Dacă nu știm mai bine, putem lua jumătate din numărul de rânduri și jumătate din numărul de coloane și să le punem acolo. Acum, asta va fi o problemă dacă avem de-a face cu puncte de imagine care sunt chiar aproape de ea, pentru că direcțiile către acele puncte vor fi afectate foarte mult de orice eroare mică în presupunerea noastră despre care este punctul principal. Deci ceea ce facem este... și ceea ce Tsai nu menționează este că aruncăm toate corespondențele care sunt aproape de centrul presupus al imaginii, nu? Pentru că dacă avem de-a face cu direcția unei raze aici și acest centru este greșit într-o mică măsură, asta nu va avea un efect mare asupra direcției. Dar dacă avem de-a face cu un punct aici și mișcăm centrul, asta va avea un efect mare asupra unghiului său. Așa că înșelăm spunând, oh, avem o ghicire la ce sunt x0 și y0-- punctul principal, pe care de fapt încercăm să-l determinăm. Dar e în regulă, pentru că este doar o aproximare. Și nu folosim datele acolo unde contează, unde acel efect ar fi cel mai grav. Deci bine. Așa că scădem -- facem referință la centrul imaginii despre care presupunem că este aproape de x0 și y0. Și apoi, obținem această ecuație liniară, necunoscutele. Și obținem una dintre aceste ecuații pentru fiecare corespondență, nu? Deci, de fiecare dată când spunem, oh, acest punct din imagine este acel punct de pe obiectul de calibrare, putem nota una dintre aceste ecuații. Și, desigur, xs și yI se vor schimba pe măsură ce mergem. BINE. Acum, este o ecuație liniară. Și de câte avem nevoie? Bineînțeles, cu una singură, nu putem rezolva, pentru că avem o grămadă de necunoscute. Deci trebuie să numărăm câte necunoscute avem. BINE. Așa că acum, am scăpat de niște chestii. Deci ce a mai ramas? Deci, ceea ce a mai rămas este... așa că acelea apar acolo, la fel ca și acestea. Și apare tx și ty. Deci ce nu apare? Ei bine, din toate necunoscutele pe care încercăm să le rezolvăm, acestea sunt cele care apar în ecuație. Sunt opt. Asta pare să aibă sens. Opt dintre acestea. Și apoi, mai sunt o grămadă pe care noi nu le facem. Acum, rețineți că nu impunem ortonormalitatea matricei, nu? Pentru că ne prefacem că sunt nouă numere fără legătură , nu trei grade de libertate de rotație. Deci, există într-adevăr șase numere aici, când știm că rotația are doar trei grade de libertate. Acum, în ceea ce privește celelalte trei de aici, dacă le vom obține vreodată pe acestea șase, ar trebui să-l putem obține pe acesta prin produs încrucișat, pentru că știm că rândurile matricei de rotație sunt ortogonale. Și deci, dacă găsiți un vector care este ortogonal cu rândul 1 și rândul 2, atunci va fi paralel cu rândul 3, nu? Și astfel, produsul încrucișat sau primele două rânduri ne oferă ceva care este paralel cu al treilea rând. Așa că îl putem recupera pe acesta ulterior. Dar acum, nici măcar nu impunem că acesta ar trebui să fie un vector unitar. Acesta ar trebui să fie un vector unitar. Și acești doi vectori ar trebui să fie ortogonali. Vom merge doar cu asta. OK, cele opt necunoscute... deci asta sugerează că sunt necesare opt ecuații, opt corespondențe. Dar nu este chiar adevărat, deoarece această ecuație este omogenă. Rezultatul este egal cu 0. Și toți învățăm cum să facem o ecuație liniară. Nu știu despre educația ta, dar de obicei, nu se pune prea mult accent pe ecuațiile omogene. Și apar destul de mult în viziunea artificială. Așa că este important să știi ce să faci cu ei. Deci, o caracteristică a unei ecuații omogene este că combinația liniară a unor variabile este egală cu 0. Dacă dublez toate variabilele, tot va fi egală cu 0. Deci, există o problemă cu factorul de scară pe care nu pot, din ecuația omogenă, să îmi dau seama ce factorul de scară este. Și ei bine, atunci o metodă de soluție este, luați una dintre necunoscute. Și setați-l la orice doriți. Deci, de exemplu, aici am putea spune că ty este egal cu 1, nu? De ce? Ei bine, pentru că oricare ar fi soluția, o pot scala astfel încât ty să fie egal cu 1. Și invers, dacă obțin o soluție cu ty egal cu 1, atunci am un multiplu al soluției adevărate. Și ecuația nu- mi spune ce multiplu. Nu pot să înțeleg asta din ecuația respectivă. Deci aceasta este o modalitate de a proceda. BINE. Deci, atunci se reduce la ecuații liniare în șapte necunoscute, nu? Pentru că am reparat unul dintre ele. Și asta înseamnă că am nevoie de șapte corespondențe. Deci obiectul dvs. de calibrare ar trebui să aibă șapte puncte care să fie ușor de identificat, de preferință din orice punct de vedere. Și asta înseamnă că probabil că aveți nevoie de mai mult de șapte, deoarece unele dintre ele vor fi ascunse. Deci, să vedem. Deci, dacă aveți un cub, de obicei ascundeți dintr-o poziție generală una dintre cele opt laturi. Ai rămâne cu șapte. Oh, e un meci frumos. Deci un cub nu este un obiect de calibrare prost. BINE. Deci, din aceasta, obținem un multiplu din soluția adevărată. Obținem r11 prim, r12 prim și așa mai departe. Deci această metodă de rezolvare a ecuațiilor omogene ne va da asta. A, deci, apropo, dacă avem exact șapte corespondențe, vom ajunge cu șapte ecuații liniare și șapte necunoscute. Și știm cum să le rezolvăm folosind... Nu știu... Eliminarea Gaussiană, sau MATLAB, sau orice doriți. Ce se întâmplă dacă avem mai mult de șapte corespondențe? În primul rând, este de dorit. Cu cât aveți mai multe corespondențe , cu atât soluția dvs. este mai strictă, cu atât eroarea este mai mică. Și cu șapte corespondențe, vei obține o potrivire perfectă. Înseamnă că nu ai nicio eroare? Nu. Dar dacă luați mai multe corespondențe, puteți estima eroarea. Deci nu numai că primești un răspuns mai bun, ci și o estimare a ceea ce este în neregulă cu el. Deci, de obicei, ați folosi mai mult de șapte. Și asta înseamnă că sistemul tău de ecuații liniare este supradeterminat. Și apoi, folosiți cele mai mici pătrate, pseudo-invers, chestii standard pentru a găsi cea mai bună soluție. BINE. Dar dacă este șapte sau mai mult, acum avem asta. Și trebuie să ne dăm seama care este soluția reală. Ei bine, știm că aceștia ar trebui să fie vectori unitari. Deci putem calcula un factor de scară. Deci putem calcula un factor de scară pentru a face ca aceștia să fie vectori unitari. Și dacă cei doi nu sunt de acord? Ei bine, ăsta e o verificare bună. Dacă faceți acest lucru și descoperiți că acești doi factori de scară nu sunt aproximativ la fel, atunci este ceva grav în neregulă. De exemplu, ați identificat greșit corespondențele. Ai crezut că acesta este punctul de pe colțul cubului din stânga, dar nu a fost. Apoi, acestea vor ieși diferite, de obicei. În practică, ele nu vor fi niciodată exact la fel. Deci poți lua media, dacă vrei. Și așa că acum, putem scala acest vector pentru a-l transforma în acesta. BINE. Deci ceea ce am făcut acum este că avem o primă estimare a tuturor, cu excepția f și tz și a distorsiunii radiale. Și aceasta a fost o formă închisă. Dacă facem pseudo-invers, aceasta este o soluție în formă închisă. BINE. Deci următorul pas va fi găsirea f și tz. Dar cât timp suntem aici, încercăm să facem acești vectori unitari așa cum ar trebui să facă. Dar nu am impus cu adevărat că sunt ortogonale. Deci asta va fi o altă verificare. Deci, puteți lua r11 prim, r21 prim și cetera, r22 prim. Deci, acesta ar trebui să fie egal cu 0. Și din nou, dacă nu este, atunci aceasta este o problemă potențială. În practică, nu va fi niciodată exact 0. Dar dacă este mare, atunci asta înseamnă, din nou, ceva a mers prost în calculul tău. Dar vom avea nevoie de matricea de rotație completă într-un moment. Și asta înseamnă că vom lua primele două rânduri și vom lua produsul lor încrucișat. Dar dacă acestea nu sunt ortogonale, atunci vom obține un fel de matrice dezordonată care nu este ortonormală și așa mai departe. Deci la pătrat - deci avem doi vectori. Și sunt aproximativ ortogonale. Cum obținem o pereche de vectori care este ortogonală și care este cât mai aproape posibil de cei doi vectori pe care îi începem - deci care este cel mai apropiat set de vectori ortogonali? Așa că hai să o aruncăm așa. Iată doi vectori, primele două rânduri ale matricei de rotație. Și nu sunt chiar ortogonale. Și acum, vrem să facem o mică ajustare, astfel încât să obținem vectori noi care sunt ortogonali. Și apoi, luăm produsul lor încrucișat. Și avem matricea completă de rotație. Apropo, cerul ferește să ajungem cu o matrice de reflexie. Este ceva pentru care vrem să ne îngrijorăm. Acum, dacă noi suntem cei care luăm produsul încrucișat, ne putem asigura că este o rotație, nu o reflexie. BINE. Ei bine, se dovedește - și acestea sunt cele mai mici pătrate plictisitoare - că cea mai mică ajustare este următoarea. Adică, reglarea în a este în direcția b. Iar reglarea în b este în direcția a. Și acum, cât de mare este k? Asta e singura întrebare rămasă. În regulă. Vrem ca noii vectori să fie ortogonali. Și deci există ecuația. Și trebuie să rezolvăm pentru k. Deci obțineți un punct b plus un punct a plus b punctul b în k plus k pătrat într- un punct b este egal cu 0. Deci există un pătratic pentru k. Rezolvați pentru k și repetați. Ei bine, dacă obținem exact valoarea corectă a lui k, nu trebuie să repetăm. Dar vom vedea într-o secundă, asta de fapt nu se va întâmpla. De ce? Ei bine, uită-te la acest pătratic. Primul termen și ultimul termen sunt 0 la soluție, nu? Vrem să fie ortogonale. Și atât de aproape de soluție, acești doi termeni vor fi foarte mici. Și deci aceasta va fi o ecuație pătratică urâtă, instabilă numeric. Nu suntem obișnuiți cu asta. Suntem obișnuiți să vedem că ecuații mai complicate sunt urâte. Dar acesta este un caz în care pătratica eșuează de fapt. Și astfel, în loc să rezolvăm pătratica, facem asta. De unde vine asta? Ei bine, să presupunem că k este deja foarte mic. Atunci, k pătrat ori un punct b este chiar mai mic. Deci uita asta. Și apoi, rezolvați restul pentru k. Și dacă aveți nevoie de o soluție, acești doi vor fi vectori unitari -- un punct a plus b punctul b este 2. Și astfel obțineți minus un punct b peste 2. Și de aceea am spus iterați, pentru că mai degrabă decât să încercați rezolvați acea pătratică foarte precis, rezolvați acea ecuație simplă și repetați-o de câteva ori. Deci, în loc să folosim formula standard pentru soluțiile unui pătratic, folosim această aproximare. S-a trezit cineva acolo? [Chicote] Aceasta este formula ta standard pentru soluțiile care sunt pătratice? OK, probabil că nu. Dar credeți sau nu, aceasta este o formulă pentru soluțiile unui pătratic. Și este trist că nu știm asta. Deci care este celălalt? Ei bine, minus b plus sau minus... nu? Deci acesta este cel pe care l-am predat cu toții. Se pare că aceasta este și o formulă. Și modul în care puteți verifica este că, dacă aveți cele două rădăcini, produsul x1 x2 ar trebui să fie c peste a. x1 plus x2 este b minus b peste a. Deci, puteți verifica cu ușurință dacă ambele formule sunt corecte verificând produsul rădăcinilor și suma rădăcinilor. Deci de ce aduc asta în discuție? Ei bine, în această formulă de aici, în funcție de plus sau minus pe care îl utilizați, este posibil să scădeți cantități aproape de aceeași dimensiune. Și știm că, deoarece computerele nu pot reprezenta exact numere reale, va exista o pierdere de precizie. Deci, dacă aveți 2,111111 și scadeți 2,111 cu un 2 undeva, obțineți un număr foarte mic. Și știi că nu prea poți avea încredere în acel număr, pentru că are doar o precizie limitată. Deci, de fiecare dată, în cazul soluțiilor reale, unul dintre cele două răspunsuri pe care le primești este destul de slab, nu? Pentru că într-unul din cele două cazuri, acestea două au semne opuse. Și de fiecare dată când scazi două numere în virgulă mobilă, pierzi precizia. Trucul este că semnele de aici sunt opuse celor de aici. Deci primești una dintre soluțiile tale din aceasta în care semnele se potrivesc. Și apoi, îl primești pe celălalt... Cred că ar fi trebuit să- l scriu așa. Și veți obține cealaltă soluție de la aceasta. Și așa obțineți soluții precise pentru pătratice. Atât de mică notă secundară acolo. Deci am fi putut folosi asta pentru a obține un răspuns bun pentru k. Dar o metodă foarte simplă este doar acea iterație. Și puteți vedea că k va tinde în cele din urmă spre 0. Și apoi, când sunteți mulțumit că este suficient de mic pentru precizia numerică pe computer, vă puteți opri. BINE. Deci asta a fost modificarea componentelor matricei de rotație. Deci, acum, avem un înlocuitor pentru r11 - primul rând și al doilea rând - care sunt de fapt ortogonale. Și apoi, putem obține al treilea rând prin înmulțire încrucișată. Și avem o matrice de rotație completă. Amintiți-vă, totuși, că acesta nu este răspunsul final. Pentru că nu ne-am respectat regulile despre cum să facem acest lucru, cum să obținem rezultate precise. BINE. Acesta este un moment bun pentru a vorbi despre cazul țintă plană. Deci, țintele plane sunt foarte atractive din punct de vedere al faptului că sunt ușor de realizat, ușor de depozitat și au o precizie ridicată. Și așa, de exemplu, dacă ați avut roțile aliniate recent, este posibil să fi fost într-un loc care folosește viziunea artificială pentru alinierea roților. Și ceea ce fac ei este, montează o țintă de calibrare pe volan și apoi rotesc volanul sau rotesc volanul pentru a măsura două axe diferite. Și cum arată acea țintă? Ei bine, are un model pe el care are o caracteristică că este foarte posibil să obțineți o poziție incredibil de precisă a colțurilor modelului la 1/100 de pixel, chiar mai bine decât cu metodele noastre de găsire a marginilor. Si cum se monteaza? Este planar. Este montat pe partea laterală a roții în unghi. Dar este planar. Și de ce folosesc planar? Ei bine, pentru că este posibil să fabricați ieftin modele plane incredibil de precise. Dar există un dezavantaj. Și deci hai să vorbim despre asta. Deci, iată ținta noastră plană. Și cred că numim acest sistem de coordonate s. Și putem construi un sistem de coordonate acolo. Este logic să o construiți în acest fel, unde x și y sunt în planul țintei și toate coordonatele sunt cunoscute în xs și ys, iar zs este 0. Aceasta este direcția perpendiculară pe țintă. Ei bine , atunci putem urma aceeași metodologie acolo sus. Cu excepția acum, există anumiți termeni care nu mai contează, cum ar fi r13. Se înmulțește cu zs. R23, r33-- niciunul dintre acestea nu mai apare. BINE. Deci, obținem această ecuație , deoarece acel termen din zs dispare. Atât de mare lucru. Și acum, înmulțim încrucișat. Și în loc să obținem ecuația acolo sus, obținem ecuația puțin mai simplă. BINE. Și din nou, același lucru. Lucrurile din paranteze sunt măsurători, lucruri pe care le știm. Apoi, r11, r12 și cetera sunt lucruri - sunt necunoscutele pe care le căutăm. Dar acum, sunt mai puțini. Deci acum, dacă enumerăm necunoscutele, sunt șase în loc de opt. Și deoarece acestea sunt din nou ecuații omogene, le transformăm în ecuații neomogene setând unul dintre parametrii egal cu 1. Și apoi, avem cinci ecuații și cinci necunoscute. Deci, o caracteristică excelentă a acestei abordări este că avem nevoie de doar cinci corespondențe acum, în loc de șapte. Și din nou, de obicei, am folosi mai mult și am folosi cele mai mici pătrate pentru a obține o soluție mai precisă. Apropo, ce se întâmplă dacă, doar întâmplător, ty în lumea reală este de fapt 0, că nu există nicio traducere în direcția y? Ei bine , această metodă va avea o problemă. Înseamnă că toți ceilalți parametri ai tăi vor fi uriași și probabil inexacți. Deci asta este ceva legat de această abordare a rezolvării unei ecuații omogene. Ce faci atunci? Ei bine, setați tx egal cu 1. Așa că îl prezint astfel. Dar, de fapt, pentru a obține o soluție bună din punct de vedere numeric, ați dori să verificați rezultatul. Și dacă este cazul că ty este de fapt foarte aproape de 0, atunci treceți la celălalt. Și așa că nu am făcut un punct din asta înainte. Dar OK. Cu mult înainte, am recuperat matricea de rotație completă doar prin pătrarea a doi dintre vectori și apoi luând un produs încrucișat. Și aici, hmm. Acum, avem doar partea de sus 2 cu 2 a matricei de rotație. Și deci nu voi scrie soluția, pentru că asta ar trebui să faci în problema temelor. Deci bine. Deci, să presupunem că putem face acest lucru fie pentru planare, fie neplanare. Dar puteți vedea clar cum este diferit acest lucru pentru cazul planar . Acum, mai este o subtilitate cu care nu m-am deranjat, pentru că nu mai este cu adevărat relevantă astăzi. Dar pe vremuri, nu erai foarte sigur de relația dintre raportul de aspect al pasului în direcția x și pasul în direcția y. Pentru că au fost produse de efecte foarte diferite. Deci una dintre ele a fost doar replici. Și acest lucru este valabil chiar și pentru senzorii CCD și CMOS , care erau pixeli -- erau senzori, senzori discreti. Dar modul în care erau citite era de obicei într-o formă analogică. Deci ai scos semnalul discret din rândul tău de senzori, l-ai transformat într-o formă analogică. Și apoi, un bot din computer l-a tocat și l-a digitizat, dar nu legat în niciun fel de dimensiunea pasului de pixel din rând, nu? Dispozitivul de prindere a cadrelor avea propriul ceas. Și astfel, ca rezultat, distanța pe orizontală și distanța pe verticală au fost controlate de lucruri diferite. Distanța pe verticală a fost... Am diferite rânduri în senzorul meu. Știu exact ce este asta. Și pe orizontală, a fost, ei bine, care este relația dintre ceasul din prinderea cadrului și ceasul din cameră? Și așa am avut nevoie de un alt parametru care să scala x în raport cu y. Și se dovedește că nu ai putut găsi acel parametru cu o țintă plană. Și face un pic de mizerie algebrei. Așa că nu am vrut să merg acolo pentru că astăzi, bineînțeles, te uiți la fișa de specificații a producătorului. Și știți exact care este raportul de aspect al pasului în direcția x și y. Dar din nou, scoate în evidență faptul că ținta plană este diferită. BINE. Ce mai rămâne de făcut? Ei bine, nu știm f. Și nu știm tz. Și nici alte lucruri nu facem. Dar să ne concentrăm pe asta. Cum le găsim? Ei bine, folosim aceleași ecuații. Și nu le voi scrie din nou, ci doar le înmulțesc. Deci aceasta este doar o ecuație de proiecție în perspectivă, în care combinăm orientarea interioară cu cea exterioară. Și puteți vedea că acum avem nevoie de matricea completă de rotație. Și ar fi bine dacă ar fi cu adevărat ortonormal. Și din nou, termenii din paranteze sunt cei pe care îi cunoaștem în acest moment. Și astfel necunoscutele, desigur, sunt f și tz. Deci aceasta este o problemă mai simplă decât cea pe care am avut-o înainte. Deci chestiile astea... toate acestea, le putem calcula, nu? Pentru că avem măsurătorile imaginii. Și în acest moment, avem tx și ty și componentele metricii de rotație. Deci putem calcula toate acestea. Putem calcula toate acestea. Și trebuie doar să rezolvăm pentru f. Și asta înseamnă că avem nevoie de o singură corespondență, nu? Pentru că dintr-o corespondență, obținem aceste două ecuații. Și căutăm două necunoscute. Așa că acum, desigur, în practică, nu am face niciodată asta. Am folosi toate corespondențele pe care ne putem pune mâna și am face cele mai mici pătrate. Dar numărul minim este 1. OK. Deci asta ne dă f și tz. Și există o mică problemă aici, totuși, și anume că am nevoie de variație de adâncime. Deci este foarte tentant să faci asta cu ținta ta de calibrare. Deci iată planul imaginii. Iată ținta dvs. de calibrare plană. Și aici este obiectivul. În regulă. Acesta pare un aranjament frumos. Și ce e în neregulă cu asta? Ei bine, știm că proiecția în perspectivă are în ea înmulțirea cu f și împărțirea cu z. Deci, dacă dublăm f și dublăm z, nu se întâmplă nimic. Aceasta este o ambiguitate a factorului de scară. Deci, asta înseamnă că, în acest caz, nu puteți descoperi f și tz separat. Puteți determina doar raportul. Și asta, desigur, este nesatisfăcător. Și deci ceea ce trebuie să faci este să ai variații în profunzime. Și există probleme legate de cât de mult și ce este mai bun și așa mai departe. Dar practic, nu va funcționa dacă este perpendicular pe axa optică. Și asta ar putea fi... nu știu... 45 de grade, 60 de grade, în funcție de ceea ce încerci să faci. Și dacă intri în locul în care îți fac alinierea roților, dacă folosesc viziunea artificială, vei vedea că atunci când montează ținta de calibrare pe roată, așa că au o cameră care privește în jos paralelă cu axa mașină-- și ei montează chestia asta pe partea laterală a roții, așa că trebuie să iasă afară. Dar, în loc să-l montezi perpendicular, astfel încât să obții cea mai bună vedere în cameră, acestea sunt montate la 45 de grade. Și de ce? Pentru că orientarea exterioară este ambiguă dacă nu faci asta. Puteți determina doar raportul dintre f peste tz. Nu puteți determina f și tz separat. BINE. Acum, aproape am terminat. Avem estimări ale majorității parametrilor. Deci ce lipsește? Ceea ce lipsește este punctul principal și distorsiunea radială. Deci, se pare că nimeni nu a venit cu o modalitate de soluție în formă închisă pentru punctul principal. Și așa că renunțăm în acest moment și spunem, bine, acum trebuie să facem optimizarea neliniară. Și ideea este că aici are o eroare între xI și xp. BINE. Deci, dacă avem toți acești parametri, putem calcula înainte de la o anumită poziție din lume la o anumită poziție din imagine. Și asta înseamnă, atunci, am spera că asta va fi chiar deasupra punctului de imagine pe care l-am măsurat de fapt. Deci obiectul de calibrare va avea o grămadă de puncte care sunt ușor de identificat. Și apoi, te uiți la punctul numărul 3. Și îl pompezi prin proiecția perspectivei de translație de rotație. Vă oferă o poziție prezisă în imagine. Și ai văzut-o în altă parte. Și asta este o eroare. Și acesta este lucrul pe care încerci să-l minimizezi. Și așa pot scrie așa. Asta as sper. Și, desigur, în ceea ce privește minimizarea celor mai mici pătrate, aș lua doar suma pătratelor acelor doi termeni. Și cum obțin xp și yp? Ei bine, aplic matricea de rotație la matricea de translație și informațiile de punct principal pe care le am, precum și distorsiunea radială. Deci acum, am ceva care depinde de r, t, x0, y0, f, k1, eventual k2, poate ceva mai mult. Deci am o grămadă de parametri. Și acum, am această problemă uriașă de minimizare. Și așa cum am menționat data trecută, există acest pachet minunat inventat cu eoni în urmă care face acest lucru. Și cum se numește? LMdiff. Și este în MINPACK în Fortran original, dacă doriți. Dar a fost tradus în multe alte limbi. Și, desigur, este încorporat în MATLAB și orice altceva. Așa că acum, tocmai am creat această problemă cu cele mai mici pătrate în care încercăm să ne apropiem cât mai mult posibil de a satisface o grămadă de ecuații de această formă, o pereche pentru fiecare corespondență. Și o facem modificând acești parametri. Ei bine, există această mică problemă aici. R este extrem de redundant. Are nouă numere și doar trei grade de libertate. Și așa am putea încerca să impunem constrângerea. Deci, acest pachet funcționează pentru minimizarea neconstrânsă. Și așa că impunerea R transpune R este egal cu I, iar determinantul lui R este egal cu 1 plus 1 - asta va fi greu. Deci, ce să faci în schimb? Ei bine, ceea ce a făcut Tsai au fost unghiurile lui Euler. Și ceea ce puteți face în schimb este vectorul Gibbs, care este... să vedem. Pălărie Omega... deci aceasta este o reprezentare neredundantă. Sunt doar trei numere. Asta e partea bună. Are singularități. Asta e partea proastă. Acesta este neredundant. Are trei numere. Partea proastă este că explodează dacă rotiți la 380 de grade. Acum, dacă știți că acest lucru nu se va întâmpla din cauza modului în care ați configurat obiectul de calibrare, atunci acesta este un mod perfect acceptabil de a proceda. Asta funcționează destul de bine. Celălalt este, desigur, să folosiți cuaternioni unitari, care nu au singularitate. Dreapta. Deci îl putem folosi pentru parametrizarea cuaternionilor. Din păcate, este redundant, nu? Pentru că există patru numere pentru trei grade de libertate. Dar ceea ce poți face este foarte simplu. Mai adaugi o ecuație. Deci va exista un termen de eroare care este proporțional cu diferența dintre mărimea acestui cuaternion și 1. Și puteți determina cât de puternic este aplicat. Și pe măsură ce ridici asta, primești soluția. Deci, aceasta este o implementare care funcționează foarte bine independent de condiții precum evitarea 180 de grade. Acum, Levenberg-Marquardt găsește extreme locale. Deci, dacă îl puneți în locul greșit în spațiul parametrilor, va fi perfect fericit să intru în alte minime locale. Și de aceea a trebuit să facem toate celelalte lucrări pentru a obține mai întâi o soluție aproximativă. Altfel, am fi putut scăpa de toate chestiile astea și am fi putut începe de acolo. Dar nu putem. O întrebare foarte importantă este sensibilitatea la zgomot, sau ceea ce noi numim câștig de zgomot. Și am făcut aluzie la asta în mai multe locuri, ca aici unde planul de calibrare, dacă este perpendicular pe axa optică, atunci câștigul de zgomot pe f și tz este uriaș -- infinit -- în timp ce raportul este perfect bine determinat. Dar este greu de spus ceva general din cauza acestei optimizări numerice și pentru că aceste metode de aici au fost aproximative. Nu au aplicat condițiile direct. Deci, cum remediați problema câștigului de zgomot? Ei bine, așa cum se întâmplă în multe cazuri în care tot ce aveți este o metodă numerică - și aici este locul în care avantajul unei metode analitice iese în prim-plan - dacă aveți doar o metodă numerică, puteți utiliza metode Monte Carlo. Deci cum faci asta? Ei bine, vă luați pozițiile măsurate ale imaginii. Și adăugați ceva zgomot de proprietăți statistice cunoscute. Adăugați ceva zgomot gaussian, zgomot cu o variație cunoscută sau o abatere standard. Și tu faci calculul. Și primești un alt răspuns. Și faci asta de multe ori. Și te uiți la proprietățile statistice ale răspunsului. Și te uiți la deviația sa standard. Și apoi, raportul este câștigul de zgomot, nu? Metodă foarte simplă. Odată ce ați scris codul pentru a rezolva această problemă, luați intrările și vă jucați cu ele și faceți asta de multe, de multe ori. Și de fiecare dată primești un răspuns. Și apoi, te uiți la distribuția răspunsului în spațiul parametrilor. Și astfel, poți face ceea ce ai face în mod normal dacă ai avea o soluție analitică. Și așa afli lucruri precum... că acest lucru nu funcționează. Dacă planul de calibrare este perpendicular pe axa optică, obțineți un câștig uriaș de zgomot într-o anumită direcție în spațiul parametrilor. Și aflați că coeficienții de ordin superior de distorsiune radială dincolo de k2 sunt foarte prost determinați, că sunt foarte sensibili la orice fel de măsurare a zgomotului. Deci probabil că nu merită să încerci să le obții. Oh. BINE. Deci, ce vom face în continuare după ce te întorci este să urcăm, din nou, un nivel. Așa că am început cu chestii adevărate de nivel scăzut. Apoi, am trecut la chestiile astea intermediare. Următorul lucru pe care îl vom face este să vorbim despre reprezentarea formei, recunoașterea și determinarea atitudinii în spațiu. Deci este paralel cu ceea ce am făcut în 2D. Când făceam tipare, am făcut recunoașterea și determinarea atitudinii în 2D. Acum, o vom face în 3D. Și avem toate instrumentele pentru asta, acum, să vorbim despre rotație în 3D. Așa că să aveți o vacanță bună.