[SCRÂTÂND] [FOȘTIT] [CLIC] BERTHOLD HORN: Acest test , care va fi lansat astăzi. Și regulile pentru asta sunt ușor diferite de problemele legate de teme. Contează de două ori mai mult decât o problemă de teme. Și este mai lung. Nu de două ori mai lung, dar ceva de genul ăsta. Și așa ai, de asemenea, puțin mai mult timp să o faci. Nu este doar o săptămână. Dar este un pic de muncă, așa că nu o lăsa prea târziu. Vă rugăm să începeți destul de curând. Și aici ar trebui să lucrezi pe cont propriu, nu să colaborezi. Și acoperă tot ce am făcut până în acest moment, punând un accent mai mult pe materialul recent. Și cred că doar ultima întrebare are de-a face cu brevetul pe care îl discutăm, așa că ar trebui să putem rezolva imediat ceilalți patru. Mică bară laterală despre proprietatea intelectuală și pornind de la faptul că unora nu le place această terminologie. Și cum poate o idee să fie proprietate? Un pic, cum poate o companie să fie o persoană? Ei bine, este o chestie ciudată în drept că trebuie să găsești un mod de a formaliza aceste lucruri. Și astfel, în acest caz, ideile sunt tratate ca proprietate într-o oarecare măsură. Există mai multe tipuri diferite de proprietate intelectuală. În primul rând, avem brevete, despre care vom vorbi. Și există diferite tipuri de brevete. Așa-numitele brevete de utilitate, adică brevete utile. Ca să nu spun că celelalte nu sunt utile, dar sunt brevete de proiectare. Deci, de exemplu, primul brevet al lui Jerome Lemelson a fost practic un brevet de design pentru o șapcă de baseball cu o gaură în ea și un tub prin care puteai sufla. Deci, acesta este inversul șapcii de baseball de bere. Și ar fi o elice și, pe măsură ce suflați prin ea, elicea s-ar întoarce. Un alt brevet de design celebru este designul Apple pentru un telefon mobil. Și brevetul lor de design spune că ar trebui să fie un dreptunghi cu colțuri rotunjite. Și a fost un proces în care au dat în judecată Samsung pentru că telefonul lor avea un dreptunghi cu colțuri rotunjite. Iar juriul i-a acordat Apple un miliard de dolari, deci bani mari implicați aici. Și ați putea spune, ei bine, cum ar trebui să arate un telefon mobil în afară de acesta? Asta este. Dar nu este complet nebunesc pentru că la momentul în care au inventat-o, telefoanele erau aceste lucruri mari de beton pe care le țineai în mână. Oricum. Pentru a nu argumenta despre meritele acestui lucru. Și, bineînțeles, se face recurs, așa că până la urmă nu știu ce se va întâmpla. Bănuiesc că o sumă mare de bani va schimba mâinile, o sumă de bani care este astronomică pentru noi, simplii muritori, dar probabil pentru aceste companii este o mică schimbare. Așa că nu ar trebui să ne parăm prea rău pentru ei. Deci brevete. Am menționat ultima dată că acesta a fost contractul social în care explici exact cum să faci ceva în schimbul unui monopol limitat care durează un anumit număr de ani. Și regulile se schimbă ușor odată cu trecerea timpului. Apropo, ar trebui să explici cum să o faci. Și în special, dacă cunoașteți un mod bun de a face acest lucru și în brevetul dvs. descrieți doar un mod prost de a face acest lucru, acesta ar putea fi un motiv mai târziu pentru invalidarea unui brevet. Și asta se numește cel mai bun mod. Deci, există foarte multă terminologie. Și în litigii apar lucruri standard. Unul dintre ele este cel mai bun mod. Deci, într-un brevet de viziune artificială pentru o aliniere a roților, astfel încât să aibă camere și LED-uri și determină axa de rotație a volanului și axa de direcție pe care se rotește atunci când rotiți volanul. Iar brevetul despre care sa pretins că a fost încălcat nu a dezvăluit cel mai bun mod. A dezvăluit metoda pe care o vedem implementată de fapt. Vă oferă răspunsul corect dacă aveți măsurători perfecte. Dar cu măsurători realiste, ar avea o eroare de un grade sau două, iar asta nu este suficient de bun. Dacă ai o mașină ca un BMW, ei specifică acele unghiuri la 0,1 grade. Oricum. Deci au avut o problemă acolo pentru că nu au dezvăluit cel mai bun mod. Brevete de utilitate. Și am vorbit despre structura acestora. Voi vorbi doar pe scurt despre unele dintre celelalte. Deci drepturi de autor. Puteți proteja expresia artistică folosind drepturile de autor. Deci, dacă scrii o carte, există drepturi de autor asupra ei. Dacă înregistrați o melodie, există drepturi de autor asupra acesteia. Dacă coregrafiezi un balet, există drepturi de autor asupra acestuia. Și există și excepții. Deci, de exemplu, dacă vreau să vorbesc despre un subiect, am voie să prezint în clasă o porțiune din acel material fără a încălca drepturile de autor, fără a fi nevoit să-l întreb pe autor, cât de mult vrei de la mine să folosesc produsul tău? Există și excepții în care utilizați extrase. Deci, de exemplu, dacă scrieți un articol de știri sau spuneți că aveți un blog despre un film și există o anumită parte a filmului despre care doriți să vorbiți, în anumite circumstanțe puteți decupla asta și foloseste-l. Și, desigur, vă puteți imagina, este foarte distractiv pe care avocații se distrează cu asta pentru că multă muzică este extrasă din altă muzică și este pusă laolaltă și este legal sau este încălcarea drepturilor de autor? Drepturile de autor erau în principiu pe toată durata de viață a autorului. Dacă scrii o carte, ar trebui să beneficiezi până la un anumit punct. Când nu ești prin preajmă, atunci nu beneficiezi. Ei bine, desigur, moștenitorii autorilor celebri nu le-a plăcut asta, așa că s-a schimbat. Și acum avem sistemul Sonny Bono de drepturi de autor. Practic, el a fost persoana care a convins Congresul să schimbe legile, iar acum este viața autorului plus 75 de ani. Și l-au actualizat periodic. Deci, practic, este viața de autor plus infinit, pentru că de fiecare dată când ne apropiem de limită, ei spun, oh, ei bine, să facem upgrade pe acești bieți moștenitori. Ei nu pot trăi fără redevențele din asta. Scuză-mă dacă sunt sarcastic. Deci asta este dreptul de autor. Și apropo, asta a fost foarte important pentru o vreme, și încă mai este, în software. Pentru că din nou, regula era că nu poți breveta matematica sau o idee, o idee abstractă. Și astfel, instanțele au considerat de obicei că asta sunt programele. Sunt idei. Sunt lucruri abstracte. Nu sunt... nu le poți ține și cântări. Astfel, modul în care oamenii s-au protejat a fost să-și trimită programele la biroul de drepturi de autor și să le înregistreze acolo. Și vă puteți imagina că, să spunem că aveți un sistem de operare precum sistemul de operare IBM 360 și că trimiteți cele 750 de milioane de linii de cod către biroul de copyright. A fost un eveniment destul de interesant. Și cu siguranță, dacă cineva face o copie exactă a programului dvs., atunci îl puteți da în judecată în temeiul acestei legi. Desigur, cu toate acestea, există oameni care lucrează pentru a ocoli aceste legi. Și astfel, în cazul drepturilor de autor, a existat această noțiune de cameră curată. Deci, ceea ce ați face este că ați avea o grămadă de oameni care au înțeles bine programele să analizeze ce face programul altcuiva, un fel de inginerie inversă. Dar nu aveau voie să o arate unui alt grup de oameni. Au putut doar să le spună ce face. Și apoi acest alt grup de oameni ar scrie codul. Și se presupune că, pentru că nu au văzut codul original, nu a existat o încălcare a drepturilor de autor. Nu sunt sigur că asta-- și nu este total nerezonabil în sensul că, dacă te uiți la codul linie cu linie, este probabil să fie total diferit. Vor folosi diferite nume de variabile și chestii. Apoi mai este marca comercială. Deci, marca comercială este mult mai restrânsă. Doar că , dacă vrei să-ți suni compania Dunkin' Donuts, poți marca asta. Dar trebuie să fie unic în domeniu și nu trebuie să fie... există o grămadă de reguli. Dar, practic, nu poți folosi un cuvânt obișnuit, așa cum nu poți numi compania ta Spațiu de timp, deoarece acestea sunt cuvinte comune. Și astfel, multe nume de companii sunt versiuni ușor scrise greșit ale cuvintelor comune. Un alt lucru este că marca comercială poate include anumite forme, anumite marcaje, astfel încât să puteți distorsiona anumite litere și culori. Deci Dunkin' Donuts are două culori pe care le-au protejat prin drepturi de autor și sunt mândru să spun că am pălării care au ambele culori. Sunt foarte utile în sezonul de vânătoare, care este aproximativ ceea ce se întâmplă chiar acum acolo unde locuiesc. Deci, puteți folosi culoarea pentru a vă proteja. Ele trebuie să fie unice în domeniu. Deci, este posibil să aveți o marcă înregistrată pe un nume în industria cauciucului și altcineva o are în industria semiconductoarelor. Ele nu intră în conflict. Și a existat un caz celebru în care... din nou, Apple... Apple i-a dat în judecată pe Beatles. De ce? Ei bine, pentru că atunci când au început Beatles, și-au format propria companie numită Apple. Poate că nu știu asta. Dar, în orice caz, Apple i-a dat în judecată. Și au pierdut pentru că nu există confuzie între client, client. Sunt în două domenii total diferite. Unul este muzica, iar celălalt este computerele. Și, desigur, Apple a susținut, o, bine, dar distribuim muzică, deci este același lucru. Pai, indiferent. Oricum. Apoi, ultimul lucru este secretul comercial, care nu este deloc protecție. Tu ascunzi doar ceea ce faci. Nu spui nimănui exact cum faci asta. Și un exemplu clasic în acest sens este Coca-Cola. Există un seif în Atlanta, Georgia, care are formula ingredientelor din Coca-Cola. Și se presupune că foarte puțini oameni știu ce este acolo. Și pericolul, desigur, partea bună este că este nelimitat. Nu există o dată de expirare a brevetelor. Și partea proastă este că, dacă iese vreodată, nu există nicio soluție. Iata. Toată lumea știe acum ce să amestece pentru a face Coca-Cola. Deci este un lucru riscant, dar cu siguranță este mult mai ieftin decât să urmărești unele dintre celelalte căi. Nu trebuie să plătiți avocați pentru asta. Și există un anumit recurs legal. Dacă cineva semnează un acord de confidențialitate atunci când se alătură companiei tale și apoi pleacă cu formula pentru Coca-Cola și îi spune lui Pepsi Cola cum să facă, atunci îl poți da în judecată. Dar pisica a ieșit din sac. Nu este atât de ușor să-ți revii după o astfel de pierdere. Doar o scurtă prezentare generală a ceea ce se numește proprietate intelectuală. Și Richard Stallman s- ar plânge cu siguranță că folosesc acea terminologie pentru că el nu crede că ideile ar trebui tratate ca proprietate, la fel cum unii oameni nu cred că companiile ar trebui tratate ca persoane în condițiile legii. Dar aici ești. Înapoi la brevetul special. Deci, acest brevet este un nivel foarte scăzut. Am vrut să încep cu ceva foarte simplu, găsind marginile foarte precis. Găsirea marginilor foarte precis. Deci unde mergem cu asta? Ei bine, ideea este că odată ce am găsit margini și descriem imagini folosind margini, putem face lucruri mai elaborate, cum ar fi recunoașterea și determinarea poziției și determinarea atitudinii unui obiect. Și cea mai mare parte a ceea ce vom face după ce vom termina cu acest brevet este în 2D, unde-- lumea, desigur, este 3D, dar există o mulțime de cazuri în care viziunea artificială 2D are un succes incredibil. Și un lucru care este important de subliniat este că trebuie să fie incredibil de precis. Dacă treaba ta funcționează 70% din timp, uită-l. Trebuie să funcționeze 99,999% din timp. Așadar, aceste metode sunt foarte atent gândite și adaptate pentru a avea performanțe extrem de bune. Și ceea ce vom găsi este că în lumea 2D, acest lucru este posibil. Este puțin mai greu odată ce ajungi la 3D. Deci, odată ce am făcut poziția și atitudinea în 2D, vom trece la 3D, ceea ce este o problemă mai interesantă. Dar să rezolvăm câteva dintre elementele de bază. Așa că voi revizui rapid ce a făcut acest brevet. Și așa vom începe-- deci asta este-- și prima idee a fost să ne uităm la gradientul de luminozitate și deci doar o poveste rapidă despre asta. Deci aici avem luminozitatea în funcție de x. Și există un punct în care curbura devine 0 și își schimbă semnul, iar asta se numește punct de inflexiune. Și asta căutăm. Deci, marginea este de fapt întinsă pe mai mulți pixeli, dar încercăm să identificăm foarte precis un anumit punct de pe margine. Apoi ne-am uitat la derivată și acolo ne uităm la un vârf - căutăm un vârf. Și unele metode folosesc derivata a doua și caută încrucișarea 0. Dar, important, aceasta este în direcția gradientului. Deci, aceasta este, desigur, o secțiune transversală 1D și avem de-a face cu imagini, deci cum luăm secțiunea transversală? Ei bine, ne interesează doar direcția care este perpendiculară pe margine și astfel aceste grafice și aceste idei corespund cu asta. Apoi am vorbit puțin despre lucruri care uneori sunt numite șabloane și uneori numite molecule de calcul. Și ceea ce încercăm să facem este că, în lumea discretă, încercăm să estimăm derivatele. Și așa, desigur, există unele evidente. Deci, există o modalitate de a obține o aproximare pentru e sub x. Și iată încă una. Și acestea sunt toate unele dintre cele pe care le-am uitat deja. Deci, există o mulțime de moduri de a estima derivatele. Și de unde știm pe care să o alegem? Ei bine, există compromisuri. Și am văzut că o modalitate de a progresa este să folosim extinderea seriei Taylor pentru a vedea care este termenul de eroare de ordinul cel mai mic. Pentru că cu cât putem împinge mai sus , dacă este un termen de eroare de ordinul al treilea , este mai bine decât dacă ar fi un termen de eroare de ordinul doi . Și dacă două metode au aceeași ordine a termenului de eroare, atunci ne uităm la coeficient. Și dacă este mai mic... așa cum acești doi au același termen de eroare inferior. Și, de asemenea, ceea ce a fost foarte important a fost, unde încercăm să estimăm derivata? Și am decis că obținem cele mai bune rezultate în acele puncte specifice. Acum, unele dintre aceste puncte sunt compensate cu o jumătate de pixel din grila de pixeli și de aceea oamenii nu le folosesc. Dar asta e o prostie, pentru că ce este în neregulă în a avea unele cantități pe grila de pixeli, imaginea și unele cantități pe grilă care sunt compensate cu jumătate? Atâta timp cât știți că este compensat cu jumătate, puteți traduce orice rezultat de pe grila respectivă într-un rezultat de pe cealaltă grilă. De asemenea, le putem analiza în domeniul transformării Fourier în ceea ce privește modul în care acestea afectează conținutul de frecvență mai mare. Și nu vom face asta chiar acum, dar acesta este al doilea set de metode pe care îl putem folosi pentru a decide care dintre acestea este mai bună. Acum, aceste estimatoare derivate pot deveni destul de complicate dacă căutați o precizie ridicată. Deci, de exemplu, în analiza semnalelor electrice musculare, există destul de puțin zgomot și există destul de multă distorsiune a semnalului pe măsură ce acesta progresează prin țesut. Și atunci când oamenii încearcă să estimeze prima derivată, într-un caz, o lucrare pe care am văzut-o folosește o aproximare de 39 de grade. Așa că folosesc un model ca acesta, cu o lungime de 39 de elemente și simt că astfel pot controla compromisul dintre suprimarea zgomotului și obținerea de rezultate foarte precise. Așa că folosim o comandă foarte mică, parțial pentru că este mai ușor și parțial pentru că un alt compromis este că dacă le faci prea lungi, atunci încep să aibă caracteristici diferite care interacționează între ele. Deci aici încercăm să detectăm o margine. Acum, dacă utilizați un operator de margine care are 100 de pixeli lungime și există o altă margine în acei 100 de pixeli, va interfera cu rezultatele. Așa că încercăm să facem compromisuri. Pe de o parte, obținem rezultate mai bune cu un suport mai mare, o suprimare mai bună a zgomotului. Dar, în același timp, ne confruntăm mai mult cu problema ce se întâmplă când două margini se apropie una de cealaltă? Și în special, iată o imagine a colțului unui cub. Și aici, am putea avea un sprijin destul de mare, dar când ne întoarcem aici, marginile se apropie destul de mult. Și apoi un suport mare înseamnă că combinați informații despre diferite margini și nu veți obține rezultatele pe care le doriți. Asta e prima derivată. Și dacă modelul nostru este că găsim vârful în direcția gradientului primei derivate, atunci asta este tot ce ne trebuie. Dar, pentru anumite scopuri, am putea dori derivate de ordin superior și vom vedea câteva exemple în acest sens mai târziu. Deci, acum, o modalitate de a gândi la asta este că derivata a doua este doar derivata întâi aplicată de două ori. Și astfel putem rula aproximarea noastră numerică a doua oară. Și asta corespunde convoluției. Și rezultatul este... Astfel încât să putem calcula cu ușurință derivate de ordinul doi în acest fel. Lasă-mă să mă asigur că înțelegem ce este asta. Deci, aceste molecule de calcul, modul în care funcționează este că le puneți pe grila de imagini și apoi înmulțiți nivelurile de gri cu orice greutate este în acest moment. Deci înmulțiți asta cu 1. Puneți-l într-un acumulator. Luați-o pe aceea, înmulțiți-o cu minus 2. Adăugați-o la acumulator. Luați acela, înmulțit cu 1, adăugați-l la acumulator. Și apoi, în sfârșit, luați rezultatul și împărțiți la epsilon pătrat. Ei bine, adesea nu ne pasă de factorii constanți, așa că s-ar putea să renunțăm la asta. Dar dacă ne gândim de fapt la derivate, ar trebui să facem asta. Deci asta e un lucru. Și chiar vorbim despre convoluție. Așa că aplicăm acest lucru în fiecare loc din imagine -- glisați-l de-a lungul, dacă doriți -- pentru a produce o nouă imagine. Rezultă la o grămadă de puncte. Acum, de unde știm asta dacă vrem o verificare a stării de spirit? Ei bine, o modalitate de a face asta... a verifica acest lucru este să o încerci pe o funcție unde este răspunsul. Așa că știm că, în acest caz, răspunsul ar trebui să fie 2. Așa că să aplicăm asta. Ei bine, trebuie să decidem unde îl aplicăm, așa că să presupunem că acesta este 0, acesta este 1, acesta este minus 1. Așa că o reducem. Și deci ce obținem? Ei bine, în acest caz, epsilonul este evident 1, deci este de 1 ori-- și apoi de 1 ori minus 1. Ei bine, acesta este 2. Nu, îmi pare rău. De 1 ori... da. 1 ori minus 1 pătrat este 1. Atunci avem minus de 2 ori x pătrat cu 0 și plus 1 ori 1 pătrat. Și asta e 2. Deci se pare că funcționează. Deci, există diferite moduri de a proiecta aceste molecule de calcul. Cu siguranță, convoluția este una. Și apoi ai vrea să le verifici. Deci, un alt lucru pe care ați dori să îl verificați este, ei bine, ce se întâmplă dacă f din x este x? Ei bine, atunci vom obține de 1 ori minus 1, 0, 1 ori 1. Răspunsul este 0, care este ceea ce ar trebui să fie. Ce se întâmplă dacă f din x este 1? Deci, doriți să verificați polinoamele de ordin scăzut până la ordinea derivatei pe care încercați să o obțineți. Deci, dacă f din x este 1, atunci desigur că obținem 1 minus 2 plus 1 este 0, care este din nou ceea ce ar trebui să fie. A doua derivată este 0. Deci, una dintre constrângerile acestor operatori, dacă ar trebui să fie operatori derivați, este că ponderile se adună până la 0. Asta are sens. Deci, aceasta este doar o dimensiune, ca să spunem așa. Dar d2, dx, dy? Putem face doar asta. Deci, pentru că aceasta este derivata x și aceasta este derivata y și compoziția diferențierii corespunde convoluției, așa că ne strecuram câteva lucruri aici. Una dintre ele este că suntem obișnuiți să ne ocupăm de sistemele invariante cu deplasare liniară. Dar se dovedește că, desigur, operațiile cu derivate sunt invariante de deplasare liniară, în sensul că dacă iau derivata unei funcții și apoi iau derivata aceleiași funcții deplasată, ceea ce voi da este derivata deplasată. Dacă iau derivata sumei a două funcții, voi obține suma derivatelor. Deci, acesta este un lucru foarte important de exploatat, este că luarea de derivate poate fi considerată convoluție. Și astfel se aplică toate lucrurile bune pe care le știm despre asta. Deci, să vedem ce ne oferă asta. Acum, ceea ce vom face practic este să luăm una dintre acestea și să o întoarcem și să o suprapunem pe cealaltă. Și dacă îl suprapun aici, desigur, primesc 0 pentru că înmulțesc - presupunem că fundalul este 0. Presupunem că singurele valori pe care le arătăm sunt valorile non-0. Dar dacă o mut aici? Ei bine, atunci există o suprapunere. Și apoi îl mut acolo. Există o suprapunere. Și o pot muta aici jos. Există o suprapunere. Și îl mut aici și primesc... așa că mă aștept să obțin patru valori din această convoluție. Și așa voi obține așa ceva. Și așadar, șablonul meu 2 cu 2 pentru estimarea derivatei amestecului este doar atât și are sens perfect. Un lucru la care trebuie să fiți atenți este că, în convoluție, răsturnăm una dintre cele două funcții și apoi o glisăm și o încercăm în toate locurile posibile. Aici, uneori, folosim șabloane de calcul care nu sunt răsturnate, așa că s-ar putea să ajungem la o inversare a semnelor. Dar vrei să-- poți oricând să verifici un polinom simplu pentru a vedea dacă funcționează corect. Apropo, acesta aici, putem avea o vedere în diagonală. Este un pic ca, dacă proiectez asta în jos, deci există un plus 1 departe pe această parte. Există un plus 1 departe pe acea parte. Și apoi există un minus 2. Sunt două minus 1 în mijloc. Și asta arată îngrozitor ca o derivată a doua, ca cea pe care am avut-o aici, doar rotită cu 45 de grade. Și, desigur, această derivată parțială mixtă este într-un sistem de coordonate rotit , doar d2, dx pătrat. Deci, dacă iau... deci acesta este sistemul meu de coordonate original. Și apoi mă uit la lumea în acest sistem de coordonate. Atunci derivata a doua, ex prim, x prim, este aceeași cu derivata mixtă. Așa că ne gândim la exy ca la un animal foarte diferit de exx și eyy, dar nu este. Mai puțin din asta înainte de a continua. Și am menționat deja laplacianul. Să aducem asta din nou aici. Deci am avut aici un operator derivat al doilea. Și astfel, în cazul laplacianului, adăugăm două dintre ele în direcții ortogonale diferite . Deci am putea face... deci asta e doar chestia asta plus același lucru rotit la 90 de grade. Și deci acesta este un mod de a scrie Laplacianul. Dar asta se dovedește a fi și o bună aproximare față de Laplacian. De unde știu? Ei bine, există o mulțime de moduri de a verifica. Unul este seria Taylor. O altă modalitate este să o aplicați la funcțiile de testare, să vedeți dacă obține rezultatul corect. Și un alt mod este transformarea Fourier. Dar acelea-- și veți vedea că acesta este într-adevăr același model rotit cu 45 de grade, dar acum separarea este rădăcină pătrată de 2 ori mai mare. Așa că trebuie să schimb greutatea. Acum, am menționat că Laplacianul este operatorul diferențial liniar de ordinul cel mai mic care este simetric rotațional. Ei bine, niciuna dintre acestea nu pare deosebit de simetrică rotațional. Deci putem face unul care să fie un pic mai mult... pe o grilă pătrată, nu poți, dar putem face mai bine decât acestea. Și o modalitate este să le combinați, să luați suma acestor două. Așa că am luat-- nu știu-- de 4 ori acesta plus de 1 ori acesta și primesc acest operator. Și este puțin mai fin în ceea ce privește simetria rotațională. Colțul e pe 0, dar nici nu au aceeași greutate ca și diagonala -- cele de sus și de jos pentru că sunt mai departe de centru. Deci, de unde știu că este o combinație bună? Cum au ajuns oamenii la asta? Ei bine, din nou, te uiți la seria Taylor și se dovedește că termenul de eroare de ordinul cel mai mic pentru acesta este cu unul mai mare decât termenul de eroare de ordinul cel mai mic pentru oricare dintre aceste două. Deci e mai bine. Mai multă muncă. Dacă aplicați acest lucru imaginii, nu lucrați de două ori mai mult, dar lucrați mai mult pentru că trebuie să țineți cont de toate cele de colț, ceea ce acest operator nu le face. Sau invers, cele de sus și de jos și cele de vest și de est de acolo. Și dacă am vrea, am putea face o analiză mai detaliată a termenilor de eroare, dar asta este destul de plictisitor, așa că nu vom face asta. Oricum. Deci, acestea sunt toate moleculele de calcul de care vom avea nevoie. Și după cum puteți vedea, sunt opțiuni. Sunt versiuni diferite care încearcă să calculeze același lucru. Desigur, pe grila hexagonală, aceasta arată mult mai bine pentru că putem face așa ceva. Care arată frumos și simetric rotațional. Da? Publicul: Care este cel din mijlocul... BERTHOLD HORN: Oh. Minus 20. Așa că se poate gândi cineva cum ai putea determina că ar trebui să fie minus 20 fără să faci de fapt o mulțime de algebră păroasă? PUBLIC: Trebuie să însumeze la 0. BERTHOLD HORN: Trebuie să însumeze la 0, corect. De ce este asta? Ei bine, pentru că atunci când aplicați acest operator la f de x este egal cu 1, [INAUDIBLE] Laplacian este 0. Și deci, dacă aplicați acest lucru la funcția care este 1 peste tot, evident că veți adăuga toate greutățile. Și deci trebuie să adauge... de unde știu că este 1/6? Ei bine, o modalitate de a-l obține este să aplici acest lucru la o funcție de testare, cum ar fi f din x este x pătrat plus y pătrat. Ei bine, știu că răspunsul este 4. Și apoi mergi de acolo. Sau o pot obține din acest argument, care este argumentul ponderat că iau de 4 ori 1 dintre acestea și 1 dintre acestea. Și acesta are un factor de 2 acolo. Așa că ajungi cu... nu știu... un 1/2 plus un 1/4. Nu. Oricum, iese la 6 epsilon pătrat. Deci este enervant că nu avem pixeli hexagonali. Apropo, există unele situații în care oamenii sunt foarte preocupați de eficiență, cum ar fi încercarea de a imagini gaura neagră din centrul galaxiei noastre folosind frecvențe radio. Fiecare antenă pe care o instalați costă o grămadă de bani, așa că doriți să vă asigurați că această grilă de antene este cea mai eficientă modalitate de eșantionare a spațiului de transformare Fourier în acest caz. Și astfel se dovedește că acest mod de eșantionare este cu 4 peste pi la fel de eficient ca acel mod de eșantionare. Deci sunt locuri unde oamenii fac asta. Și, de exemplu, pe scurt, aproape toate jetoanele sunt așezate pe un model dreptunghiular, deoarece acest lucru este foarte ușor de făcut și de verificat. Dar dacă se rezumă la densitatea de ambalare și, în special, dacă aveți ceva care are un model care se repetă foarte simplu, atunci uneori există un avantaj. Deci au existat cipuri de memorie pentru o vreme care au folosit aspectul hexagonal, dar de atunci au dispărut pentru că acum stivuim lucrurile pe verticală. În acest moment, nu pare să fie o cale eficientă de a merge. Oh. Deci, în timp ce suntem aici, ar trebui să menționez -- Am menționat deja că Laplacianul este operatorul liniar de ordinul cel mai mic -- operator diferențial care este simetric rotațional. Aici este unul neliniar. Deci, acest operator este simetric rotațional. Ce vreau să spun prin asta? Vreau să spun că dacă rotiți sistemul de coordonate, de exemplu aici, și calculați e sub x, liniuță și traseul pătrat și adăugați e sub y liniuță și ruta pătrată, veți obține același răspuns ca și cum ați lua-- deci nu depinde de orientarea axei x. Și deci acesta este de ordin inferior, desigur, în Laplacian pentru că este de ordinul întâi, dar nu este liniar. Cu toate acestea, întâlnim destul de mult acest lucru pentru că, amintiți-vă, Roberts a folosit aceste șabloane, pe care le puteți considera doar moduri de a calcula derivatele în sistemul de coordonate rotit. Și apoi a luat rădăcina pătrată a sumei pătratelor și acesta a fost detectorul lui de margine. Și deci este echivalent cu a face asta. Și pentru scopurile lui, asta a necesitat mai puțin calcul. Și știa deja în 1965 că ceea ce vrei să faci este să te asiguri că fostul tău și ei se referă la același punct din spațiul pixelilor, o lecție care de atunci a fost uitată, cu excepția cazului. Deci asta era partea din față. Și acest lucru trebuie să fie foarte eficient pentru că rulează pe fiecare pixel. Și se pretează, de asemenea, la hardware cu destinații speciale, desigur. Deci, următorul pas a fost metoda noastră de detectare a marginilor subpixelilor. Așa că am folosit ceea ce se numește suprimare non-maximă. Deci aceasta este o terminologie ciudată. De ce nu spuneți doar găsirea maximului? Dar aici este. Deci, de unde a venit acea terminologie? Ei bine, ideea este că aplicăm acest operator de margine peste tot și, în majoritatea locurilor, are un răspuns slab, dar pe margini se ridică cu adevărat. Și astfel, o abordare ar fi, să facem doar un prag. Deci, dacă primim un răspuns puternic de la una dintre aceste molecule aici, atunci suntem pe margine, iar dacă nu, atunci nu suntem. Ei bine, asta implică luarea unei decizii timpurii , pentru că odată ce ai luat acea decizie, asta este tot. Veți arunca acel punct de margine și nu veți mai face niciun calcul cu el, deoarece ați decis că este sub prag, sau invers, l- ați ales ca fiind un prag. Deci, în brevet, Bill Silver face o mare tam-tam cu privire la evitarea pragurilor, dacă este posibil, și a nu lua decizii prea devreme. Aceasta este principala lui motivație pentru a nu folosi praguri. Așa că unele lucrări anterioare de detectare a marginilor au funcționat așa. Aplicați un operator care are un răspuns puternic pe margine și apoi delimitați. Și acum primești răspunsuri. Dar nu sunt doar pe margine, deoarece am văzut că marginea este o tranziție lentă și lină. Deci vor exista puncte învecinate care au, de asemenea, un răspuns puternic. În plus, cu zgomot, vor exista puncte în fundal în care zgomotul pur și simplu se adună, iar acum pare să existe un avantaj acolo. Deci nu este de dorit. Deci, metodele anterioare au funcționat prin pragând și căutând lucruri care au avut un răspuns puternic de vârf. Și aici, în schimb, ceea ce facem este că vom elimina totul, cu excepția maximului. Dar maxim in ce sens? Ei bine, din nou, doar în direcția gradientului. Și aici ne ocupăm de faptul nefericit că vom cuantifica direcțiile gradientului. Deci vom avea doar direcții ale busolei -- est, nord-est, nord, nord -vest, vest și cetera, opt dintre ele. Și să presupunem că aceasta este o direcție cuantificată a gradientului. Apoi parcurgem imaginea și luăm în considerare acele trei valori. Iar suprimarea non-maximă spune că vom accepta acest lucru ca punct de margine potențial numai dacă acest lucru este adevărat. Pentru că dacă g minus a fost mai mare decât g0, atunci acesta va fi punctul de margine. Și amintiți-vă că marginea rulează în unghi drept față de acest lot, deci marginea de bază reală este așa. Și ne uităm în direcția gradientului, iar direcția gradientului este, desigur, perpendiculară pe margine. Și apoi am vorbit despre cum există această asimetrie, pentru că ocazional vom descoperi că g0 este egal cu g minus sau g0 este egal cu g plus și nu vrem să le declarăm pe ambele puncte de margine. Vrem să avem o departajare, astfel încât doar unul dintre ei să fie ales. Și care? Ei bine, este arbitrar. Ai fi putut foarte ușor să faci asta, atâta timp cât există o modalitate de a rupe acea cravată. Și apoi am spus că acum putem reprezenta profilul acestui răspuns de margine de-a lungul direcției gradientului și obținem o imagine ca aceasta. Și apoi îi putem potrivi o curbă. De exemplu, putem potrivi parabola la ea și găsim vârful parabolei. Și aceasta este poziția noastră de margine subpixel. Deci mai multe puncte acolo. Una dintre ele este, de ce să se potrivească o parabolă? Ei bine, este arbitrar. Forma acelei curbe depinde de optică, senzorul de imagine, lucrul la care te uiți. Dar primim doar trei mostre din el. Deci, tratând-o ca o curbă netedă, cel mai mic polinom care va funcționa este de ordinul doi, așa că o opțiune pe care o avem este să folosim asta. Ca să nu spun că aceasta este singura opțiune sau cea mai bună, dar este o presupunere destul de bună. Următorul lucru este, ce este s? Ei bine, s este deplasarea de la g0. Deci aici, s0 ar fi acel punct. Și apoi dacă s, să spunem... ei bine, dacă ajungem aici, atunci s este 1/2. Deci, dacă ajungem aici, atunci s este 1/2. Suntem la jumătatea acestui punct. Și, evident, nu are sens ca s să fie mai mare decât 1/2 pentru că atunci acesta ar fi fost maximul. Și la fel și în cealaltă direcție. Observați că s nu este în unități de pixeli deoarece, în acest caz de diagonală, s este egal cu 1 este acea distanță, care este rădăcina pătrată de 2 ori distanța dintre pixeli. În timp ce dacă se întâmplă să obținem direcția cuantificată aici, atunci s ar fi distanța dintre pixeli. Deci, acesta este ceva de reținut, că totul depinde de direcția actuală a gradientului. Evitați pragurile. Da. Și așa că acum avem un potențial punct de margine. Și observă că nu facem niciun prag. Așa că vom obține aceste puncte pe tot parcursul spectacolului, nu doar pe margine. Dar nu am făcut nici un prag. Așadar, aici, marchem acest loc pe baza unui traseu pătrat de 2 s delta, unde delta este distanța dintre pixeli, deci pentru a fi precis. Deci acolo credem că este marginea. Deci am desenat marginea aici, dar de fapt, acum, cu interpolare subpixeli, aflăm că este acolo. Deci, dacă ar fi doar să mergem cu un vârf în acea curbă pe grila discretă, atunci am descoperi că marginea trece prin acel punct, dar acum știm că este acolo. Dar pentru a ajunge acolo, am cuantificat direcția marginii. Și astfel putem îmbunătăți ușor lucrurile. Deci presupun că ar trebui să desenez asta din nou și să-l fac mai puțin dezordonat. Deci, aici este direcția noastră cuantificată și iată un punct pe care l-am descoperit că este un punct de margine. Și apoi să presupunem că direcția actuală a gradientului este ușor diferită. Nu poate fi foarte diferit pentru că atunci am fi ales o altă direcție a busolei. Deci acum aceasta este direcția gradientului, deci marginea trebuie să fie perpendiculară pe ea. Deci pot desena o perpendiculară pe linia verde care trece prin acest punct. Deci marginea este de fapt așa. Și când raportez un punct de margine potențial, pot raporta orice punct de pe acea linie. Și pe care o aleg? Ei bine, cel mai simplu este să-l aleg pe cel pe care l-am calculat. Cu toate acestea, pot îmbunătăți ușor rezultatul alegându-l pe acesta. De ce? Ei bine, este mai aproape de origine. Este mai aproape de vârful real și, prin urmare, este mai puțin probabil să fie supus zgomotului. Nu este o îmbunătățire uriașă, dar au decis că acesta a fost un pas suplimentar care merită. De asemenea, ajută într-un pas la care vom ajunge într-o secundă în care înlănțuim marginile. Deci asta e ideea. Deci proiectăm din direcția gradientului cuantificat în jos pe direcția gradientului reală acolo. Aceasta este poziția avionului [INAUDIBIL].. Ce urmează? Oh. Așa că ajungem la compensarea părtinirii. Așa că am spus că am ales oarecum arbitrar parabola. Și apoi, după cum știți, în brevet există o a doua metodă care folosește o formă triunghiulară pe acoperiș . Folosește asta. Se potrivește cu asta și găsește vârful acestuia, iar asta vă oferă o altă poziție posibilă pentru locul în care este cu adevărat marginea. Și am spus că, în anumite circumstanțe, una poate fi mai precisă-- să vă ofere un răspuns mai precis decât celălalt. Dar ceea ce vă puteți imagina că faceți este, de fapt, să mutați în mod experimental marginea cu incremente foarte mici, incremente mici de subpixeli și să vedeți ce vă oferă metoda dvs. și apoi să trasați asta în raport cu ceea ce ar fi trebuit să fie. Deci, acesta este un experiment în care aveți o cameră care privește o margine, apoi mutați marginea sau camera cu o cantitate mică în trepte și măsurați. Și acum, în mod ideal, metoda ta magică pentru găsirea vârfurilor ar trebui să-ți ofere întotdeauna valoarea maximă corectă. Dar s-ar putea să nu. Deci, în mod ideal, veți obține o linie de 45 de grade. Și din nou, ne interesează doar intervalul de la minus 1/2 la plus 1/2. Și toate aceste metode ar trebui să vă ofere răspunsul corect în trei cazuri, indiferent ce faceți. Dacă vârful dvs. este de fapt la g0, atunci ar trebui să returneze g0 acea poziție-- s este egală cu 0. Și, în mod similar, dacă ați fost la jumătatea distanței dintre pixeli, ar trebui să vă ofere -- și ambele metode fac, ele satisfac această cerință. Dar ce se întâmplă între ele? Ei bine, așa cum am menționat, asta depinde exact de ce formă are marginea. Și s-ar putea să ajungi cu așa ceva, sau poate cu așa ceva. Deci, de obicei, abaterile din diagonală vor fi destul de mici și, de obicei, vor fi destul de netede. Și astfel ați putea să păstrați un tabel de căutare pentru asta sau ceva pentru a compensa. Dar nu chiar merită. Este din nou o corecție relativ mică. Dar, coborând la... scopul este o precizie de 1/40 dintr-un pixel. Deci, dacă te gândești bine, este destul de uimitor că poți face asta. Și o parte din ea este această corectare simplă a poziției și o parte din ea este aceasta. Și, deci, ceea ce se face este să aproximați orice formă este cu această funcție. Și astfel, de exemplu, pentru b este egal cu 0, obținem că primul este egal cu acesta. Deci asta e doar linia diagonală. Acesta este cazul ideal. Pentru b mai mare decât 0, atunci asta înseamnă că s prim este s ridicat la o putere mai mare decât 1. Și asta înseamnă că se va înclina în acest fel așa cum o face curba roșie. Și dacă b este mai mic decât 0, înseamnă că s prim este s ridicat la o putere care este puțin mai mică decât 1. Deci, aceasta este aproximarea rădăcinii pătrate. Deci aceasta este curba superioară înclinată, pe care o voi arăta în verde. Deci e verde. Iar celălalt este roșu. Deci ce rost are? Ideea este că aceasta este o mică corecție, așa că nu prea plătește să încerci să fii prea agitat. Dar vrei s-o faci. Și aceasta este o potrivire cu un singur parametru pentru tipul de curbă care-- B este singurul parametru. Și astfel încât să îl puteți calibra pe baza acestei metode, obțineți o valoare a lui b. L- ați putea calibra pe baza acestei metode, obțineți o valoare diferită a lui b. Apoi observați că, dacă se întâmplă să lucrăm est-vest, distanța dintre pixeli este mult mai mică decât dacă lucrăm în nord-est. Și astfel se dovedește că doriți o valoare diferită a lui b pentru acest caz decât pentru acel caz. Din fericire, există doar două cazuri. Ei sunt cei care sunt est-vest, nord-sud și apoi cei din mijloc. Dar puteți folosi o valoare diferită a lui b pentru cele două. Și tu, din nou, ai putea face ceva mai elaborat, dar din moment ce este o mică corecție, va afecta doar o mică fracțiune de pixel. De asemenea, nu vrei să fii prea deștept aici, deoarece această curbă se va schimba puțin odată cu circumstanțele. Dacă aparatul foto este puțin defocalizat, veți obține un rezultat ușor diferit. Dacă colțurile cutiei de carton la care te uiți sunt oarecum deteriorate, atunci vei obține un răspuns diferit la margine și așa mai departe. Deci nu vrei să fii prea inteligent. Acum, multe dintre acestea depind de tranziția efectivă a marginii. Și am desenat unul doar de mână și apoi am venit cu aceste metode pentru a afla unde este de fapt marginea. Dar, în mod realist, ce face ca aceste margini să fie neclare? Am spus deja că este un lucru bun că sunt neclare. Altfel, nu am putea face recuperarea subpixelilor. Am suferi de probleme uriașe de aliasing. Deci e bine că sunt neclare, dar de ce sunt neclare? Ei bine, un motiv este defocalizarea. Deci haideți să privim asta ca pe un caz special care este de interes din alte motive. Deci iată lentila noastră, iar obiectul este acolo sus. Și să presupunem că este o sursă de lumină punctuală. Și acesta este în planul de focalizare în care acea sursă de lumină îndepărtată, poate o stea, este imaginată ca un punct. Dar camera noastră are planul imaginii ușor dezactivat, așa că fotografia va fi ușor defocalizată. Deci cum am numit asta? Deci acesta este f, și cred că o numesc delta. Deci, când mă uit la imaginea acelei stele, nu mai este un impuls, un punct. Este un cerc. Deci luminozitate uniformă. Și dacă vreau să-l reprezint în funcție de x și y, ar arăta așa. Și nu știu, eu numesc asta o cutie de pastile. Bănuiesc că oamenii nu mai au cutii de pastile, dar este un cilindru de înălțime constantă. Și dacă vreau să o descriu matematic... deci ce este asta? Big R este raza micului pastile. Și împart la 1 peste pi R pătrat pentru că aceeași energie este depusă în acea zonă, indiferent cât de dezorientat sunt. Deci, dacă sunt concentrat, totul este concentrat la un moment dat. Dacă nu sunt focalizat, aceeași cantitate de lumină este răspândită într-un cerc din ce în ce mai mare. Și așa compensez asta prin împărțirea la aria cercului. Și atunci ce este asta? Deci aceasta este funcția pasului unitar. Deci, pentru R egal cu 0, acesta va fi u de o cantitate în minus. Deci asta va fi 0. Deci primesc 1 minus 0. Și deci acesta va fi doar 1. Și atunci când ies la rază, dacă trec de rază, dacă r mic este mai mare decât R mare, pasul funcția este 1, deoarece acesta va fi mai mare decât 0. Și astfel obțin 1 minus 1 este 0. Deci este doar un mod fantezist de a spune același lucru ca acea diagramă. Celălalt lucru de care am nevoie este ce este R mare? Cât de mare este? Ei bine, evident că va depinde de cât de departe sunt de concentrat. Deci, va depinde de delta și va depinde de dimensiunea lentilei. Ceva de genul. Sunt din nou triunghiuri similare. Oh, f, care este această distanță aici de la obiectiv la planul imaginii focalizate. Așadar, evident, pe măsură ce depărtez mai mult de focalizare, pe măsură ce mișc planul imaginii mai sus, această rază devine mai mare și luminozitatea devine mai mică, deoarece acum pun aceeași energie într-o zonă mai mare. Și deci aceasta se numește Funcția de răspândire punct, PSF, Funcție de răspândire punct pentru acest sistem atunci când nu este focalizat. Și acest lucru este folosit foarte mult pentru a înțelege efectul de a nu fi focalizat. Considerăm că este încețoșată. Și, desigur, ne putem gândi la asta în termenii transformării Fourier, în ceea ce privește eliminarea unora sau suprimarea conținutului de frecvență mai mare . Și conținutul cu frecvență mai mare este cel care face ca lucrurile să pară clare și, în cazul nostru, estompează marginea. Deci, să vedem care este efectul pe margine. Ei bine, practic, vom avea un răspuns pe care îl putem calcula geometric prin suprapunerea muchiei și cercului. Deci, să luăm cel mai simplu caz în care există negru pe o parte a marginii și alb pe cealaltă. Și acum avem un cerc cu o anumită rază. Și la ce ne uităm? Ei bine, ne uităm la această suprapunere. Acesta va fi ceea ce va controla cât de strălucitoare apar lucrurile. Și apoi vom muta acest lucru peste margine pentru a vedea cum variază răspunsul. Deci luăm acest disc și îl glisăm peste tot. Și evident, până nu se atinge, nu se întâmplă nimic. Nu există ieșire. Și, de asemenea, evident, odată ce ajungem aici, producția este constantă. Este 1. Nu se mai schimbă nimic. Deci, există o tranziție între x fiind minus R și x fiind plus R unde există o schimbare între 0 și 1. Și asta încercăm să calculăm. Ei bine, din păcate, nu este chiar atât de simplu. Deci putem scrie răspunsul prin inspecție, dar îl putem obține în acest fel. Probabil că există o formulă pentru un sector al unui cerc ca acesta, dar nu știu ce este, așa că hai să o facem folosind lucruri pe care le știm. Deci câteva lucruri pe care le știm. Știm să calculăm aria unui triunghi. Ei bine, probabil cunoașteți mai multe moduri de a calcula aria unui triunghi. Și știm, de asemenea, să calculăm aria unui sector al unui cerc. Așa că lasă-mă să desenez asta aici. Deci acesta este un sector al cercului. Acesta este triunghiul la care mă uit. Și este evident că cantitatea pe care o vreau este diferența. Este ceea ce a mai rămas când scad acel triunghi din acea zonă. Deci acesta este R și voi numi acest unghi theta. Și acest lucru de aici este evident R pătrat minus x pătrat. Deci x este poziția. x0 înseamnă că ești chiar deasupra marginii, că cercul este divizat în două de margine. Și atunci x poate deveni la fel de mare ca plus R înainte de a se satura sau minus R înainte de a se satura. Deci aria sectorului este 2R pătrat teta, acest sector aici. Și putem verifica. Când theta este 2 pi-- Presupun că-- oh, asta este-- theta poate ajunge doar până la pi. Deci am obține... oh, pi R pătrat? Ce zici să verificăm asta din nou. Deci, theta este 1/2 unghi al sectorului și deci poate deveni la fel de mare ca pi. Și dacă este egal cu pi, înseamnă că am acoperit tot cercul și ar trebui să obținem aria cercului, care este pi R pătrat. Deci obținem R pătrat theta. Și apoi trebuie să scădem din asta aria triunghiului, care este -- este 1/2 din baza ori înălțimea. Deci baza este de 2 ori această cantitate, deoarece această cantitate este doar acea secțiune. Deci asta e baza. Și atunci înălțimea este x. Și deci 1/2 bază ori înălțimea îmi dă asta. Iar theta este dat de această cantitate. Și așa am ajuns cu... detaliile nu sunt prea interesante aici. Nu mă aștept să- ți amintești asta. Dar putem să complotăm asta și să vedem ce tranziție ne oferă. Și mai mult, îl putem introduce apoi în acest algoritm al acestui model pentru a vedea cât de precis va determina poziția marginii. Și în special, putem reprezenta diagrama pe care tocmai am șters-o aici, care avea bara laterală s versus s. Cu alte cuvinte, dacă așa se formează marginea, dacă acesta este motivul pentru care marginea are acea tranziție lină, atunci acest lucru îmi va permite să calculez eroarea. Și eroarea ar trebui să fie destul de mică, dar este diferită de zero, iar dacă doriți o precizie ridicată, trebuie să țineți cont de aceasta. Deci, un alt mod de a privi acest lucru este reprezentarea diagramei. Deci de unde vine asta? Arată ca un cerc, cu excepția faptului că este eliptic, deoarece a fost mărit în înălțime cu 2. Ei bine, dacă vă gândiți bine , când mut această margine sau cercul, atunci adun sau scad o zonă - o zonă infinitezimală care are o înălțime egală cu această cantitate. Sau cu alte cuvinte, doar de două ori înălțimea cercului de acolo. Deci, de fapt, pentru un anumit scop, nu trebuie să fac toată matematica aia păroasă. Pot doar să mă uit la acea diagramă și să notez imediat că derivatul de luminozitate este asta. Și oh, are un vârf la 0. Ei bine, ne așteptăm la asta. În timp ce sunt aici, pot să mă uit la derivata a doua. Și așa arată. Și este x peste minus-- este doar derivatul acela, care este destul de ușor. Dar ce este E? Ei bine, este integrala acestui lucru. Și am făcut acea integrală într-un mod oarecum dureros. Dar probabil că este la fel de bine pentru că nu-mi amintesc care este integrala acesteia, și iată, cred. Deci ce putem face cu asta? Acum putem introduce acest lucru în algoritm și să spunem, dacă așa este... de ce marginea variază ușor, deoarece nu este focalizată, atunci aceasta este relația dintre poziția adevărată a marginii și cea pe care o calculez, să zicem, folosind argumentul parabolei. Și, prin urmare, pot compensa. Acum, desigur, într-o situație reală de imagistică, va exista mai mult decât defocalizarea lentilei, așa că probabil că nu merită să fii prea atent la acest lucru. Acum să presupunem că sunteți un contravenient al brevetului sau că încercați să încălcați acest tipar. Apoi, există o serie de căi de urmat. Practic, te uiți la componentele fiecărei revendicări și vezi dacă există una dintre componentele pe care poate le poți evita. Poate o poți face într-un mod diferit. Sau poate o poți face într-un mod mai bun. Dar doar argumentarea dacă ceva este mai bine sau nu nu ajută. Trebuie să fie diferit. Acum, sunt câteva lucruri aici care nu sunt atât de plăcute. Una dintre ele este această cuantificare a direcțiilor gradientului. Și motivul pentru care nu este atât de grozav este pentru că introduce stingherența că spațierea vine în două dimensiuni, spațiere între pixeli și rădăcină pătrată de 2 ori spațiere între pixeli. Și aceste efecte ale defocalizării, și cetera, sunt pe grila de pixeli? Sunt în unități de distanță între pixeli. Și acum îl eșantionăm în două moduri diferite, așa că ne așteptăm să obținem contribuții de eroare ușor diferite. Deci cum putem evita asta? Deci, iată câteva moduri de... deci ideea este că nu vrem direcții de gradient cuantificate. Și deci să presupunem că gradientul nostru este... acum, dacă urmăm metoda preferată din brevet... Din nou, observați că acea metodă nu apare în niciuna dintre revendicări, ceea ce este bun pentru că asta înseamnă că puteți ocoli cu ușurință brevet. Dar este metoda preferată care este prezentată în specificație. Apoi am cuantifica acest lucru și am lucra cu diagonala. Dar să spunem, ei bine, ce zici de asta? Ce zici dacă îmi dau seama ce... dacă aș ști care este valoarea acolo, știu care este valoarea aici. Ce zici de acest aranjament? Deci acesta ar putea fi G0, și acesta este G plus, și acesta este G minus. Atunci aș evita cuantificarea direcției gradientului. Și cum fac asta? Ei bine, știu doar valorile din grila reală a pixelilor și așa-- ta-da-- interpolez. Deci folosesc interpolarea pentru a trece de la valorile de pe grilă la valoarea de aici. Și pentru că interpolez de-a lungul acestei linii, pot folosi cu ușurință doar o interpolare liniară 1D. Deci cum funcționează? Ei bine, dacă am o funcție, atunci pot spune, ei bine, știu valoarea aici, știu valoarea acolo. Și să spunem că este o linie dreaptă între ele. Și apoi formula pentru asta este... poți să găsești asta singur. Dar îl poți verifica cu ușurință. În primul rând, este liniar în x. Și atunci la x este egal cu a, obținem doar acest termen. Și b minus a anulează b minus a. Și că x este egal cu b, acest termen dispare, așa că avem doar asta. Și din nou, b minus a din nou. Deci este ușor să faci asta în 1D. Și, desigur, puteți extinde asta la așa-numita interpolare biliniară în 2D, dar de fapt nici nu avem nevoie de asta aici. Deci atunci aproximăm valoarea aici prin interpolare. Și putem folosi metode mai sofisticate de interpolare. De exemplu, putem folosi interpolarea spline cubică, despre care nu vom vorbi aici, dar implică mai multe puncte. Aceasta vă oferă o interpolare care este o curbă cubică netedă, care în unele cazuri este mai precisă. Și apoi facem orice am făcut și ajungem undeva acolo. Și nu avem nevoie de pasul poziției planului pentru că suntem de fapt pe direcția gradientului. Suntem exact acolo unde vrei să fii. Deci te întrebi, de ce nu au făcut asta? Ei bine, ei nu spun, ci două motive la care mă pot gândi. Prima este că, înainte să ne plângem pentru că uneori folosim spațierea pixelilor și uneori rădăcina pătrată de 2 ori spațierea pixelilor, ei bine, acum putem avea orice între, nu doar acele două valori. Și acel grafic de corecție, graficul de părtinire, va fi diferit pentru toate aceste valori. Deci trebuie să-- nu știu-- să-l cuantificați , să construiți un tabel de căutare. Nu probleme insurmontabile, ci o bătaie de cap în plus. Și te întrebi, merită? Acesta este unul dintre motivele pentru care s- ar putea să nu alegi asta. Celălalt motiv este că ați făcut o interpolare și cât de precisă este aceasta? Ați trecut de la valorile pe care le cunoașteți cu siguranță la ceva pe care l-ați interpolat folosind o metodă pe care ați ales-o într-un mod arbitrar. Cât de bun este? Deci asta va introduce și o eroare. Acum, în multe cazuri această eroare nu ar conta. Ar fi atât de mic. Dar dacă vrei să ai o precizie de 40 din pixeli, chiar și acea mică eroare poate fi semnificativă. Deci aceasta este o metodă, o alternativă. Și una dintre problemele sale este schimbarea dimensiunii acestui pas de la un pixel la rădăcină pătrată de 2. Ei bine, ce se întâmplă dacă scăpăm de asta și avem doar o dimensiune fixă? Deci, iată din nou grila noastră de pixeli. Cunoaștem valorile la toate intersecțiile acestor linii. Și acesta este G0. Și acum spunem, ei bine, să desenăm un cerc. Și din nou, vom alege o direcție de gradient. Și acum, folosim acea valoare și acea valoare și acea valoare. Și acestea sunt la distanță egală. Sunt întotdeauna la aceeași distanță unul de celălalt, indiferent de direcția gradientului. Deci acum m-am ocupat de două probleme. Prima este că nu există o cuantizare a direcției gradientului și nu există nicio modificare a -- ce înseamnă x este egal cu 1? Înainte, asta putea lua două valori, iar aici ar putea lua o serie de valori. Ei bine, aici e mereu la fel. Este distanța dintre pixeli. Desigur, nu știu valoarea aici, așa că trebuie să folosesc interpolarea, care acum este o interpolare 2D. Și astfel pot folosi biliniar, sau aș putea, de exemplu, să folosesc bi-cubic. Și din nou, de ce nu au făcut asta? Ei bine, este o muncă suplimentară. În special cu bi-cubic, trebuie să luăm în considerare mai mulți pixeli decât avem aici, să mergem la o grilă 5 pe 5, nu doar pe grila 3 pe 3. Bilinear nu este îngrozitor de precis, așa că este posibil să nu vrem să folosim asta. Oricum. Așa că puteți vedea că, deși multe lucruri sunt descrise în model, există și unele lucruri ascunse. Probabil că au experimentat cu toate acestea și au ales ceva care era foarte precis și totuși simplu, și așa am ajuns la această metodă. Acum, ultimul lucru despre care vreau să vorbesc astăzi este multiscale. Ei subliniază în acest brevet că s-ar putea să doriți să faceți acest lucru la mai multe scale. Ei nu fac mare tam-tam aici. Dar am menționat deja că asta e ceva ce vrei să faci. Există unele margini care sunt foarte ascuțite și vor fi găsite cel mai bine la cea mai mare rezoluție. Și apoi există și alte margini care sunt cam neclare, fie pentru că nu sunt focalizate, fie pentru că obiectul lor nu are o tranziție ascuțită. Dacă obiectul are o curbură care se rotește lină, atunci va exista o tranziție în luminozitate de la oricare ar fi luminozitatea pentru o suprafață plană la luminozitatea pentru o suprafață plană diferită. Dar există toate aceste valori intermediare. Deci tranziția nu va fi pe un pixel. Va fi răspândit pe mulți pixeli. Să vedem. Vreau să fac asta acum, sau... nu am vorbit despre Cordic, așa că... Mă uit doar la ora. Nu avem mult timp, așa că de ce nu fac Cordic? Deci aceasta a fost metoda de a trece de la ex, ey la e0. e theta, unde e0-- deci este doar o transformare a coordonatelor carteziane în polare . Și rădăcinile pătrate [INAUDIBILE] necesită un pic de calcul. Probabil că va trebui să utilizați un tabel de căutare pentru a accelera acest lucru. Deci, care este implementarea lor preferată a acestui lucru? Deci ideea este că rotim sistemul de coordonate. Deci avem niște gradient, ex, ey. Și dacă am cunoaște acel unghi, atunci l-am putea roti în jos, iar apoi lungimea lui, ex, ar fi e0 și ey ar fi 0. Așadar, urmărim unde e0 este doar ex prim și ey prim este 0 Când o scrii în felul acesta , nu are sens. Acum, nu cunoaștem theta, dar putem roti folosind niște unghiuri de testare și, printr-o metodă iterativă, continuăm să ne îmbunătățim, continuăm să ne apropiem de această situație în care componenta y a gradientului se reduce la 0. Oh. [INAUDIBIL] Deci, superscriptele din paranteză se referă din nou la numărul de iterație, mai degrabă decât la puteri. Și, desigur, știm că în 2D o matrice de rotație este foarte simplă. Și deci un lucru pe care îl putem face este să avem o secvență de thetas pe care să o încercăm. Și când terminăm cu această iterație, când decidem să ne oprim, răspunsul pentru unghi este doar suma tuturor acestor incremente pe care le facem. Așa că vă puteți imagina diverse strategii. De parcă ai putea încerca un unghi și să presupunem că acesta merge pe o direcție greșită. Ei bine, atunci poate luați 1/2 din acel unghi și încercați asta. Sau puteți încerca să treceți prin acel unghi pozitiv și prin unghiul negativ și să comparați cele două rezultate, să vedeți care dintre ele funcționează mai bine. Și apoi continuați să reduceți dimensiunea unghiului până când convergeți, sau cel puțin până când sunteți suficient de mulțumit de rezultate. Deci, de fiecare dată, reduceți-- fiecare pas, reduceți magnitudinea ochiului și îl va crește pe celălalt. Deoarece pe măsură ce ne rotim mai aproape de axa x, proiecția acesteia pe axa x va crește. Deci asta este iterația. Și cum alegem thetas-urile? Ei bine, am putea face asta. Theta 0 este pi peste 2. Theta 1 este pi peste 4. Theta 2 este pi peste 8. Și așa mai departe. Aceasta ar fi o abordare evidentă. Așa că încercăm să ne întoarcem prin aceste unghiuri diferite și să vedem dacă -- și acceptăm schimbarea dacă satisface această condiție, acea mărime - că ochiul este redus. Nu trebuie să fie pozitiv. Deci ar putea supracompensa atâta timp cât amploarea este redusă. Și o poți întoarce oricând pentru a-l face din nou pozitiv dacă vrei. Deci poți face asta, dar este scump din două motive. Una este că ai cosinus și sinusuri, dar ai putea construi o masă. Ei bine, evident, doar stocați cosinusurile și sinusurile acestor unghiuri. Celălalt este de fiecare dată când aveți nevoie de patru înmulțiri și două adunări. Și nu sună prea mult, dar nu uitați, acest lucru se întâmplă de mai multe ori din cauza iterațiilor și se întâmplă la fiecare pixel. Deci e scump. Deci, cum eviți înmulțirea? Ei bine, ceea ce putem face este să alegem unghiurile foarte atent. Să presupunem că am ales unghiurile astfel încât să fie puteri inverse ale lui 2. Atunci acea matrice de acolo, matricea de rotație, devine doar aceasta. Și partea matriceală a acesteia este foarte ușor de calculat, înmulțirea cu 1. Nu ne costă nimic. Și aceasta este doar o schimbare, iar schimburile sunt extrem de ieftine. Și apoi avem un plus. Deci reduce totul la două ediții din patru înmulțiri și două adunări. Ei bine, atunci avem... și facem asta în mod repetat. Și puteți vedea că unghiul prin care ne întoarcem devine din ce în ce mai mic. Care este acel unghi? Să vedem. O putem calcula din acea formulă. După un timp, practic se reduce la jumătate. Inițial, din cauza naturii neliniare a funcțiilor trigonometrice, acesta nu este înjumătățit, dar în cele din urmă devine jumătate. Și atunci când ai terminat, ajungi aici. Ajungi cu un produs din toate aceste cosinus theta i. Și ce faci cu asta? Ei bine, poate nu-ți pasă pentru că este doar un multiplicator constant. Dar să presupunem că îți pasă. Apoi îl puteți precalcula. Și de fapt, este 1.16 foarte repede. Converge foarte repede. Deci, puteți utiliza doar 1.16. Deci, aceasta este ideea de bază a cordicului, că rotim, dar prin unghiuri speciale care au această proprietate, unde tangenta lui theta i este 1 peste 2 la i. Ei bine, durează puțin mai mult pentru a explica în lucrare, dar asta este ideea de bază. Și astfel, procesul iterativ este că te schimbi prin acel unghi și, dacă îmbunătățește răspunsul, îl păstrezi. Și apoi urmăriți dacă a devenit negativ sau nu. Și primul lucru pe care trebuie să-l faci este să-l aduci la primul octant. Întreaga idee aici este că lucrezi în acest regim, dar asta este evident banal. Priviți doar semnele lui x și y și dacă y este mai mare decât x și îl puteți reduce la primul octant. Deci data viitoare, vom vorbi despre multiscale și vom vorbi puțin despre eșantionare și aliasing. Desigur, asta face parte din povestea multiscale. Deci, din nou, vă rugăm să începeți devreme testul. Este mai multă muncă decât problema tipică a temelor pentru acasă.