[SCRÂTÂND] [FOȘTIT] [CLIC] BERTHOLD HORN: „Repede”, adică recunoașterea rapidă a modelului. Și asta se deosebește de un alt model pe care îl vom analiza mai târziu, care este mai lent, dar primește un răspuns mai precis. Deci acolo au fost definiți o serie de termeni . Una dintre ele a fost cea a unui model. Deci, există un pas de antrenament care produce un model. Și modelul constă din sonde. Și sondele sunt locuri în care vom colecta dovezi pentru un meci pentru a produce o funcție de punctaj. Și ne gândim la acel scor ca la o suprafață într-un spațiu multidimensional care are ca axe diferitele grade de libertate. Și căutăm un vârf în acea suprafață de scor care este peste un prag, ca o modalitate de a indica faptul că există o instanță a acelui model în imagine. Și poate fi mai mult de unul, și poate să nu existe niciunul. Și la cel mai înalt nivel, ne uităm la citat, „toate ipostaze”, adică le vom cuantifica, dar trebuie să luăm în considerare întreaga gamă de rotații, translații, scalare, orice ar fi. Și astfel complexitatea merge exponențial cu numărul de grade de libertate. Deci, chiar dacă cuantificăm destul de grosier, să zicem undeva între 10 și 100 de pași, asta înseamnă că înmulțim cantitatea de muncă cu 10 și 100, ceva de genul ăsta. Deci corelația normalizată era costisitoare și nu putea face față mai mult de două grade de libertate, traducere. Ei bine, această metodă se uită la foarte puține puncte din imagine. Și astfel își poate permite să facă față unui număr mare de grade de libertate. BINE. E o întrebare grozavă. Deci, la un nivel, ne construim. Așa că începem să ne uităm la probleme de nivel foarte scăzut și apoi ne construim pe deasupra. Apoi, de ce am ales aceste modele, ei bine, un motiv este că este un pachet de lucruri care sunt legate. Deci nu trebuie să reînvățăm terminologia și orice altceva. Deci, de exemplu, partea din față pentru acesta, după cum ați văzut, este modelul despre care am vorbit înainte. Iar următorul despre care vom vorbi este strâns legat de asta. Îl folosește pe acesta pentru a obține o primă ghicire a răspunsului. Și apoi cea de după aceea este o modalitate rapidă de a calcula un pas de care trebuie să facem subeșantionarea. Deci este o eșantionare aleatorie? Ei bine, cam pentru că viziunea artificială a crescut exponențial. Și a fost o perioadă în care nu era suficient material pentru a umple un întreg termen. Așa că am predat acest curs, pe care l-am numit „Fă ca mașinile să vadă și să simtă”, pentru că jumătate din el era viziune, iar jumătate era manipularea robotică. Și nu mai putem face asta. Acum avem mai multe cursuri despre viziunea artificială. Deci, aceasta este o abordare specială a viziunii artificiale, la care unii oameni o numesc abordarea bazată pe fizică a viziunii artificiale. Apropo, m-au făcut să mă schimb... șeful departamentului m-a contactat și mi- a spus că nu pot avea un titlu frivol precum „Fă ca mașinile să vadă și să simtă”. Și de aceea acum se numește „Machine Vision”. Așadar, modelele pe care le analizăm stau împreună, ceea ce face mai ușor să le discutăm. Modelele lor de cea mai de succes companie de viziune artificială . Deci este ceva greutate acolo. Este ceea ce fac ei azi? Ei bine, multe dintre mașinile pe care le vând fac asta. Alții fac alte lucruri, pe care încă nu le aflăm, pentru că nu le cunoaștem secretele comerciale. Și lucrurile despre care vorbim în discuția despre model sunt în principal 2D. Deci, este limitat la situațiile în care avem de-a face cu suprafețe bidimensionale, cum ar fi circuite integrate, plăci de circuite imprimate, benzi transportoare, pământ din afara unei mașini autonome, lucruri de această natură. Deci, după aceasta, vom trece la un nivel mai înalt. Deci face parte dintr-o progresie. Și da, nu acoperim tot ce este posibil. Și așa că încercăm să acopere lucrurile care îți dau un sentiment pentru ceea ce este acolo, mai degrabă decât să încercăm să acoperim totul. Deci în asta... înapoi la asta. Deci, există un pas de antrenament în care îi arătăm o imagine și calculează automat acest model. Și asta a fost foarte important pentru ei, pentru că putem trimite pe cineva la MIT și să obținem o diplomă și să facem manual un cod pentru a face ceva. Dar asta merită doar dacă aveți o aplicație uriașă pentru asta. Am uitat care a fost exemplul-- creioane sau ceva, căști-- periuță de dinți, îmi pare rău. A fost cineva care a fost întrebat despre sprijinirea startup-urilor, iar testul lui a fost periuța de dinți. Deci, dacă poate vinde un miliard dintre ele, atunci poate îl va finanța. Dar dacă pentru fiecare sarcină vizuală trebuie să depui acel efort pentru a o programa, nu este bine. Deci metoda de antrenament este foarte bună, pentru că cineva cu puțină experiență poate arăta sistemului obiectul, sperăm o mostră bună din acesta, și poate obține o imagine de antrenament. Există câteva rafinamente pe care le puteți face. După cum am discutat, de exemplu, puteți avea ponderi negative. Dar acestea sunt lucruri pe care o persoană trebuie să-- nu se poate gândi încă la un mod automat de a face asta. Și deci este ceva ce nu s-a făcut niciodată, pentru că este mult mai ușor să mergi cu asta dacă este satisfăcător. Deci ce facem cu acest model? Ei bine, atunci mapăm modelul pe imaginea în timp real. Și în acest proces, folosim poziția, care este translația, rotația și toate celelalte lucruri. Deci modelul nostru acum este mapat deasupra imaginii. Și apoi, la fiecare dintre pozițiile sondei, ne uităm la gradientul de luminozitate. Deci, de fapt, preprocesăm... nu ne întoarcem cu adevărat la imagine. Trecem la gradientul de luminozitate. Și efectuăm un test pentru a colecta dovezi, pentru a colecta dovezi, că acest obiect este de fapt acolo. Și dovezile sunt cumulative. Așa că doar o adunăm. Și asta este ideea de a face o mulțime de operațiuni locale, în care rezultatul final este doar suma acestora, un pic ca procesarea imaginilor binare - metode de procesare a imaginilor binare pe care le-am menționat. BINE. Și apoi facem asta pentru citat, „toate ipostaze”, ceea ce înseamnă că trebuie să cuantificăm spațiul de poziție. Și de aici vine limitarea acestei metode , și anume că vom fi limitați în precizie de cuantizarea spațiului de poziție pe care îl avem. Deci, care sunt toate aceste componente ale ipostazei? Ei bine, evident traducere. Și când ne uitam la model, era o pagină întreagă. Dar au fost redundante prin faptul că aveam unul de scalare care funcționa pe o scară logaritmică și unul care funcționa pe scară liniară și așa mai departe. Dar să le enumerăm pe cele care nu sunt redundante. Deci va fi translație, rotație. Și din nou, în funcție de aplicație, nu toate acestea pot fi necesare. Apoi este scalarea. Acum, scalarea poate să nu fie necesară, pentru că poate toate obiectele tale au aceeași dimensiune și poate că nu ai de-a face cu schimbarea dimensiunii din cauza schimbării distanței, pentru că folosești o lentilă telecentrică, așa că nu va exista o schimbare de dimensiune. Dar permitem asta. Apoi, există declinare, unde, dacă doriți, în loc să rotim ambele axe x și y cu același unghi, rotim una cu un unghi diferit. Și din nou, acest lucru se poate aplica sau nu într-o anumită situație. Și apoi avem raportul de aspect. Deci, într-un fel, acest lucru permite un anumit grad de generalizare. Deci ai un model. Dar dacă doriți, puteți face față și aceluiași model într-o dimensiune diferită, același model care a fost strivit într-o direcție și poate extins în cealaltă direcție. Deci translație, două grade de libertate, rotație unul în 2D, scalare unul, oblic unul, raport de aspect unu, deci un total de șase parametri independenți. Și astfel avem de-a face cu un spațiu potențial cu șase dimensiuni . Și dacă cuantificați asta chiar și la 10, atunci sunteți la un milion. Și dacă o cuantificați la ceva mai rezonabil, cum ar fi 100, atunci sunteți până la 10 la 12... într- adevăr? Da, 10 la 12, ceea ce nu este practic. Deci, în majoritatea aplicațiilor, nu folosim toate acestea. Apropo, dacă le punem pe toate împreună, obținem o transformare liniară generală. Fac asta parțial pentru că, când ajungem la 3D, va fi util să ne familiarizăm cu acești termeni. Deci aceasta este o transformare liniară generală. Avem șase parametri și afini. Este o transformare afină. Și am putea spune, știți, uitați această clasificare. Ne vom gândi doar la transformarea în termenii acelor șase coeficienți, ceea ce este bine, cu excepția faptului că pentru noi, oamenii, este mai ușor să ne gândim la rotație, translație și scalare, pentru că individul... ce înseamnă dacă eu schimbă a1,1 și păstrez constanți ceilalți coeficienți? Și vom vorbi mai multe despre această transformare. BINE. Așa că vreau să vorbesc în continuare despre funcțiile de scor. Deci este clar ce facem. Noi creăm acest model. Mapăm modelul pe o imagine de rulare. Colectăm dovezi. Primim un scor. Găsim vârful în suprafața scorului în acel spațiu multidimensional. Și dacă este peste un prag, atunci există un potențial candidat - ar putea fi mai mult de unul sau nu ar putea fi niciunul. Și deci acesta este procesul general la nivelul superior, în care explorăm întregul spațiu. Și am vorbit despre modul în care efectuăm scorul, care se bazează în mare parte pe direcția gradientului. Asa de. Dar poate ține cont și de mărimea gradientului. Și am avut această problemă că este posibil să obținem o potrivire chiar și atunci când nu ne aflăm în partea dreaptă a obiectului, doar pentru că există o anumită gamă de unghiuri care vor fi acceptate. Și deci va exista o oarecare probabilitate ca un gradient aleatoriu în textura de fundal să se potrivească și noi... Deci aceasta a fost funcția folosită pentru gradarea calității potrivirii în ceea ce privește direcția gradientului. Și acesta a fost, desigur, doar o mostră. Dar este cel care este evidențiat în model. Și pentru acesta, acesta este 3 peste 32. Deci există aproximativ 10% șanse ca, chiar dacă aruncăm sonda într-un loc complet greșit, să obținem o potrivire. Și astfel, în model, acest lucru se numește zgomot. Puțin... Presupun că e zgomot de fundal. Nu știu, e puțin confuz. Ar fi mai bine dacă nu ar folosi acest termen. Dacă avem versiunea care ignoră polaritatea, atunci, desigur, va fi de două ori. Deci, acesta este un dezavantaj al acelei versiuni a funcției de potrivire. Vă permite să inversați contrastul. Dar, în același timp, contribuția la zgomot crește. BINE. Deci, ei definesc un număr de funcții de notare. Și sunt un fel de compromis între precizie, viteză, dacă este normalizată, dacă valoarea reală a rezultatului este semnificativă sau dacă este doar ceva care este mai mare dacă ai o potrivire mai bună. Și să ne uităm la asta. Deci avem... Acum, dacă vă amintiți, sonda era ceva care avea o poziție, o direcție și o greutate și, posibil, alte chestii. Dar acestea au fost lucrurile de top. Deci iată greutatea sondei. Așa că am pășit printre sonde. Am pășit printre sonde și asta e greutatea. Și ce face asta? Ei bine, aruncă lucrurile care au greutate negativă. Deci, în cazul în care ați folosit această capacitate, pentru această funcție de notare, le aruncați. Aceasta este R dir, funcția de punctare a direcției. Și se uită la diferența dintre unghi, direcția sondei-- deci aceasta este direcția sondei-- și gradientul la poziția în care este plasată sonda, poziția-- Și D mare este doar o funcție care vă oferă arctangenta ochiului peste ex. Este direcția gradientului din imaginea de rulare. Deci, să ne uităm la asta. Deci, ce s-a întâmplat cu celelalte componente ale ipostazei? Ei bine, în acest moment avem de-a face cu probe compilate. Deci, aici doar variam traducerea. Variăm doar traducerea a. Am mapat deja sondele în funcție de celelalte componente ale poziției. Da? Oh, asta e o bară verticală, adică valoare absolută. Îmi pare rău. Și într-un anumit sens, asta doar pentru a ține cont de faptul că acest lucru se înfășoară. Și am fi putut face asta în alt mod, cum ar fi mod 360 sau așa ceva. BINE. Și această versiune este normalizată prin faptul că împărțim prin suma ponderilor, astfel încât, dacă obținem o potrivire perfectă, rezultatul va fi 1. Și astfel valoarea absolută a acestui scor, a acestui scor particular, are o semnificație. Nu doar că devine mai mare dacă ai un scor mai bun. Și acesta este folosit în pasul grosier al algoritmului. Ce altceva putem spune despre asta? Apoi există o a doua versiune. Care este cealaltă versiune? Este 1b. Ne pare rău, acesta este S1a. Acesta este S1b. Și acesta nu se înmulțește cu greutatea. Și aceasta este o notație puțin ciudată, dar este oarecum clară odată ce te gândești la asta. Deci acesta este doar un predicat care calculează dacă ponderea este mai mare decât 0, dacă este pondere pozitivă. Și este 1 dacă este cazul și 0 dacă nu este cazul. Deci, acesta este doar un mod amuzant de a spune că vom procesa doar sonde care au o pondere pozitivă. Și avantajul este că nu avem nevoie de acea multiplicare. Și deci este mai ieftin decât celălalt. Și așa este mai rapid. Nu am făcut nimic cu acel citat, „termen de zgomot”. Deci, când ajungem la varianta de realizare preferată - Deci este foarte similar cu 1b, cu excepția faptului că acum spunem, ei bine, dacă aplicăm acest lucru într-un loc aleatoriu din imagine, vom obține un rezultat diferit de zero din cauza această potrivire aleatorie. Și astfel, scăzând acea componentă N, care este o estimare a numărului care va fi potrivit aleatoriu, putem îmbunătăți rezultatul. Da? PUBLIC: Care este funcția D? BERTHOLD HORN: Această funcție, OK. Deci D este funcția care vă spune care este direcția gradientului în imaginea de rulare. Gradient-- scuze, direcția gradientului la un plus p i. Deci nu le-am subliniat , dar sunt vectori. a este o translație, iar pi este un vector care este poziția acelei sonde, deci. Și atunci când scad micul di, obțin eroarea în direcție. Și apoi folosesc asta pentru a accesa această funcție pentru a decide cât de mult să penalizez rezultatul pe baza acelei erori. BINE. Deci, acesta are acum caracteristica că, dacă aruncați sonda-- aruncați modelul într-un loc aleatoriu, pe o textură aleatorie, răspunsul va tinde să fie 0, deoarece am eliminat potrivirile întâmplătoare aleatorii. Și așa, spre deosebire de acesta, unde, da, dacă ai o potrivire perfectă, primești un 1, dar dacă este doar un fundal de gunoi, nu primești un 0, obții orice ar fi N. Deci, acest lucru este puțin mai bine din acest punct de vedere. Este puțin mai mult calcul, nu mult. Deci acesta este citatul, metoda „preferată”. Și dacă implementarea ta nu folosește asta, asta nu te ajută pentru că nu spun că trebuie să folosești asta. Îți oferă alte alternative. Și ei spun doar că, ei bine, acesta este cel care credem că este cel mai bun. Deci bine. Deci atunci obținem ca S2. Acum, acesta nu este normalizat. Deci nu va... valoarea sa absolută nu va fi semnificativă. Doar că va fi mai mare dacă ai o potrivire mai bună. Și ce este asta? Deci aceasta este similară cu această funcție, M a plus p i este mărimea gradientului, pe care nu am folosit-o până acum. Deci, acesta ia în considerare de fapt magnitudinea gradientului și o folosește direct. Și înseamnă că există o altă înmulțire. Și această versiune este folosită în-- în primul rând, nu este normalizată și este folosită în pasul de scanare fină. Și apoi, în cele din urmă, așa că o mulțime din acestea sunt folosite pentru a ajunge la o soluție potențială candidată. Și apoi există un pas de scanare fin - există un pas de scor care ne oferă o valoare reală. Și acesta este mai multă muncă de calculat. Deci, acesta, din nou, este normalizat. Și folosește magnitudinea gradientului, dar o folosește în funcție de funcția de scor pe care am definit-o, și anume că se saturează. Deci, aceasta este funcția de notare a direcției și aceasta este funcția de notare a mărimii. Deci, în S2 a, am continua să mergem în sus, înmulțindu-ne cu magnitudinea. În aceea, limităm contribuția. Deci nu aveți un singur avantaj foarte bun care să domine orice altceva. BINE. Și există o mulțime de detalii despre cum să facem acest lucru rapid și așa mai departe, în care nu vom intra. Vreau să vorbesc despre câteva puncte interesante. Un alt lucru despre care nu vom vorbi este granularitatea. Așa că am menționat acest lucru, că am putea lucra la o scară în care aceste calcule sunt mai ieftine atâta timp cât putem obține un rezultat satisfăcător. Și rețineți, ceea ce este un rezultat satisfăcător aici este foarte diferit de unele viziune artificială, unde dacă puteți îmbunătăți acuratețea recunoașterii de la 71% la 73%, aveți o hârtie. Mai degrabă, aceasta trebuie să funcționeze în 99,9% din timp. Și astfel granularitatea este determinată practic prin scăderea rezoluției până când nu mai funcționează suficient de bine. Deci, dacă pentru sarcina ta știi ce este „suficient de bine”, poți îndeplini acea sarcină. Și practic, pentru fiecare granularitate trebuie să treci prin întregul proces. Trebuie să construiți modelul, deoarece sondele vor fi diferite în funcție de rezoluție. Și apoi alergi și vezi cât de bine funcționează. Da? PUBLIC: Când nu ați vrea să vă normalizați? BERTHOLD HORN: Mai ales când te grăbești. Deci este doar o problemă de calcul. Dacă te afli într-o parte a calculului în care trebuie să o faci pentru fiecare poză posibilă, s- ar putea să vrei să salvezi acel pas. Dacă la sfârșit, unde te apropii de răspunsul corect și trebuie să o faci doar de câteva ori, atunci te poți normaliza. BINE. Deci granularitatea... și au o metodă foarte sofisticată pentru a face asta. Și cred că am văzut destul din acea parte a modelului, așa că nu am de gând să trec prin ea. Dar este, evident, din punct de vedere practic o componentă importantă, pentru că vrei ca aceasta să ruleze cât mai repede posibil. Dacă ești la Amazon și te uiți la cutiile care coboară pe banda transportoare și citește tot felul de lucruri de pe cutie și îi determină poziția și orientarea, îți dai seama că nu ai prea mult timp pentru a face calcul. Aceste lucruri rulează cu o sută de cadre pe secundă. Și toate aceste calcule pot fi făcute în acel timp într-un procesor relativ ieftin. BINE. Dar vreau să vorbesc despre câteva probleme minore care s- ar putea să nu fie evidente. Unul dintre ei obține indicațiile corecte. Deci ne concentrăm cu adevărat pe direcțiile gradientului. Deci trebuie să ne asigurăm că atunci când efectuăm aceste transformări, transformăm corect direcția gradientului. Și deci aici este problema. Deci iată avantajul meu. Această linie este pliul iso. Și iată gradientul meu, care, desigur, este perpendicular pe pliul iso. Și acum să presupunem că am o operație care schimbă raportul de aspect. Așa că presupun că o strivesc. Deci schimb raportul de aspect. Apoi, desigur, această linie va avea o pantă mai mică, deoarece partea de sus se mișcă în jos, partea de jos se mișcă în sus. Deci bine. Și hmm, și gradientul va avea o pantă mai mică. Corect, deci nu mai este perpendicular pe pliul iso. Deci asta e cam evident. Și acum, dacă transformați x și y, este posibil ca derivatele cu privire la x și y să se transforme într-un mod diferit. Și ce facem cu asta? Desigur, acest lucru nu afectează traducerea. Acest lucru nu se întâmplă pentru translație, nu se întâmplă pentru rotație. Rotiți și unghiul drept este păstrat. Nu se întâmplă pentru scalare. Dar se întâmplă pentru celelalte două. Deci cum ne descurcăm cu asta? Ei bine, avem direcția gradientului. Aceasta este contribuția noastră. Asta calculează cutia pe care o avem în fața tuturor acestor lucruri. BINE. Deci de aici începem. Și acum tot ce trebuie să facem este să calculăm pliul iso. Deci, din direcția gradientului, obținem pliul iso. Apoi transformăm asta. Și apoi construim ceva în unghi drept față de pliul iso. Deci, iată noua noastră direcție de gradient. Deci soluțiile sunt cam evidente, dar este ceva ce s-ar putea uita cu ușurință. Cât de scump este? Ei bine, nu îngrozitor, pentru că rotațiile de 90 de grade sunt simple. Deci cosinusul lui 90 este 0, sinusul lui 90 este 1, semnul minus. Deci ei doar... nici măcar nu trebuie să facem înmulțiri. Schimbăm doar x și y și întoarcem semnul unuia dintre ele. Și apoi, după transformare, trebuie să facem inversul, care este transpunerea acelei matrice. Deci, din nou, schimbăm doar x și y și întoarcem semnul unuia dintre ele și am terminat. Dar este ceva ce e ușor de uitat. Și până nu dai peste ultimele două operațiuni, nu contează. BINE. Un alt lucru care a fost aproape ca un supliment la care s-au gândit, pentru că nu se discută prea mult în specificație, dar apare în revendicări - și există o discuție la sfârșitul acesteia, care este inspecția. Așa că, în primul rând, principalul accent aici este acela de a afla unde este ceva: poziție, poziție. Un al doilea aspect este recunoașterea. Și cum funcționează asta? Ei bine, te uiți doar la scor. Dacă este aproape de 1, îl ai și din nou, acest lucru se poate întâmpla în mai multe locuri din imagine. Dacă... de obicei, „recunoaștere” înseamnă că distingeți diferite lucruri, cum ar fi pisicile și câinii. Și așa cum funcționează? Ei bine, ai o bibliotecă de modele. Să presupunem că aveți diferite tipuri de capete de șurub, atunci există un model pentru fiecare dintre ele. Rulați acest proces și vedeți unde există o potrivire. Și dacă este necesar, puteți compara scorul meciului pentru a afla ce tip este exact. Deci asta este recunoaștere și poziție. Și vorbesc și despre inspecții. Deci inspecția se bazează aici pe o potrivire fracțională - imagine de rulare. BINE. Deci modelul constă din sonde. Punem sondele jos pe imagine. Și pentru fiecare loc, putem determina dacă este o potrivire rezonabilă sau nu. Și în acest proces, putem calcula un procent. Și dacă obiectul este parțial ascuns, ei bine, atunci acea fracțiune va fi mai mică. Dacă, să zicem, te uiți la o roată dințată și unii dintre dinții lui lipsesc, atunci vei obține o potrivire, dar scorul nu va fi 1. Și, deci, aceasta este o direcție. Celălalt este... astfel încât să putem privi imaginea de rulare și să vedem unde are margini și apoi să descoperim câte dintre acestea se potrivesc de fapt cu ceva din model. Acum, desigur, dacă există dezordine și există un fundal, atunci ar exista o mulțime de margini care nu se vor potrivi cu modelul. Dar acestea sunt și informații utile. Deci, acesta este un mod de a măsura dezordinea, practic asta. Da. Și mai sunt câteva lucruri de spus despre asta, dar asta este ideea de bază. BINE. Încă câteva lucruri pe care vreau să le fac aici, parțial ca pregătire pentru munca 3D pe care o vom face. Și asta pentru a detalia puțin mai mult aceste transformări și pentru a vă vaccina împotriva unor idei proaste, sperăm. Deci să trecem la 3D, dar într-un fel de lume simplificată. Deci știm deja multe despre asta. Știm despre proiecția în perspectivă. Deci să ne gândim la proiecția unui avion. Și asta apare mult. Adică, am putea vorbi despre masă, bandă transportoare, circuit integrat, placă de circuit imprimat. Și totul este în 3D. Acum, putem alinia cu atenție optica și așa mai departe, astfel încât să obținem o proiecție ortografică, de fapt. Sau ne putem ocupa de lumea reală 3D completă. Ar putea fi și drumul din fața unei mașini. O mulțime de exemple de suprafețe plane. OK, deci două lucruri. Un lucru pe care ni-l amintim este o bună proiecție de perspectivă. Și celălalt lucru este că există un sistem de coordonate a camerei unde se aplică acest lucru. Și mai sunt și alte sisteme de coordonate. Să le numim sistem de coordonate mondial. Și care este relația? Ei bine, va fi o traducere. Camera are sistemul de coordonate care își are originea în centrul proiecției. Și lumea are oriunde. Dacă este un braț robot, ar putea fi baza brațului robot. Dacă este o cutie, poate fi un colț al unei cutii. Și apoi există o rotație, deci în coordonatele lumii și în coordonatele camerei. Și am vorbit despre modul în care această formulă simplă pentru proiecția în perspectivă se aplică numai dacă avem de-a face cu un sistem de coordonate centrat pe cameră. BINE. Și această matrice de aici este o matrice ortonormală care codifică rotația. Și despre asta vom vorbi destul de mult mai târziu. BINE. Acum, ceea ce vreau este transformarea de la coordonatele lumii, coordonatele obiectului, în coordonatele imaginii. Și așa le combin pe acestea două. Deci, ce voi obține... Deci asta înseamnă doar multiplicarea acelei matrice. Și acesta este, din nou, același lucru. Deci, după cum știm, proiecția în perspectivă are această proprietate urâtă că implică o diviziune care este neliniară și este cam dezordonată. Deci, acesta este un caz general. Și vom găsi modalități de a face față asta. Dar vreau să mă uit la cazul particular în care lucrul pe care îl privim este plan. Și asta înseamnă că ne putem ridica sistemul de coordonate în acel obiect. Iată suprafața noastră plană. În loc să alegem un sistem de coordonate arbitrar, să alegem unul în care z este 0, astfel încât să avem doar două dintre aceste coordonate de tratat. Deci ceea ce facem este că suntem la jumătatea drumului între 2D și 3D, pentru că am început să ne uităm la o suprafață 2D încorporată în 3D. Și unde mergem este o cartografiere de la suprafața 2D de acolo în suprafața 2D și imaginea. Da? PUBLIC: De unde vine e w, numărătorul de sus? BERTHOLD HORN: E-- scuze, care-- e w? PUBLIC: Oh, da, lângă yw este un ew. Sau este un z? BERTHOLD HORN: Oh, îmi pare rău. Oh, aici? PUBLIC: Sus. BERTHOLD HORN: Oh, îmi pare rău. Asta e scrisul meu prost, da. zw. OK, și acesta este cel care este de fapt 0. Așa că, atunci când fac acea înmulțire a matricei, asta înseamnă că pot ignora a treia coloană, pentru că va fi înmulțită cu zw. Și astfel pot face orice vreau. Deci, această coloană de aici nu contează, pentru că va fi înmulțită cu zw. Și apoi pot oarecum plia în mod convenabil traducerea. Deci, unul dintre lucrurile enervante despre transformările euclidiene, mișcarea în lumea reală, este că există rotație și există translație. Și este greu să le tratezi ca pe un singur lucru. Ar fi bine să ai notație, ceva magic. Să-i spunem un glob. Deci globul, îl înmulțiți cu vectorul dvs. și iese un alt vector. Și acel singur lucru codifică atât translația, cât și rotația. Deci, așa cum am scris-o acolo, le-am împărțit pe cele două. Ei bine, ar fi foarte frumos să le avem ca o singură operație -- multiplicarea a ceva, de exemplu. Ei bine, putem face asta aici pentru că dacă renunțăm la a treia coloană, putem introduce x0, y0 și z0 și ajungem cu... să vedem. Deci avem... L-am numit r1,1. Și... Deci vezi ce am făcut aici. Am profitat de faptul că nu avem nevoie de acea a treia coloană pentru zw, deoarece zw va fi 0. Și apoi putem îndoi această adunare doar înmulțind ultima coloană cu 1. Deci, în acest caz particular, unde avem de-a face cu o suprafață plană în 3D, putem plia rotația și translația într-o singură matrice. Și să-- numim această matrice T. Lasă- mă să numesc acea matrice acolo sus R. Deci R are niște proprietăți speciale despre care vom vorbi mai târziu. Una dintre ele este că este ortonormal. Și asta înseamnă că dacă luați transpunerea și o înmulțiți cu R, obțineți matricea de identitate. Iar celălalt este că determinantul său este plus 1. T nu are acele proprietăți. Deci asta este foarte important, pentru că câte grade de libertate avem? Ei bine, în 2D a fost puțin mai ușor de înțeles. Aveam două pentru translație, una pentru rotație. Deci acelea vă oferă deja trei grade de libertate. Și este destul de evident cum le-ați putea reprezenta -- un decalaj x, un decalaj y și un unghi. În 3D, este puțin mai greu. Avem trei grade de libertate pentru translație - o schimbare x, o schimbare în y, o schimbare în z. Și apoi există rotația și diferitele moduri de a gândi despre asta, la care vom ajunge mai târziu. Dar, practic, sunt trei rotații. Există unul care păstrează axa xy, există unul care păstrează axa yz și există unul care păstrează axa zx. Și ca scurtătură mentală, puteți spune că există rotație în jurul axei x, rotație în jurul axei y, rotație în jurul axei z. Acesta este de fapt un mod foarte prost de a gândi. Dar îți dă numărul potrivit, care este 3, deci. BINE. Deci asta înseamnă că dacă avem translație și rotație, ar trebui să existe șase lucruri - șase grade de libertate. Și apoi te uiți la acea matrice acolo sus și alte chestii, și sunt deja nouă doar în matrice, apoi mai sunt trei pentru traducere. Deci sunt 12. Deci există o redundanță. Ceva nu e în regulă. Avem mult mai multe variabile decât există grade de libertate. Și asta pentru că există aceste constrângeri. Deci matricea R nu este orice matrice veche de 3 pe 3. Trebuie să satisfacă toate aceste constrângeri. Și este lucrul obișnuit. Ai o serie de variabile, o grămadă de constrângeri. Le scazi și obții gradele de libertate. Deci, în acest caz, când scădem constrângerile, se dovedește că obținem 9 minus 6 egal cu 3 pentru rotație. 9 este pentru că este o matrice de 3 pe 3 , există nouă numere. Care este 6? Ei bine, constrângerea de ortonormalitate oferă șase constrângeri. De ce? Ei bine, fiecare rând trebuie să fie un vector de dimensiune unitară, deci este 3. Rândurile trebuie să fie reciproc perpendiculare. Ei bine, există trei moduri de a le asocia, deci 6. Deci 9 minus 6 este 3. OK. Deci atunci ajungem la asta. Și știi, acesta este un mod interesant de a trata proiecția în perspectivă în cazul unei suprafețe plane. Trebuie doar să fim puțin atenți. Deci, să presupunem, de exemplu, că determinăm această matrice T experimental prin potrivirea unei imagini a unui obiect de calibrare cum ar fi, nu știu, cub, sau tablă de șah sau orice altceva. Cumva găsim această matrice de 3 pe 3 și apoi am terminat. Ei bine, nu. Pentru că aceasta este o matrice cu nouă elemente independente, ceea ce este mult mai mult decât merită transformarea. Și așadar, de fapt, trebuie să aplicăm unele constrângeri. De exemplu, este derivat dintr-o matrice de rotație. Deci prima coloană ar trebui să fie un vector unitar. A doua coloană ar trebui să fie un vector unitar. A treia coloană am pierdut-o. Nu știm ce este, deși, desigur, îl putem reconstrui. Pentru că este perpendicular pe primele două coloane, deci este produsul lor încrucișat. Acesta este, apropo, un truc util de programare. Nu trebuie să păstrați o matrice de 3 pe 3 pentru rotație. Păstrați doar două dintre rândurile sale sau două dintre coloanele sale, pentru că îl puteți calcula oricând pe celălalt. Și, de fapt, într-un fel, ar putea fi mai consistent să lucrezi așa. OK, două constrângeri. Ei bine, mai este unul. Acestea trebuie să fie ortogonale. Deci r1,1, r1,2 plus r21, r22, plus r31, r32, trebuie să fie 0. OK. Deci această matrice T ar trebui să satisfacă cu adevărat aceste trei constrângeri. Și să adunăm lucrurile. Deci are 3 cu 3. Are 9 elemente. Trei constrângeri, care ne lasă șase, șase grade de libertate. Este corect. Deci totul este adevărat și minunat. Doar că, de obicei, nu aplicăm această constrângere. De ce? Ei bine, pentru că în rest, puteți face cele mai mici pătrate liniare pentru a se potrivi cu datele de calibrare. Dar cum aplicați aceste ecuații de ordinul doi? Și astfel veți vedea un număr mare de publicații care expun această abordare, ceea ce ar fi valabil dacă ar fi impus acest lucru. Așadar, este ca un fel de încercare de generalizare de la ceea ce este acoperit în acest model, și anume transformările 2D, până unde vom merge mai târziu, care vor fi transformări 3D, și un fel de avertisment cu privire la aceste lucruri că trebuie să fim atenți. Deci, apropo, dacă voi folosi asta pentru a prezice unde sunt în imagine, voi folosi doar -- desigur, ecuațiile, repet ecuațiile de acolo de sus. Și asta înseamnă că dacă iau coordonatele camerei și le înmulțesc cu un factor arbitrar diferit de zero, nimic nu se schimbă. Și, desigur, aceasta este ambiguitatea factorului de scară despre care am vorbit deja. Ce înseamnă asta? Ei bine, un lucru înseamnă că puteți lua această matrice și o puteți înmulți cu o constantă arbitrară, constantă diferită de zero și nimic nu se schimbă. Deci, acesta este un alt indiciu că acesta este un tip amuzant de matrice. Și da, ați putea încerca să-i ajustați dimensiunea încercând să impuneți aceste constrângeri. Dar... OK, oh, asta se numește... Ar trebui să spun că asta se numește omografie. Și vom vorbi mai târziu despre utilizarea lui în fotogrammetrie sau utilizarea greșită în fotogrammetrie. BINE. Celălalt lucru despre care am vrut să vorbesc a fost că vă amintiți chiar când am început să vorbim despre acest model, am spus, ei bine, există stadiul tehnicii. Și am enumerat analiza blob sau procesarea imaginilor binare și am enumerat șabloane binare și am enumerat... ce altceva? Îți amintește cineva ce altceva am enumerat? Și a fost un al patrulea, despre care nu am discutat. Ceilalți trei le-am discutat. Iar a patra este transformarea Hough și generalizarea ei. Deci, să vorbim doar pe scurt despre asta. Deci asta pentru că am ales sistemul nostru de coordonate mondial, astfel încât în ​​avion să funcționeze doar pentru acest avion. Și în acel plan, zw este 0. Ce înseamnă că, să presupunem că vreau să mă ocup de o imagine a acestui tabel și apoi vreau să mă refer la locul în care se află telefonul meu pe masă. Voi alege un sistem de coordonate care este, să zicem, aliniat cu marginile. Dar lucrul important este că z este perpendicular pe acea suprafață, astfel încât orice aș fi... unde este această agrafă? Trebuie doar să dau x și y, pentru că dacă este în acel plan, z este 0. Și astfel, acest lucru nu se va aplica dacă am un obiect tridimensional adevărat. Este doar cazul în care îmi concentrez atenția la un avion. Și așa apare în viziunea industrială, pentru că... în multe feluri. Una este că, evident, doriți să încercați să obțineți axa optică cât mai perpendiculară pe suprafața de care sunteți interesat, fie că este vorba de o bandă transportoare, fie de suprafața drumului, sau orice altceva. Dar, inevitabil, va exista o mică eroare și, inevitabil, cineva se va lovi de ea și o va schimba ușor. Și asta se ocupă de asta, pentru că această ușoară generalizare vă permite să vă ocupați de altă orientare a camerei, astfel încât să nu aveți nevoie de o proiecție ortografică perfectă . Puteți avea unul ușor înclinat. Gândindu-ne la alte aplicații, în unele țări există ca o cameră de supraveghere la fiecare intersecție și se uită în jos la drum. Ei bine, dacă mapați puncte de pe drum, nu aveți nevoie de transformarea completă 3D. Ai nevoie doar de asta. Dar trebuie doar să vă amintiți că acum sistemul dumneavoastră de coordonate mondial are constrângerea că trebuie să fie aliniat cu suprafața drumului, astfel încât zw să fie 0 - presupunând că drumul este cu adevărat plat, dar. BINE. Hough se transformă. Așadar, când eram student, ceea ce se întâmplă cu secole în urmă, NASA avea o mare parte a uneia dintre clădirile Tech Square, una dintre Tech Square originale -- de atunci au fost renovate, deci. Bănuiesc că era 535. Și era un etaj sau poate două etaje dedicate următorului lucru. La acea vreme, oamenii erau foarte interesați de diferite tipuri de procese ale particulelor elementare. Și i-ai studiat împușcându-i într-o cameră cu nori, proiectul lui Wilson de o cameră cu nori. Le împușci, scazi rapid presiunea și e saturat cu niște vapori... alcool sau ceva de genul. Iar punctele ionizate din acel spațiu formează apoi puncte de nucleare pentru lichid. Și apoi îi faci o poză. Și descoperiți că există particule care se deplasează într-o anumită direcție. Și apoi puteți vedea cum asta depinde de câmpul magnetic care este aplicat. Dacă este o particulă încărcată, se va ondula. Și astfel oamenii au petrecut mulți, mulți, mulți ani-bărbați și ani-femei studiind cu atenție un tabel ca acesta, unde aceste imagini erau proiectate în jos, și apoi se potriveau linii sau arcuri. Și așa a existat un interes enorm în automatizarea acestui proces, pentru că era clar că avea să se înrăutățească. Pentru că cu cât ajungeți la energie mai mare, cu atât mai multe imagini trebuie să vă uitați înainte de a găsi lucrurile interesante și cu atât imaginile devin mai complicate. Deci a fost... a face asta manual a fost fără speranță. Deci detectarea marginilor, detectarea liniei a fost importantă. Și atunci ce faci cu replicile? Ei bine, Hough a venit cu chestia asta și... această idee. Și acesta este probabil... din câte știu eu, acesta este primul model de viziune artificială. Cred că acesta a fost depus în 1960 și emis în 1962. Și este destul de scurt. Nu-mi amintesc dacă l-am încărcat pe Stellar. Nu este deosebit de interesant, dar o vom parcurge. Și la acel moment, exista un sentiment destul de negativ în comunitatea de viziune artificială, care era, nu știu, o duzină de oameni la acel moment. Știi, de ce modelează chestia asta? Oricum, el a modelat-o. Deci ce este? Și din nou, contextul este că încercăm să vedem linii în fotografiile cu fotografii ale camerei cu bule Wilson. Și așa caută linii posibile. Și spui, bine, folosește doar metodele de detectare a marginilor despre care am vorbit deja. Ei bine, problema este că aceste linii erau mici linii punctate. Erau bule mici. Și bulele nu erau distanțate în mod egal și nu erau toate de aceeași dimensiune. Deci nu era curat. Și, de asemenea, pentru că nu erau margini, nu erau tranziții de la întuneric la luminos. Erau tranziții de la ceva la ceva și apoi înapoi. Dar nu ar fi fost prea greu de rezolvat. Așa că i-a venit ideea că mapam din spațiul imaginii. deci aici este spațiul nostru de imagini. Și acum, în acest spațiu de imagine, putem avea tot felul de linii. Și mapăm la un spațiu de parametri patru linii. Deci știi de câte numere avem nevoie pentru a descrie o linie? Ei bine, asta am făcut deja. Deci, un mod, de care nu sunt prea entuziasmat, dar iată, este y egal cu mx c. Deci, se pare că sunt necesare două numere pentru a descrie o linie. Și apoi noi... m-am folosit aici? Să vedem aici. BINE. Și deci, dacă am o linie în acest spațiu, aceasta se mapează într-un punct din acest spațiu. Și așa că, dacă am niște dovezi locale pentru o bucată din una dintre aceste urme de bule, poate că pot mapa asta în acest spațiu și să acumulez dovezi pentru diferite linii posibile. Și așa cum ar fi, acel fragment ar putea merge acolo. Și apoi acest fragment, asta e... Pot potrivi o linie la asta. Și apoi, sperăm, că va ajunge aproape de același loc și așa mai departe. Așadar, întreaga idee este aceea de a avea o matrice acumulată și de a număra dovezile pentru fiecare dintre combinațiile de parametri posibile și apoi de a căuta vârfuri. Și acestea vor corespunde liniilor din imagine. Și acest lucru poate fi generalizat la alte forme, dar să rămânem cu linii. Deci iată un alt lucru. Deci să presupunem că am o linie în acest spațiu. Cu ce ​​corespunde asta în spațiul original al imaginii? Ei bine, se dovedește că această ecuație este cam simetrică, dacă o scrii corect. Să-l rescriem. Pot scrie ecuația dreptei în acest fel sau în altul. Și atunci este clar că, într-adevăr, acele două spații sunt simetrice. Sunt complementare, cartografiind de la unul la altul. Și ce înseamnă asta? Ei bine, asta înseamnă că o linie din acest spațiu din dreapta corespunde unui punct din spațiul din stânga. Deci asta corespunde , să spunem, că. Și la ce folosește asta? Ei bine, asta e destul de interesant, pentru că s-ar putea să nu am deloc o estimare bună a liniei. Poate că tot ce am este o bulă. Nu prea știu ce este în schema mai mare a lucrurilor. Ei bine, să presupunem că aceasta este balonul meu. Ce îmi spune? Îmi spune... nu- mi spune care este linia. Dar este unul dintre acele lucruri, în care constrânge numărul de linii. Deci, toate rândurile pe care acest lucru ar putea da dovadă vor trece prin acel punct. Și acestea sunt toate liniile de aici. Bine, deci asta e o perspectivă importantă, asta dacă am un avantaj curat. Pot să încap o linie și am terminat. Ei bine, dacă am o imagine cu camera cu bule, am doar aceste bule. Dar fiecare bulă îmi oferă dovezi despre o posibilă linie. Nu știu exact ce este. Am redus problema de la 2D necunoscut la 1D. Ar trebui să sune familiar. Și ce să fac? Ei bine, iau fiecare bulă și descopăr că se transformă în acest spațiu și o folosesc pentru a acumula o parte totală. Deci există o bulă. Acum voi obține o altă bulă. Și poate asta îmi va da acea linie. Și apoi voi obține, nu știu, un alt balon, și asta îmi va da această linie și așa mai departe. Și puteți vedea cum fiecare dintre aceste bule contribuie cu unele dovezi. Și apoi, dacă țin evidența asta, având acumulatori aici, pot căuta vârfurile din această matrice de acumulatoare. Și vor corespunde unor bule care se aliniază de-a lungul unei linii. Deci aceasta este ideea de bază a transformării. Și ideea cheie este că există această mapare și că este simetrică. Lasă-mă să fac doar un exemplu. Oh, să vedem. Cum funcţionează asta? Deci iată imaginea mea. Și am o linie aici. Acesta trebuia să fie 0, 1, iar acesta este minus 1, 0. Și acest punct ar fi minus 1/2, 1/2. Și să mai punem una. Patru este 1 virgulă 2. OK. Deci, să presupunem că avem bule în acele puncte. Apoi mergem la spațiul de transformare. Și să luăm numărul 1. Deci numărul 1 spune că x este 0 și y este 1. Deci acesta este, punctul 1. Și dacă scriu asta în ecuație, y este egal cu mx plus c, înseamnă că c este 1, deci atunci pot să complotez asta aici și... am inversat? Mă duc în sus, da. OK, c este egal cu 1 în acest spațiu este acea linie... hopa. Aceasta este linia c este egală cu 1. Deci acest punct îmi dă dovezi că linia pe care o caut este una dintre acele linii. Ei bine, fiecare punct de aici corespunde unei linii din acel spațiu. BINE. Acum să presupunem că aleg altul. Deci, permiteți-mi să iau punctul 2, x este egal cu minus 1, y este egal cu 0. Acesta este punctul 2. Și dacă îl conectez în y egal cu mx plus c, obțin m este egal cu c. Și așa că... deci aceasta este linia numărul 1. Deci acea linie arată așa. Aceasta este linia numărul 1. Și așa voi intra în raza acumulatorului și toate aceste celule vor fi incrementate. Hai să mai facem una. Să facem asta, punctul 3. Deci, pentru 3, avem x este 1 și y este 2. Și pentru asta, ecuația este m egal cu 2 minus c. Deci acea linie, 2 minus c. Deci va începe la 2 și apoi va deveni negativ, mergeți așa. Deci, aceasta este linia 3. Și puteți vedea ce se întâmplă, și anume că există un acumulator care va fi actualizat în mod repetat. Acum, în prezența zgomotului, nu vor fi toate perfecte. Și în loc să lovim mereu acel acumulator, vom lovi puțin celulele vecine. Dar ideea este că celula care are parametrul potrivit va fi cea mai incrementală. Și poți face lucruri mai sofisticate. Dar ideea cheie este că avem un spațiu pentru posibilii parametri ai transformării. Avem că fiecare punct aici corespunde unei anumite linii. Și apoi, apropo, fiecare linie de aici corespunde unui punct. Și astfel putem aduna dovezile. Și chiar dacă linia este într-adevăr rătăcită, doar aceste bule distribuite în intervale inegale, putem obține un număr mare acolo. Deci, aici este folosit în detectarea liniei, dar ar putea fi folosit în egală măsură și în detectarea marginilor. Și a fost în unele cazuri. Nu este folosit prea mult în detectarea marginilor-- acum în detectarea liniei , pentru că avem-- dacă imaginea este rezonabilă, avem metode mult mai bune. Problema lor era că, la mărire mare, aveau doar aceste bule izolate care nu erau chiar pe linie și erau diferite-- și deci acesta este o modalitate bună de a încerca să rezolvi acel zgomot, dacă vrei. Asa de. Absolut. Tocmai ați inventat transformarea extinsă Gauss Hough. Deci da. Deci asta este cu siguranță o cale de urmat. Și vor fi, evident, compromisuri. De exemplu, dacă aveți ceva care are o mulțime de parametri, acel spațiu devine mare. Și apoi trebuie să vă ocupați de costul stocării versiunii cuantificate a acesteia. Și sunt mici lucruri complicate, cum ar fi, dacă împărțiți spațiul, îl cuantificați în cutii mici. Dacă faceți o mică modificare a datelor, puteți trece de la o celulă la celula vecină. Și ce faci în privința asta? Deci există trucuri pentru a face față asta. Dar permiteți-mi să fac un alt exemplu simplu, care sunt cercurile. Și să presupunem că știm raza cercului. Deci căutăm, din nou, este doar x și y, doar doi parametri, centrul cercului. Deci, o modalitate de a introduce această poveste este că în LTE-- Evoluția pe termen lung-- în telefoanele mobile, semnalul de la telefonul tău mobil ajunge la un turn la un moment dat după ce l-ai trimis, desigur, cu o sumă care depinde de cât de departe ești. Și LTE, spre deosebire de CDMA, folosește multiplexarea pe diviziune în timp. Deci primești un slot pentru a-ți trimite datele, iar altcineva primește un slot pentru a-și trimite datele, iar altcineva primește un slot pentru a-și trimite datele. Și dacă nu se potrivesc în acel slot, vor interfera unul cu celălalt. Deci, este foarte important ca telefonul dvs. să folosească un avans de sincronizare - cu alte cuvinte, că știe că semnalul meu va dura 5 microsecunde pentru a ajunge la turn, așa că trebuie să- l trimit cu 5 microsecunde înainte de începutul stabilit al intervalului de timp. . De fapt, e chiar mai rău de atât, pentru că nu știe ora. Adică, are propriul ceas intern, dar nu este precis la nanosecunde. Există un alt ceas în turnul celular, care este. Dar cum funcționează asta? Ei bine, turnul celular trimite un semnal și acesta ajunge la telefon. Și apoi telefonul trimite ceva înapoi. Deci este posibil să obțineți timpul dus-întors, chiar dacă cele două ceasuri nu sunt sincronizate. Deci, detaliile pe care le vom omite, dar, practic, puteți obține avansul de sincronizare, care este ceea ce trebuie să folosească telefonul mobil, astfel încât să-și introducă corect mesajul în șirul de mesaje. Și asta, atunci, evident că îți spune cât de departe ești. Deci, în Android, puteți scrie o aplicație care... ei bine, aparent, cu cretă pe vârful degetului, senzorul din vârful degetului nu funcționează. Oricum, putem obține avansul de sincronizare și apoi puteți face diverse jocuri cu el. Unul dintre ele este, dacă știi unde sunt turnurile celulare și ai avansul de timp de la mai multe dintre ele, poți determina unde te afli. Sau poți să-l întorci și să spui, nu știu unde sunt turnurile de celule, dar aș vrea să știu unde sunt, iar tu rătăciți. Și măsori distanța de la diverse locuri pe care le cunoști, de exemplu, prin GPS unde te afli. Deci există probleme de acest tip care implică cercuri. Deci, să vedem cum am putea folosi o extensie a transformării Hough pentru a face asta. Și rețineți că știm radiourile. Deci, avansul cronometrajului ne oferă raza. Deci, asta face un pic mai simplu. Vom vorbi despre cazul mai general într-o secundă. OK, deci sunt aici și telefonul meu mobil mi-a spus că avansul de sincronizare a fost de o microsecundă. Deci turnul este, ce, la 300 de metri distanță. Și de fapt, cuantizarea nu este foarte bună. Este ca trepte de 150 de metri. Dar oricum. Deci asta înseamnă că nu știu unde este turnul, dar știu că este pe cerc. Și este același lucru pe care l-am făcut tot timpul, că obținem o măsurătoare. Nu ne oferă răspunsul, dar constrânge răspunsul. Și apoi luăm o altă măsurătoare. Deci acum vă puteți imagina că ne-am putea mișca. Și spuneți că acum suntem aici și obținem o rază diferită. Ei bine, nu este o... mută-l acolo. Deci asta e raza 1. Și vei spune, oh, bine, evident că răspunsul este aici și acolo. Ei bine, da, OK. Asta presupunând că aceste măsurători sunt foarte precise, ceea ce nu faci. Și te lasă cu o ambiguitate în două sensuri. Deci, o modalitate mai bună este să continuați. Deci avem x2, y2, desenați un cerc pe baza acelei raze. Și în acest caz, ele nu se intersectează, așa că ceva nu a mers prost, ceea ce se poate întâmpla. Și în practică, ai avea o situație ca asta. Deci, aceasta este o metodă asemănătoare transformării Hough. Tot ce trebuie să facem este să avem o matrice de acumulatori care să acopere posibila poziție geografică. Și apoi folosim această metodă pentru ao actualiza. Așa că resetăm totul la 0. Prima măsurătoare pe care o obținem, ocolim cercul și creștem toți acumulatorii pe care i-am lovit pe acel cerc. Următoarea măsurătoare, ocolim acel cerc. Și sperăm că adevărata locație a turnului celular va fi atunci cea în care există un total foarte mare acumulat. Deci este o simplă generalizare. Și o generalizare mai interesantă , știi că cineva a menționat polinoame de ordin superior și asta este cu siguranță o posibilitate. În acea direcție, ce se întâmplă dacă nu cunoaștem raza? Să presupunem că avem un cerc care caută... aceasta este acum o altă problemă. Căutăm... Deci există un cerc cu centrul x0, y0 și raza x0. Și obținem aceste măsurători. Acum, spațiul parametrilor este mai mare. Deci aici, în mod convenabil, spațiul parametrilor era bidimensional, la fel ca spațiul theta. Ei bine, aici vom avea un spațiu de parametri tridimensional . Și putem instala un acumulator chiar aici. Și fiecărui punct din acest spațiu îi corespunde un cerc la o anumită poziție în plan și o anumită rază. Și așa putem doar să adunăm dovezile pentru asta. Și de fiecare dată când găsim un punct care se află pe cerc, actualizăm toți acumulatorii dintr-un con, pentru că, OK, ar putea fi cu raza zero, adică este exact unde sunt eu, sau ar putea avea o rază puțin mai mare și este pornit. un cerc mic, sau poate fi o rază mare și pe un cerc mare. Nu știu. Dar acum-- și din nou, nu primesc răspunsul de la acea singură măsurătoare-- fac asta din nou și din nou și primesc o grămadă de conuri. Și toate se intersectează într-un fel complicat și, știi, chiar nu-mi pasă. Tot ce îmi pasă este că răspunsul va avea multe contribuții. Multe dintre aceste conuri-- ei bine, în mod ideal, toate conurile vor trece prin răspunsul cu zgomot-- majoritatea, nu toate. Și așa este ideea transformării Hough generalizate , că putem alege altă formă. Și ideea cheie este că avem spațiul original și avem spațiul parametrilor. Și colectăm dovezi, la fel ca în tipar, și acumulăm dovezi. Și avem o suprafață de scor. Și găsim vârful suprafeței scorului. Și dacă este peste un anumit prag, atunci acceptăm asta ca răspuns. Gândiți-vă la planul r egal cu 0. Ei bine, dacă r este egal cu 0, atunci sunt acolo. Este un cerc cu raza zero. Așa că pot contribui la această celulă. Dar acum să presupunem că r are o valoare diferită de zero. Ei bine, asta înseamnă că nu sunt la răspunsul corect, dar sunt mai sus aici. Și locațiile posibile pentru... așa că sunt aici. Și locațiile posibile sunt pe cerc. Și atunci când schimb raza, voi obține cercuri din ce în ce mai mari. Și acestea sunt secțiunile. Deci spațiul parametrilor se poate complica. Acestea sunt exemple simple. Și dacă este o problemă cu dimensiuni mari, spațiul parametrilor poate fi costisitor de întreținut și, în prezența zgomotului, poate să nu funcționeze atât de bine. Deci, transformarea Hough nu este utilizată în mod obișnuit în modul său normal, definit inițial, pentru a găsi urme sau linii sau margini ale camerei cu bule. Dar ideea transformării Hough este folosită adesea ca o subrutină a ceva mai avansat. Și ideea cheie, din nou, este doar că avem acest spațiu de parametri. Și o cuantificăm și acumulăm dovezi în ea. Și nu trebuie să fie vorba de margini sau ceva de genul ăsta. BINE. Acum, nu am spus multe despre asta în acest model, dar este o parte importantă a modelului. Și chiar în figura 1, a început prin a spune, practic, eșantion de filtru trece-jos, subeșantion. Deci, să vorbim puțin despre eșantionare, subeșantionare, filtrare trece-jos. Și asta a făcut parte din lucrul la mai multe scări. Acum, există diferite motivații pentru a lucra la mai multe scări. Una este că puteți reduce calculul lucrând la rezoluție mai mică. Deci, dacă puteți obține rezultatul dorit la rezoluție mai mică, este foarte logic să faceți acest lucru. Un alt motiv este că uneori, caracteristici precum marginile sau textura sunt evidente la un anumit nivel de rezoluție, dar nu sunt atât de evidente la alte niveluri de rezoluție. Așa că ne gândim la o margine ca la un fel de margine de pas ideală. Dar am văzut, de exemplu, în defocalizare, că nu va fi un pas ideal. Și va exista o scară la care este cel mai evident. Și la alte scale, ar putea fi o tranziție atât de lentă și lină încât să fie greu de detectat. Deci, să vorbim despre mai multe scale și subeșantionare. Așa că am dat deja de înțeles despre asta, că adesea nu este atât de costisitor. Deci, să presupunem că reducem numărul de coloane și numărul de rânduri cu o înmulțire cu un factor r, unde r ar putea fi 1/2. Dar să păstrăm un general. Deci, cantitatea de muncă va merge ca muncă, și, de asemenea, cantitatea de spațiu dacă păstrați lucrurile în jur, nm plus r pătrat nm plus, r la al patrulea nm și cetera. Deci munca generală este mai mare decât ceea ce avem doar pentru imaginea cu rezoluție mai mare, dar nu foarte. Deci, să ne uităm la r egal cu 1/2. Cred că ne-am uitat deja la acel caz. Apoi obținem 4 peste 3 nm. deci, în acest caz, este cu 30% mai multă muncă. Nu este imens. Ce zici că r este egal cu 1 peste rădăcina pătrată a lui 2? Apoi obținem 1 minus 1/2 este un 1/2. Și o întoarcem, obținem 2 nm. Deci asta e mai multă muncă. Dar acest lucru se dovedește a fi important. Deci suntem... Hough este lucrul evident. Vom lua, de exemplu, blocuri de 2 pe 2 și vom lua media, iar aceasta este noua valoare. Și descoperim că acesta nu este de fapt un mod foarte bun de a face asta. Dar conceptual, ne putem gândi la asta ca la o metodă de subeșantionare foarte simplă. Și de ce am merge la altceva? Ei bine, se dovedește că este foarte agresiv. Și puteți găsi probleme serioase de aliasing atunci când striviți lucrurile atât de mult. Deci ar putea fi mai bine să nu fii la fel de agresiv. Și astfel 1 peste rădăcina pătrată a lui 2 este la jumătatea distanței. Și acela este folosit. Deci cum faci asta? Ei bine, iată o cale. Știi, ceea ce vom face este practic să reducem numărul de celule cu 2. Așa că aici, reducem numărul de celule cu un factor de 4, trecând de la blocurile de 2 cu 2 la 1. te gândești la o modalitate de a subeșantiona această grilă, astfel încât să reducă numărul de celule cu 2 în loc de 4? Joacă cineva șah sau cronă? Și așa va face o tablă de șah . Deci putem face un roșu, negru sau roșu, alb-- roșu, negru. Deci, dacă reținem doar una dintre culori, una dintre cele două culori, prin definiție, atunci am redus la jumătate numărul de celule. Și probabil că nu este primul lucru care ți-a venit în minte, pentru că nu pare a fi o grilă dreptunghiulară drăguță. Dar este, pentru că tot ce trebuie să facem este să ne gândim la ea ca la o grilă care rulează în acea direcție. Deci, pentru că aceste celule urmează un model obișnuit aici, și apoi următorul rând este aici, și același în această direcție. Deci, dacă suntem dispuși să facem față unei rotații de 45 de grade, aceasta ne oferă o reducere de 2 rădăcină pătrată. Și celălalt lucru pe care îl face este că crește distanța cu rădăcina pătrată a lui 2. Deci, în acest caz, distanța a crescut cu un factor de 2. Deci, acum distanța dintre celulele învecinate este înmulțită cu rădăcina pătrată a lui 2. Și așa este puțin ciudat 45 de grade. Dar gândește-te. O faci data viitoare, ești din nou sincronizat cu originalul. Deci, pe un punct înrudit, există o metodă numită SIFT, care este folosită pentru a găsi puncte corespunzătoare în diferite imagini ale aceleiași scene. Și este folosit pe scară largă pentru a îmbina mai multe imagini pentru a produce informații 3D despre, de exemplu, site-uri populare pe care turiștii merg, unde aveți mii de imagini. Și încerci să faci două fotografii făcute din două poziții diferite, cu camere diferite, în condiții de iluminare diferite, și încerci să le asortezi. Există această metodă datorită lui Lowe numită SIFT, care primește descriptori de puncte din imagine care încearcă să fie cât mai unici posibil. Și folosește mult mai mic... mult mai puțin agresiv. Deci folosește mai mulți pași pe octavă. Deci am coborât o octavă întreagă într-un singur pas, știi, un factor de 2. Aici coborâm cu o jumătate de octavă. Este nevoie de doi pași pentru a coborî o octavă întreagă. Și uit ce recomandă în tiparul său. Sunt, nu știu, șase sau ceva. Deci seamănă mai mult cu o scară muzicală, unde o octavă este împărțită în... opt noduri? Stie cineva? BINE. Și deci nu sunt la fel de distanțate, dar asta este ideea. Deci, da, ar putea părea puțin ciudat că nu suntem atât de agresivi cu un factor de 2. Dar, de fapt, există motive întemeiate să nu facem întotdeauna asta. Și, știți, SIFT este un exemplu clasic de situație în care nu eșantionăm la fel de agresiv. Dar nu avem timp, îmi pare rău. BINE. Am propuneri pentru cei dintre voi din 6.866, pentru aproape toată lumea. Dacă sunteți unul dintre acei oameni care încă nu a trimis o propunere, vă rugăm să o trimiteți. Și ieri, am deschis o prăjitură și a spus, uciderea dragonului întârzierii nu este un sport pentru cei cu vânt lung. Așa că vă rugăm să luați asta la inimă dacă sunteți una dintre persoanele care nu a trimis încă această propunere.