[SCRÂTÂND] [FOȘT] [CLIC] BERTHOLD HORN: Începem o nouă parte a cursului în care ne vom ocupa de viziunea industrială a mașinilor. Și în special, ne vom uita la modele în acest sens. Și vom începe cu unul de Bill Silver la Cognex. Deci, Cognex este, fără îndoială, principala companie de viziune artificială. Și este un început devreme. M-am străduit foarte mult să-l conving să nu se alăture unui startup pentru că rata de succes nu era foarte mare în acel moment și poate că încă nu este. Oricum, s-a alăturat oricum. Și el este guru-ul lor tehnic. Și există o grămadă de brevete care descriu ceea ce au făcut. În acest moment, nu puteți fabrica circuite integrate fără viziune artificială. Sunt necesare pe tot parcursul spectacolului pentru aliniere și inspecție. Și nu puteți fabrica produse farmaceutice fără viziune artificială. De exemplu, există un mandat ca eticheta să fie lizibilă. Deci, care este limba mandatului? Nu este, majoritatea etichetelor ar trebui să fie lizibile. Spune, mandatul... etichetele ar trebui să fie lizibile. Asta înseamnă că fiecare etichetă trebuie inspectată. Ei bine, nu cred că cineva vrea ca oamenii să facă asta. Deci, desigur, se face folosind viziunea artificială. Și acestea sunt cele două domenii pe care Cognex a reușit să cucerească o piață mare, începând cu circuitele integrate, mai ales în Japonia. Deci cea mai mare parte a pieței era acolo. Oricum, haideți să ne aprofundăm în acest brevet și să învățăm puțin despre brevete. Deci, în primul rând, de ce brevete? Deci ideea de bază este că vii cu o idee de a face ceva, de a produce niște substanțe chimice, de a construi o mașină. Și te-ai înființat să construiești astfel de lucruri și să le vinzi. Iar vecinul tău se uită și spune: oh, ce frumos, poți câștiga niște bani așa și practic concurează cu tine fără să fi depus efortul de a veni cu invenția. Și astfel, întreaga idee a unui brevet este un compromis, prin care obțineți un monopol limitat pentru a vă folosi invenția în schimbul explicației exacte a modului în care funcționează, astfel încât, după o anumită perioadă de timp, oricine altcineva să o poată construi. Deci este un contract cu societatea în care obții un beneficiu pentru o perioadă. Și în schimb, există unele beneficii pe termen lung pentru societate. Și așa te fac să explici în detaliu cum funcționează lucrurile. Și există opinii diferite cu privire la diferite tipuri de proprietate intelectuală. Și nu vom intra în asta. Există, evident, unele beneficii și unele dezavantaje în acest sens. Și s-a schimbat de-a lungul anilor. Există o revizuire constantă. Și este de departe posibil ca unele dintre lucrurile pe care ți le spun să nu mai fie adevărate pentru că erau adevărate acum doi ani și orice altceva. Deci, să ne uităm la ce este acolo. Deci, mai întâi de toate, apoi, vom intra în chestiile tehnice mai târziu. Dar structura acesteia și metadate, deci, evident, există numărul. Deci, în acest moment, suntem până la șase milioane. Tocmai am observat că unul dintre brevetele noastre cu raze X a fost emis. Și este în intervalul de 10 milioane. Deci, din 2002, am adăugat o mulțime de brevete. Și o mulțime de companii, în special companii mari, depun brevete la un ritm incredibil. De ce, mă rog? Ei bine, în mare parte pentru că vor muniție într-un război de brevete. Așa că spuneți că dacă sunteți IBM și există Microsoft, dețin 6.000 de brevete în mână. Și dacă promiți că nu mă vei da în judecată, poți folosi acea tehnologie dacă pot folosi cele 8.000 de brevete ale tale, așa ceva. Astfel, brevetele pot sta în calea unor lucruri utile. De asemenea, uneori pot preveni irosirea banilor în litigii. Deci iată data brevetului. Avem un titlu, un aparat și o metodă pentru detectarea și locația subpixelilor marginilor într-o imagine digitală. Așadar, acest lucru vizează în principal o lume cu benzi transportoare, în care privești lucrurile de sus și măsori pozițiile și atitudinile. Și vizează, de asemenea, lumea circuitelor integrate , unde aveți de-a face în mare parte cu imagini bidimensionale. Deci, unul dintre lucrurile pe care le știm este că imaginile au adesea regiuni mari omogene de intensitate uniformă. Nu sunt foarte interesante. Lucrurile interesante sunt acolo unde există o tranziție între diferite niveluri de luminozitate. Și astfel marginile sunt acolo unde se află. Puteți reduce foarte mult bitii necesari pentru a descrie ceva concentrându-vă doar pe margini. Deci despre asta este vorba. Și este vorba despre găsirea lor la o precizie de subpixeli. Și asta este foarte important, deoarece puteți obține întotdeauna mai multă precizie adăugând mai mulți pixeli. În loc să utilizați o cameră de un milion de pixeli, utilizați o cameră de 100 de milioane de pixeli. Și obțineți o precizie de 10 ori mai mare. Și, evident, asta e scump. Și, de asemenea, dacă puteți face asta în software pentru un cost relativ scăzut, atunci acesta este un avantaj imens. Sau dacă aveți acea cameră de 100 de milioane de pixeli, acum aveți o rezoluție de 10 ori mai mare decât oricine altcineva lucrează în acel domeniu. Ce precizie poți obține? Ei bine, este destul de simplu să ajungi la 1/10 dintr-un pixel. Și în acel moment, începi să vezi toate, felurile de probleme la care nu te-ai gândit. Dacă o împingi din greu, poți ajunge la 1/40, ceea ce susțin ei. Și asta este, evident, uriaș. Două dimensiuni, adică un factor de 1.600 în ceea ce privește precizia. Deci despre asta este vorba. Și apoi sunt enumerați autorii. Și cesionarul este listat. Adică, autorii nu obțin neapărat beneficiul. De obicei, dacă lucrezi la o companie, te pun să semnezi o foaie de hârtie care spune că orice inventezi este al lor și așa mai departe. Și cred că MIT nu a fost atât de atent când am fost angajat. Și nu cred că am semnat vreodată acea hârtie. Dar nu m-a ajutat prea mult. Oricum, atunci avem data depunerii și câmpurile de căutare. Deci există câteva numere acolo care vă spun în ce zonă se află. Acele câmpuri de căutare au fost stabilite cu mult, mult timp în urmă. Și deci nu există nici măcar ceva pentru computere. Este o parte secundară a lucrurilor electrice. Dacă vă interesează producția de cauciuc, există 10 categorii pentru diferite tipuri de cauciuc. Desigur, asta a fost... deci acele categorii sunt lucruri despre care examinatorii de brevete știu foarte multe. Dar nu sunt deosebit de interesante. Și ce se întâmplă este că depuneți chestia asta. Și trebuie să fie într-o formă care să fie acceptabilă. Și există o mulțime de reguli. Pe vremuri nu puteai avea nicio ecuație acolo. Ei bine, acesta are ecuații în el. Deci, evident, nu mai este cazul. Nu puteai folosi nivelurile de calificare. Trebuia să fie desene alb- negru. Și astfel, singurul mod în care puteai obține ceva de genul nivelurilor de notă era semitonuri, puncte cu puncte de diferite dimensiuni și spațiere între puncte. Nu poți avea culoare. Limbajul este oarecum arcan. Există termeni anumiți în care veniți din nou și din nou, cum ar fi pluralitatea, nu pot pronunța niciodată acel cuvânt, care înseamnă mai mulți, și lucruri precum cuprinde. Deci, o modalitate de a spune că aparatul conține anumite lucruri este să spui asta. Dar asta nu este foarte exact. Deci cuprinde înseamnă că există cel puțin unul. Pot fi mai multe. Și astfel avocații în brevete își câștigă banii știind chestia asta. Apoi avem referințe. Și există o grămadă de brevete listate împreună cu domeniile lor. Iar asteriscul înseamnă că au fost adăugate de examinatori. Deci coboară. Și examinatorul stă pe el o vreme. Și înainte a fost... ei bine, s-a schimbat în istorie. Dar în anii ’90, când a fost depus, în 1996, a existat o întârziere de mai mulți ani. Și în acel moment, Congresul a schimbat puțin regulile, inclusiv taxarea dvs. pentru acel proces. Și s-a accelerat puțin. Iar examinatorul de brevete va adăuga lucruri la care se gândesc. Puteți vedea aici că inventatorii s-au gândit la acest brevet doar de către unul dintre inventatori. Este ca și cum atunci când vă scrieți lucrarea tehnică, probabil că vor fi referiri la propriile lucrări anterioare. Așa că nu s-au gândit la toți acești oameni ca fiind relevanți. Și apoi mai sunt, alte publicații. Pentru acești oameni, brevetele sunt importante. Documentele tehnice nu sunt. Dar ele sunt încă enumerate pentru că autorul este din lumea științifică, într-un anumit sens. Și nu-- spune, să continuăm pe pagina următoare, pentru că nu era suficient pe prima pagină, suficient spațiu pe prima pagină pentru a enumera toate lucrările la care a vrut să se refere. Și apoi este abstractul. Și acest brevet este neobișnuit prin faptul că este de înțeles. Este detaliat. Este tehnic. Nu sunt multe... și pentru că a fost scrisă de un inginer, în mare parte. Deci, dacă citiți rezumatul, vă faceți o idee destul de bună despre ce este acesta. Există o cifră. Această cifră este aleasă de examinatorul de brevete dintre cifrele care sunt depuse cu un brevet ca fiind oarecum cele mai distinctive, cel mai probabil să vă spună despre ce este brevetul. Așa că vom reveni la rezumat mai târziu. Așa că lasă-mă să merg la pagina următoare. Deci, aici, puteți vedea o grămadă de lucrări suplimentare despre detectarea marginilor. Desigur, detectarea marginilor este un subiect vechi în viziunea artificială. Merge înapoi la anii 1950, dacă poți crede, când oamenii au început să scaneze imagini și au găsit nevoia de a comprima cumva informațiile, de a măsura lucrurile și așa mai departe. Deci, una dintre primele lucrări celebre este a lui Roberts, care a fost la Lincoln Labs în 1965. Și presupun că dispozitivul lui de intrare era un plotter cu tambur. Deci, în acele vremuri, unul dintre dispozitivele de ieșire interesante era un tambur care se învârtea. Și ai avut un pix. Și ai putea să-i controlezi poziția și, în unele cazuri, culoarea. Poate avea mai multe sfaturi. Și ați putea face diagrame grozave de diagrame de circuite, aranjamente de plăci de PC și așa mai departe. Și astfel, ceea ce a făcut a fost că a înlocuit stiloul cu un fotodetector, un detector foto cu tub vid. Și apoi și-a scanat fotografiile lucioase alb-negru de 8 pe 11. Și apoi s-a întors a doua zi dimineață și s-a uitat la date și a avut un detector de margine foarte simplu , care era înșelător în sensul că avea un scaner care producea imagini incredibil de bune, pentru că exista doar un singur detector pe care îl putea. permit să construiască, un a-to-d de 12 biți. Avea imagini de o calitate mult mai bună decât am obține mai târziu din vidicon-uri și alte dispozitive . Așa că detectorul lui de margini, care a funcționat bine pe pozele lui, nu ar funcționa pentru oamenii din alte imagini. Și așa că de mult, a existat o competiție, OK, detectorul meu de margine este mai bun decât al tău. Și toți aveau nume. Și îmi amintesc că am fost la o conferință și am stat în pasaj și am încercat să fiu sociabil și am discutat cu acest tip pe care nu-l mai văzusem niciodată. Și am ajuns la detectarea marginilor. Și am spus, ei bine, este păcat că toți detectoarele de margine care au numele oamenilor pe ele sunt fără valoare. Ei bine, el era Irwin Sobel, al cărui nume este pe unul dintre detectoarele de margine. Și m-a iertat de atunci. Dar încă încearcă să-și revendice moștenirea și să se asigure că toată lumea știe că el a inventat acel detector de margini. Și scrie pe blog și orice altceva. Oricum, astea sunt niște hârtii. Și apoi ajungem la cifre. Deci, cel de sus este detectorul Roberts de margine încrucișată. Și puteți vedea că este o derivată direcțională. Cel din stânga este o derivată în direcția de 45 de grade. Iar cea din dreapta este în direcția de 135 de grade. Și de ce asta? Ei bine, despre avantajele acestui tip de operator vom vorbi mai târziu. Și atunci operatorul lui Irwin Sobel este figura 1B, ceea ce este oarecum avantajos. Este nevoie de mai multe calcule, este ceva mai rezistent la zgomot, nu are o rezoluție la fel de înaltă și așa mai departe. Și apoi Bill Silver, după ce a fost la cursurile mele, a fost interesat de teelațiile hexagonale. Și așa a propus acești operatori alternativi, care ar funcționa pe o grilă hexagonală. Din păcate, nimeni nu a construit vreodată camere cu grilă hexagonală. Au unele avantaje în ceea ce privește rezoluția și simetria rotațională. Dar nu este un mare avantaj. Este ca 4 peste pi. Deci există un fel de avantaj. Dar nu este imens. Și astfel, problema suplimentară de a lucra cu o rețea hexagonală a fost aparent prea mare pentru ingineri. Acesta se stinge aici în trei direcții diferite, ceea ce este potrivit pentru grila hexagonală. Dar, desigur, este redundant. Dacă ai de dx și de dy, ai totul. Deci există două grade de libertate față de gradientul de luminozitate. Nu prea ai nevoie de trei numere. Așa că a venit cu acest model alternativ aici, unde acesta estimează derivata în direcția x și acesta în direcția y. Și rădăcina pătrată a lui 3 se datorează faptului că aceste celule sunt mai îndepărtate decât acele celule. Deci trebuie să compensezi pentru asta. Așadar, un pas esențial este să convertiți de la coordonatele carteziene la cele polare, în sensul că doriți mai degrabă mărimea gradientului și direcția acestuia decât gradientul de luminozitate în sine, componentele x și y. Și așa sus există o formulă. Puteți lua rădăcina pătrată a sumei pătratelor. Și iei arctangenta. Și o parte din asta este scos ca un om de paie, adică de ce naiba ai face asta? Acest lucru este foarte scump. Acum, poate astăzi, nu am spune asta. Dar dacă ai 100 de milioane de pixeli și încerci să faci lucruri la 100 de cadre pe secundă, tot nu vrei să iei cu adevărat rădăcini pătrate și arctangente. De fapt, rădăcinile pătrate, în funcție de locul în care ai crescut, s- ar putea să știi că rădăcinile pătrate sunt la fel de ușor de calculat ca și diviziunile. Este doar o ușoară învârtire a algoritmului. Și, din păcate, în lumea occidentală, noi nu predăm asta. Așa că oamenii cred că rădăcinile pătrate sunt aceste lucruri cu adevărat urâte. Dar, din păcate, oamenii care proiectează computere digitale nu erau nici din această altă lume. Și astfel, pentru noi, rădăcinile pătrate sunt mai scumpe decât diviziunea. Oricum, argumentul din brevet este că putem face acest lucru. Dar e scump. Deci haideți să găsim o modalitate mai bună de a face asta. Apoi, figura 2B este o soluție alternativă folosind tabele de căutare. Ideea acolo este că codificați componentele x și y ale luminozității într-un număr mic de biți. Apoi lipiți bucățile împreună. Și aceasta este adresa unui tabel de căutare. Și creează indexul tabelului, tabelul de căutare. Tabelul de căutare vă oferă magnitudinea și direcția. Și aceasta este o soluție grozavă dacă operațiile aritmetice sunt costisitoare, ceea ce era adevărat la momentul respectiv și dacă accesul la memorie nu este o problemă. Apoi, ei bine, lucrurile continuă să se schimbe. Așa că pentru o vreme, operațiunile aritmetice au devenit ieftine, pentru că oamenii tocmai au construit multiplicatori de 32 cu 32 de biți și au terminat. Și pierderile de numerar au fost o mare problemă. Deci nu ați vrut să folosiți tabele mari de căutare. Și, din acest motiv, s-ar putea să doriți să reveniți la o metodă care face multă aritmetică, mai degrabă decât să aveți un tabel mare de căutare. Și asta se schimbă din nou și așa mai departe. Deci, oricum, la acea vreme, ideea de a folosi un tabel de căutare nu era nici ea deosebit de atractivă. Și așa a venit cu această metodă ilustrată aici, despre care vom vorbi, CORDIC. Deci CORDIC este o modalitate de a estima mărimea și direcția unui vector din cele două coordonate ale sale. Și a fost de fapt pionier în al Doilea Război Mondial. Probabil știți că o mulțime de mașini de calcul timpurii au fost construite în scopuri neplăcute, cum ar fi războiul și pentru a vă asigura că vă puteți îndrepta armele în direcția corectă. Și a putea calcula rădăcini arctangente și pătrate a fost foarte important. Și astfel oamenii au venit cu această metodă, care este o metodă iterativă care rotește sistemul de coordonate pentru a-l alinia mai mult cu vectorul gradient de luminozitate. Și la fiecare pas, reduce eroarea, diferența. Și atunci când adunați toate rezultatele, puteți obține magnitudinea și direcția. Și uimitor, o poți face fără prea multă aritmetică. Sfârșiți prin a avea nevoie doar de o schimbare, care nu costă aproape nimic, adunări și scăderi și o operație cu valoare absolută. Deci, dacă te gândești la rotație, te gândești la o matrice, cosinus teta, sinus teta, minus sinus teta, cosinus teta și înmulțire. Deci trigonometrie, asta e scump. Înmulțirea și adăugarea, scumpe. Ei bine, aceasta este o metodă foarte inteligent concepută pentru a nu face nimic din toate astea. Și poate fi implementat la nivel scăzut. Deci, în arhitecturile Intel, aveți un limbaj de asamblare. Dar aveți și lucruri inteligente pe care le puteți face cu instrucțiuni care accesează mai multe mușcături. Și astfel toate acestea pot fi implementate extrem de eficient. Deci asta a fost motivația pentru asta. Apoi, odată ce cunoaștem gradientul de luminozitate în mărime și direcție, unul dintre lucrurile pe care vrem să le facem este să găsim locurile în care gradientul este mare. Acolo este marginea. Dar nu vrem să luăm doar un maxim local, deoarece de-a lungul unei margini, gradientul va fi mare. Deci vor fi unele locuri care sunt maxime locale. Dar sunt lipsite de sens. Sunt puncte arbitrare de-a lungul marginii. Ceea ce ne dorim cu adevărat este să privim peste margine și să luăm maximum în acea direcție. Este 1D, nu 2D. Și deci avem nevoie de direcția gradientului, astfel încât să știm în ce direcție să căutăm. Și trebuie să avem această constatare maximă, care se numește o suprimare non-maximum , ceea ce înseamnă că vom ignora alte lucruri decât cea maximă. Un termen amuzant pentru găsirea maximului. Dar așa se numea. Și din moment ce lucrăm la o grilă discretă, avem câteva limitări. Și mai ales pe o grilă pătrată, trebuie să decidem cumva să cuantificăm direcțiile posibile ale gradienților. Calculăm direcția gradientului cu mare precizie folosind oricare dintre cele trei metode despre care am vorbit. Dar atunci suntem restricționați la... avem doar acei pixeli. Deci ce facem? Ei bine, o cuantificăm în aceste direcții diferite. Și pentru a găsi extremul, alegem una dintre cele opt direcții posibile ale busolei. Pe grila hexagonală, avem șase direcții posibile. Aceeași idee. Acum, dacă vrem, putem privi mai departe. Deci figura anterioară privea o zonă de 3 pe 3 a imaginii. Deci am avut doar valori de 3 pe 3 ale gradientului acolo sus. Dar dacă nu suntem mulțumiți de acea cuantificare a direcției, putem merge la 5 cu 5. Și acum avem o gamă mai mare de direcții. Deci ei vorbesc despre asta. Dar nu este ceea ce a fost implementat de fapt. Și, desigur, poți merge mai departe. Deci, următorul pas este că acum privim într- o anumită direcție în imagine. Și am găsit locul unde există un extremum. Și acum am dori să știm unde este vârful real pentru precizia subpixelilor. Și deci un lucru pe care îl putem face este, figura 4A, acestea sunt cele trei valori. Deci imaginați-vă că 0 este pixelul în care ați găsit maximul. Și plus 1 este unul peste. Și minus 1 este unul peste în cealaltă direcție. Și acestea nu trebuie să fie în direcția x. Ele pot fi în direcția diagonală. Sau ar putea fi în sus și în jos. Dar oricum trei valori. Și putem potrivi o parabolă la asta. Ei bine, asta e tot ce putem face. Avem trei numere. Nu putem potrivi decât ceva cu trei grade de libertate. Și deci ax pătrat plus bx plus c, putem potrivi asta. Am putea încăpea un cubic. Dar ar fi ambiguu pentru că ar exista un parametru care stătea liber. Am putea face orice ne dorim. Deci ne potrivim o parabolă. Și știm cum să găsim vârful unei parabole. Deosebim doar că rezultatul este egal cu 0. Și iată-ne. Putem găsi un vârf indicat de acea linie punctată. Acum, dacă modelul nostru al lumii este Mondrian, adică avem pete de luminozitate egală cu margini ascuțite între ele, atunci știm că luminozitatea va fi constantă în fiecare patch. Și dacă marginea este foarte ascuțită, ne-am putea aștepta să existe o potrivire locală diferită, care este afișată în dreapta. Deci, până la margine, luminozitatea este crescută. Gradientul este în creștere. Și apoi coboară. Și poate părea puțin ciudat. Dar asta ne va da un rezultat diferit. Și din nou, avem nevoie de acele trei numere pentru a se potrivi. Și putem găsi vârful, găsim unde se intersectează acele două linii. Și putem găsi linia punctată în figura 4B. Și cei doi vor fi în general diferiți. Deci pe care o luăm? Care dintre ele este mai precisă? Și așa vom ajunge la asta într-o clipă. Apoi există ceva ce ei numesc interpolarea poziției plane . Deci ideea este că atunci când am găsit extremul, cuantificăm direcțiile, orizontală, 45 de grade, verticală etc. Dar gradientul real la o precizie mai mare, știm direcția sa reală la poate 8 biți de precizie. Și astfel, un pas pe care îl putem face este să mergem de fapt în direcția gradientului de la pixelul central și să găsim locul în acea direcție unde marginile. Deci linia diagonală este aproximarea noastră cuantificată a direcției gradientului. Și la 413, am găsit vârful utilizând metoda din figura 4. Și eroarea lui 410 este direcția actuală a gradientului. Și acum ceea ce facem este să desenăm o perpendiculară pe acea direcție a gradientului și de la trecerea prin 413. Și vedem unde intersectează 415. Deci ideea este că cu muchia, când găsim un punct de margine, poziția sa este bine definită în direcţia gradientului perpendicular pe margine. Dar de-a lungul marginii, desigur, nu este. Am putea fi oriunde la margine. Deci, aceasta este la fel ca discuția noastră despre fluxul optic despre problema deschiderii . Și deci pe care dintre acele puncte îl luăm de-a lungul marginii? Ei bine, un argument ar putea fi, cu cât te îndepărtezi de lucruri pe care le cunoști cu adevărat, cu atât va fi mai puțin precis. Deci haideți să găsim punctul cel mai apropiat. Deci am găsit un avantaj. Ce punct de pe margine înregistrăm de fapt în datele de ieșire? Ei bine, o alegem pe cea care este cât mai aproape de G0. Și acesta este punctul pe care l-am construit astfel. Deci asta este construcția. Deci apoi descoperim că putem obține o precizie destul de bună a subpixelilor , poate 1/10 dintr-un pixel. Dar pentru a merge mai departe, trebuie să luăm în considerare faptul că construcțiile noastre se bazează pe unele ipoteze despre modul în care gradientul de luminozitate variază în funcție de poziție. Și avem acele două modele. Și am putea veni cu mai multe. Și care este lucrul real? Ei bine, lucrul real va depinde de proprietățile opticei camerei pe care o utilizați. Va depinde de factorul de umplere al cipului care detectează imaginea. Va depinde de cât de precisă este focalizată imaginea . Deci, tranziția la margine, desigur, nu este o tranziție pas perfectă, ceea ce este un lucru bun. Dar forma sa reală nu este ceva pe care ați putea să o anticipați din timp. Și este același pentru fiecare cameră posibilă și situație de imagine la care vă puteți gândi. Acum, dacă nu se potrivește celor două modele, ce se întâmplă? Vom primi un răspuns greșit, dar nu foarte greșit. Deci, există o părtinire introdusă de alegerea noastră a modelului respectiv. Și putem calibra această părtinire. Și asta face aici. Deci acestea sunt curbe exagerate. Deci, S, una dintre ele este poziția efectiv calculată pe baza descoperirii micii noastre vârfuri și a potrivirii parabolei. Și S prim este poziția actuală a muchiei. Și, în mod ideal, ar fi o linie diagonală dacă le-ai reprezenta pe cele două. Și din cauza factorilor pe care i-am menționat, nu este o linie dreaptă. Are un pic de plecăciune. Și așa cum am menționat, acest lucru este extrem de exagerat. Arcul este mult mai mic. Dar arată că ar putea fi trei forme diferite pentru trei camere diferite, sau poziții focalizate sau faza lunii, indiferent. Și deci ce facem? Ei bine, gândește-te la asta. Aceasta este acum doar o corecție peste o corecție. Deci nu trebuie să fim extrem de sofisticați. Așa că vine cu modalități de a elimina această părtinire. Și, în special, vă puteți gândi doar la puterile lui S. Dacă duceți S la 1, atunci aceasta este linia noastră diagonală. Dacă luați S 1.1, atunci este puțin înclinat. Dacă iei S 0.9, se înclină puțin în sens invers. Așa că ideea aici este că putem crește precizia și mai mult descoperind pentru sistemul dvs. de viziune artificială care este S-ul care vă oferă cea mai bună potrivire. Și în timp ce suntem acolo, observați că atunci când direcția gradientului nostru cuantificat se întâmplă să fie diagonală, de 45 de grade, atunci punctele pe care le avem sunt de fapt mai îndepărtate cu rădăcina pătrată de 2 ori mai departe decât atunci când suntem orizontale. Și așa v-ați imagina că părtinirea ar fi diferită. Și într-adevăr, este. Și, așadar, o altă perfecționare a brevetului este că faceți această părtinire să depindă de direcția gradientului pentru a obține o precizie și mai mare, deci. Și deci aceasta este diagrama generală a întregului lucru. Așa că începem cu imaginea. Estimăm gradientul de luminozitate, pe care îl numim Ex Ey și el îl numește Gx Gy. Apoi găsim mărimea și direcția gradientului, G0 și G theta. Apoi facem suprimarea non-maximă. Și îi găsim pe vecini. Detectăm vârful în acea direcție. Și de aici, obținem o poziție a punctului de margine. Și încă știm gradientul de acolo. Deci folosim și asta. Și apoi interpolăm folosind acea parabola sau triunghiul. Compensăm părtinirea. Și facem acea metodă de poziție plană care ne găsește cel mai apropiat punct de maximul care se află pe margine. Deci iată brevetul în sine. Aceasta este, desigur, o parte din materialele cursului. Deci poți studia asta singur. Și nu am de gând să trec prin asta cuvânt cu cuvânt. Dar concentrează-te doar pe secțiuni. Deci începe ca de obicei cu titlul. Și apoi domeniul invenției, este vorba despre fabricarea cauciucului din chestii care ies din copaci? Sau este vorba despre viziunea artificială? Deci, este foarte scurt - această invenție se referă în general la procesarea imaginilor digitale și în special la detectarea marginilor în imaginile digitale. Apoi ajungem la fundal. Deci, fundalul este locul în care recunoașteți că oamenii au făcut deja anumite lucruri. Deci, aceasta este considerată o tehnologie anterioară în terminologia brevetelor. Iar punctul principal al acestei secțiuni din punctul de vedere al inventatorului este că închei cu unde spui, prin urmare, ai nevoie de chestia asta pe care am inventat-o pentru că toate celelalte chestii, sunt grozave. Dar nu rezolvă problema cu adevărat. Și în acest caz, ce spun ei? În consecință, este nevoie de o metodă ieftină și/sau rapidă de detectare a marginilor subpixelilor de înaltă precizie. Deci, cea mai mare parte a acestei discuții este despre, de ce doriți să detectați marginile? De ce este acea problemă importantă? Și cum au detectat oamenii marginile? Era operatorul de gradient al lui Roberts. Era Irwin Sobel și așa mai departe. Și apoi se termină cu, ei bine, toate acestea sunt prea lente, prea inexacte, bla, bla, bla. Și iată de ce ai nevoie de ceea ce am eu. Și apoi există un rezumat al invenției, care este o versiune scurtă a despre ce este vorba. Invenţia furnizează un aparat şi o metodă pentru detectarea precisă a marginilor subpixelilor. Deci asta e un alt lucru legat de brevete. Inițial, oamenii care au venit cu ideea de brevete, așa cum este scrisă în Constituția noastră, au decis că nu vor să breveteze idei, idei abstracte. Nu au vrut să breveteze formula matematică. Și deci nu știau despre programare. Dar Curtea Supremă a reinterpretat mai târziu asta pentru a însemna că nu poți breveta programe. Software-ul nu este brevetat. Și astfel, pentru o lungă perioadă de timp, oamenii din viziunea artificială nu au putut să-și breveteze lucrurile, deoarece era practic software. Atunci au venit cu ideea, ei bine, ce se întâmplă dacă software-ul locuiește într-un obiect fizic? Poți patenta asta. Și atunci ei-- tot acest limbaj complicat pentru a încerca să fie un lucru fizic. Și apoi, pentru un timp, ceea ce ați făcut a fost că, pentru că nu era clar cum va renunța Curtea Supremă în această privință, le-ați ales pe amândouă. Deci, practic, ai inventat un aparat, o cutie care are un card SD cu un program în el sau orice altceva și metoda separat. Și apoi, dacă într-o zi, ei decid că metodele nu sunt brevetabile, atunci ești în regulă pentru că încă ai brevetat aparatul. Deci, acest lucru a însemnat că, în multe cazuri, ca și aici, există de două ori mai multe revendicări la sfârșit decât trebuie, într-adevăr, pentru că trebuiau să folosească practic același limbaj, doar cu aparatul înlocuit cu metoda și alte mici modificări. Deci este aparat și metodă. A existat un caz în-- așa că cazurile de brevete sunt litigiate în diferite moduri. Unul special este importul. Deci, dacă cineva încearcă să importe ceva despre care credeți că vă încalcă brevetul, puteți merge la o anumită instanță de brevete, care este la Washington. Și poți să-ți argumentezi cazul acolo. Și a existat un caz care nu are legătură cu acest brevet, ci un brevet strâns legat. Și există o companie în Canada, Matrox, care practic nu a construit o mașină. Dar aveau software care implementa exact ceea ce era în acel brevet. Și astfel, martorii experți pentru cele două părți s-au ridicat și și-au prezentat toate teoriile lor foarte păroase despre cum ar putea funcționa acest lucru. Și apropo, martorii experți pot să se uite la codul tău. Deci, dacă încerci să faci un argument, nu vrei să arăți cealaltă parte a codului. Dar martorul expert pentru cealaltă parte se poate uita la cod. Și așa pui acea persoană într-o cameră în care nu poate copia lucrurile. Nu au voie să-și aducă micile stick-uri USB cu ei. Și se pot uita la tot codul tău. Și așa a fost jalnic, pentru că martorilor experți li s-au pus întrebări de genul, ei bine, nu este oare găsirea unui maxim al acelei funcții la fel cu găsirea minimului din minus acea funcție? Iar judecătorii erau complet ieșiți din apă. Și până la urmă, din fericire, judecătorii au găsit o cale de ieșire, adică , oh, totul este software. Și asta nu este brevetabil. Deci au fost trei săptămâni în care oamenii discutau despre interpolarea cubică și chestii de genul ăsta. Și apoi, până la urmă, a fost aruncat pe un aspect tehnice, dacă vrei. Deci, oricum, asta face parte din asta. Deci, rezumatul invenției. Acum, în ceea ce privește litigiile privind brevetele, cele mai multe dintre acestea sunt irelevante în acest sens. Adică avocații trec imediat la revendicări. Vom ajunge la revendicări într-o secundă. Deci aceasta este o explicație neobișnuit de clară a metodei. Din nou, o parte din ceea ce doriți să faceți când scrieți un brevet este să îl faceți cât mai larg posibil, astfel încât să aveți o idee clară despre cum să o faceți. Dar acum altcineva, adversarul tău, va găsi o modalitate de a nu face lucrurile exact așa cum le descrii tu, făcând o mică schimbare, astfel încât să poată spune, oh, acesta nu este brevetul tău pentru că eu am făcut asta în loc de asta. Deci, una dintre sarcinile pe care dumneavoastră și avocatul dumneavoastră le aveți este să găsiți toate modalitățile de modificare, astfel încât să fie în continuare aceeași idee. Deci, probabil, la lucruri, ca inventator, nu te gândești mai întâi pentru că vrei doar să le faci să funcționeze și să funcționeze bine. Și acum trebuie să te gândești la, oh, dacă înlocuiesc ultravioletele cu infraroșu, dacă folosesc sunetul în loc de unde radio și așa mai departe. Și, prin urmare, brevetele scrise de avocați sunt aproape imposibil de citit, deoarece au generalizat totul într-o măsură atât de mare. Și aici, Bill Silver a refuzat să-i lase să facă asta. El a scris-o singur. Și sunt instrucțiuni clare. Aceasta este ceea ce faci. Și este grozav. Este foarte plăcut de citit. Apoi ajungem la cifre. Și așa că există în primul rând o secțiune scurtă care enumeră toate figurile și le dă doar nume. Și apoi există descrierea detaliată a desenelor, care este de fapt explicația detaliată a modului în care funcționează lucrul. Și celelalte convenții, de exemplu, toate numerele care apar cu caractere aldine se referă la elemente din figuri. Și dacă apar în mai multe cifre, mai bine au același număr, reguli de genul ăsta. Lucrurile pot fi respinse pentru că nu ai respectat regulile, pentru că cutiile tale dreptunghiulare nu sunt chiar dreptunghiulare. Și, de asemenea, într-un loc, ai numit nucleul 131. Și în alt loc, l- ai numit 141. Nu poți face asta. Și are o formulă pentru conversia carteziană în polară, ecuația 1A și 1B, care, așa cum am menționat, înainte nu era ceva ce ai putea vedea în brevete. Și chiar detaliat. Suntem doar până la cifra 2 în acest moment. Deci ei dau explicații foarte detaliate. Și vom vorbi despre o parte din asta. Mai multe formule. Acestea sunt formulele pentru găsirea vârfurilor parabolei în cazul superior și ale formei de undă triunghiulară în al doilea caz. Și aceasta este formula pentru părtinire, care este probabil foarte greu de citit. Dar este valoarea absolută a lui 2S ridicată la B, unde B este acel lucru despre care am spus că ar putea fi aproape de 1. Și spune în mod explicit că trebuie să fie mai mare decât minus 1. Dar în afară de asta, poate fi orice valoare. Mese. Să vedem. Oh bine. Așa că acum ajungem la partea pe care avocații o vor găsi cea mai interesantă. Unde este? Începe acolo sus. Ce este claim biz? Și din anumite motive, nu este o secțiune separată. Este doar o convenție. Apar cuvintele care se pretinde. Și acum enumerați revendicarea. Deci, acestea sunt lucrurile particulare pe care crezi că ai venit și pe care vrei să le protejezi. Și cealaltă parte probabil va argumenta că, ei bine, de fapt, este evident. A fost finalul stadiului tehnicii, oricare ar fi, deci. Deci, începe o primă pretenție destul de lungă. Și o voi citi pentru că acesta este ceea ce vom studia de fapt , algoritmul pentru asta. Și un aparat pentru, aceasta este revendicarea 1. Și revendicarea 11 va fi același lucru. Ne pare rău, revendicarea 21 va fi același lucru, care spune o metodă pentru. Deci, acesta este aparatul 4. Detectarea și localizarea subpixelilor marginilor într-o imagine digitală, imaginea digitală menționată incluzând o multitudine de valori de pixeli, fiecare valoare de pixeli fiind asociată cu punctul respectiv de pixeli pe o grilă de pixeli distanțată regulat, aparatul menționat cuprinzând - și cuprinzând, amintiți-vă, un termen special aici în limbajul brevetului. Și apoi listează trei articole. Din anumite motive, toate sunt etichetate. Ei bine, toate încep cu A. Deci se pare că toate sunt etichetate cu A. Dar nu sunt. Astfel, primul este un estimator de gradient pentru estimarea mărimii și direcției gradientului la o multitudine de puncte de gradient distanțate în mod regulat în imaginea digitală menționată , astfel încât să furnizeze o multitudine de estimări ale mărimii și direcției gradientului, fiecare estimare setată a estimării gradientului și direcția gradientului fiind asociată cu un punct de gradient respectiv pe o grilă de gradient distanțată în mod regulat . Nu ați crede că ar fi atât de greu să vorbim despre, OK, vom calcula gradientul de luminozitate a imaginii. Dar aici este. Și presupun că ideea este că, pentru noi, este evident. Dar acesta ar trebui să fie ceva pe care oricine l-ar putea înțelege. Deci asta e una. Vom obține gradientul. Și al doilea este... oh, și vom obține, de asemenea, magnitudinea și direcția gradientului. Deci asta este componenta unu. Apoi, componenta a doua este un detector de vârf, cooperant cu o estimare a gradientului stabilită, care funcționează astfel încât direcția gradientului asociată cu fiecare punct de gradient este utilizată pentru a selecta setul respectiv de puncte de gradient învecinate. Deci aceasta este cuantizarea direcției gradientului. Deci alegem un anumit set de -- o anumită direcție și operăm astfel încât magnitudinea gradientului asociată fiecărui punct de gradient să fie comparată cu fiecare magnitudine a gradientului respectiv a respectivului set de mărimi a gradientului învecinat pentru a determina care magnitudini ale gradientului compensate sunt un maxim local de gradient magnitudine inadecvată direcția gradientului menționată. Deci, pe scurt, este o suprimare non-maximală în direcțiile gradientului cuantificat. Deci sunt două. Și apoi cea de-a treia și ultima parte este un interpolator subpixel care cooperează cu detectorul de vârf menționat , funcționând astfel încât maximul local menționat al mărimii gradientului și un set de mărimi ale gradientului învecinate sunt utilizate pentru a determina o poziție interpolată a marginii de- a lungul unui profil de magnitudine a gradientului unidimensional, incluzând un punct de gradient asociat cu respectivul maxim local al mărimii gradientului și așa mai departe. Deci, acesta este pasul de interpolare, unde potrivim parabola și găsim vârful parabolei. Și asta este tot revendicarea 1. Deci, de ce trebuie să existe alte revendicări? Ei bine, treaba este că cineva ar putea veni mai târziu și să spună, ei bine, așteaptă puțin. Noi deja am inventat asta. Și așa ai pretinde că unul a fost suflat din apă. Deci ceea ce faci este să te specializezi mai mult. Adăugați și alte lucruri care sunt în specificația dvs. și le rafinați din ce în ce mai mult, și mai mult, în speranța că, dacă mai târziu, în litigiu , pretențiile timpurii care sunt foarte largi sunt aruncate, atunci cele înguste vor rămâne în picioare. Deci dacă încalcă și toate celelalte condiții, atunci ești bine. Deci, de exemplu, revendicarea 2, deci avem o revendicare care cuprinde în plus o poziție simplă. Deci ultimul pas pe care l-am descris, acel pas de poziție plană în care intersectați gradientul și o altă linie, care nu este în revendicarea 1. Deci, dacă presupunem că revendicarea 1 este eliminată, atunci dacă utilizați această caracteristică de poziție plană, atunci veți încălca revendicarea 2. Deci aceasta este o revendicare condiționată. Și continuă așa. Evident, nu vom citi toate acestea. Revendicarea 3 este aparatul din revendicarea 2. Deci revendicarea 2 depinde de 1. Revendicarea 3 depinde de 2, care la rândul său depinde de 1. Și revendicarea are o linie direcțională de gradient. Deci oferă un mod special de a calcula acel punct de poziție plană. Și apoi mai sunt multe, evident. Și devin din ce în ce mai detaliate, astfel încât să-l protejați în cazul în care se dovedește că, ei bine, revendicarea 1, dacă puneți cap la cap scrierile lui Roberts și Irwin Sobel, este acolo. Și așa ai nevoie de altceva. Atunci să vedem. Unde devine din nou interesant? Revendicarea 11 începe totul din nou, unde revendicarea 1 a făcut cu o schimbare că aceasta este o funcție plus înseamnă revendicare. Deci, aici, în loc să spuneți că aveți un aparat pentru estimarea gradientului, mijloace de estimare a gradientului pentru estimarea magnitudinii gradientului, mijloace de detectare a vârfurilor pentru mijloace de interpolare subpixel. Deci nu este specific dacă este vorba despre aparat, sau metodă, sau orice altceva. Și din nou, asta are de-a face cu istoria tiparelor, că ei trebuiau să facă asta. Și așa totul se repetă. Deci avem revendicările de la 1 la 10. Și apoi se repetă în funcție plus înseamnă până la 21. Și apoi la 21, totul se repetă cu aparatul înlocuit cu metoda. Așa că ajungi cu o problemă relativ simplă. Și se termină cu 34 de revendicări? 34 de revendicări. Acum, în zilele noastre, te penalizează pentru asta, pentru că trebuie să plătești în plus dacă ai mai mult de 20 de pretenții. Deci lucrurile se schimbă. Deci, de exemplu, în acest moment... să vedem. Înainte de aceasta, regula era ca brevetul dumneavoastră să fie valabil timp de șapte ani și jumătate de la eliberare. Și asta a fost diferit de felul în care a făcut-o restul lumii. Și, de asemenea, a fost nedrept pentru că lucrurile ar putea fi amânate în procesul de brevetare. Deci ceva ar putea apărea la 10 ani după ce îl depuneți. Și apoi mai ai 10 ani doar din cauza acelei întârzieri. Și au fost trucuri de a folosi asta. De exemplu, Jerome Lemelson a susținut că el a inventat viziunea artificială în 1956. Și avea un șir de brevete care documentau acest lucru. Și unele dintre ele se numeau brevete de submarine, pentru că nu știai că sunt în curs de dezvoltare. Dar depindeau de brevetele anterioare. Și oricum, așa că Congresul a decis să elimine această idee. Și astfel lucrurile s-au schimbat. Și cred că deja, în acest moment, regula era la 20 de ani de la depunere, în loc de șapte și jumătate după emitere. De asemenea, au eliminat regula potrivit căreia cine are prioritate. Așa că să presupunem că te gândești la o idee și altcineva se gândește la idee și depui brevete și apoi ai aceste două brevete aflate în conflict. Cine obține brevetul? Ei bine, cândva, oricine a inventat primul. Și așa, pe vremuri, toți inginerii transportau cărți cu pătrate în ele și fiecare pagină numerotată. Și în fiecare zi, își cereau prietenilor să se deconecteze de la pagina. De ce? Ei bine, pentru că astfel, ai putea documenta că te-ai gândit la această idee pe 3 aprilie. Nu ai avut-o pe deplin concretizată. Dar paginile erau numerotate. Deci nu puteai să înșeli și să rupi pagini sau să adaugi pagini. Și semnătura oamenilor era acolo spunând că, oh, da, am văzut asta. Chiar a scris asta la vremea aceea. Și asta a fost o durere uriașă pentru că tot ce ai făcut, de fiecare dată când te gândeai la ceva, trebuia imediat să- l notezi. Și așa au decis, nu, uitați asta. În plus, uneori a fost foarte greu de demonstrat. Și astfel noua regulă este supunerea. Când îl trimiți , asta e data. Și dacă îți faci timp pentru a-l trimite, păcat. Ai pierdut. Deci, oricum, acesta este un brevet tipic. Este unul relativ simplu. Dar are câteva aspecte interesante de viziune artificială, despre care vom vorbi acum. Așa că am menționat că, în multe cazuri, imaginile sunt compuse din patch-uri care sunt aproape uniforme în luminozitate. Iar lucrurile interesante sunt la tranziții. Și am menționat că acest artist olandez, Piet Cornelis Mondrian, s-a îmbogățit desenând lucruri care doar aveau pete dreptunghiulare de culoare. Și este artă? Nu știu. Eu nu sunt în acel domeniu. Dar oricum, așa că eu îl numesc modelul Mondrian al lumii. Și astfel, în acel model al lumii, mai degrabă decât să ai milioane de pixeli, poți condensa lucrurile în doar vorbind despre margini. Sau dacă doriți să găsiți unde este ceva pe o bandă transportoare, aveți nevoie doar de margini. Dacă încercați să aliniați diferite straturi ale unei măști cu circuit integrat, atunci aveți nevoie doar de margini. Deci, ce este o margine? Ei bine, și ce este un detector de margini? Deci, din nou, nefolosit, remarcabil, acest lucru este de fapt bine subliniat aici. Deci, detectarea marginilor poate fi definită informal ca un proces de determinare a locației limitelor dintre regiunile imaginii care sunt diferite și aproximativ uniforme ca luminozitate. Asa de bine. Și apoi, mai detaliat, o margine poate fi definită util ca un punct dintr-o imagine în care magnitudinea gradientului imaginii atinge un maxim local în direcția gradientului imaginii . Deci asta e important. Nu este doar maximul local. Este în acea direcție. Și apropo, au menționat încă una, care este locul în care derivata a doua a luminozității traversează 0 în direcția gradientului imaginii. Deci gândește-te la asta. Acum asta are sens. Deci, dacă prima derivată atinge un maxim, cum găsiți maximul? Ei bine, mai diferențiați o dată și setați rezultatul egal cu 0. Deci, o modalitate alternativă de a determina unde este o margine să se uite la derivatele secunde și să se uite la 0 încrucișări. Și a fost folosit și asta. Și apropo, atunci ei menționează multi-scale. Acum amintiți-vă, asta a fost cu ceva timp în urmă, dar chiar și atunci. Astfel, este cunoscut în domeniu să se realizeze detectarea marginilor la o multitudine de frecvenţe spaţiale sau scări de lungime, după cum este adecvat aplicaţiei. Așa că o să ne prefacem că lucrăm direct la rezoluția completă. Dar imaginați-vă că pentru multe aplicații, nu ați dori să faceți asta sau ați dori să lucrați la rezoluții multiple. Și astfel, pentru acest brevet, nu vom intra în asta, pentru că ei nu intră în el. Deci avem o tranziție de imagine. Deci, în primul rând, iată un avantaj ideal. Deci aceasta este o secțiune transversală peste margine. Este o funcție de pas. Ei bine, se dovedește, de fapt, că nu e bine. Nu vrem asta. Nu vrem rezoluție infinită. Asta pare o nebunie pentru că crezi că cu cât de rezoluție, cu atât ar trebui să fim mai fericiți. Ei bine, problema este să presupunem că acum imaginăm asta pe un dispozitiv care are pixeli discreți. Deci măsurăm luminozitatea în acele puncte. Acum putem spune unde este marginea? Ei bine, să presupunem că mișc puțin marginea. Nimic nu se schimbă în ceea ce privește măsurătorile de luminozitate în acele puncte. Deci, de fapt, în acest caz foarte idealizat, îl pot muta o lățime întreagă de pixeli înainte și înapoi. Nimic nu se schimba. Deci invers, asta înseamnă că nu îl pot măsura acolo unde se află în poziția completă a pixelului. Deci acest lucru este de fapt nedorit. Și, în principiu, aceasta este o formă de aliasing. Deci nu vrem un pas perfect. Vrem ceva cu bandă limitată, astfel încât atunci când îl eșantionăm, să nu introducem componente de frecvență artificială, care este un mod de a ne gândi la ce nu merge bine aici. Deci căutăm marginea. Și am spus că o metodă este să luăm derivata și să găsim vârful derivatei. Și apoi am menționat, de asemenea, că, eventual, s- ar putea să doriți să luați derivata a doua și să căutați trecerea cu zero. Deci acesta a fost de fapt un joc popular pentru o vreme, pe care ne-am uita la derivate secunde. Și în cazul imaginilor care sunt bidimensionale, care este generalizarea derivatei a doua? Este Laplacian. Deci, în loc de acești operatori de margine, care ne oferă o estimare a gradientului de luminozitate, vom lua Laplacianul și vom găsi trecerile cu zero. Și una dintre ideile atrăgătoare despre asta a fost că, ei bine, trecerile cu zero sunt curbe închise. Este ca o hartă de contur. Deci ai asta... am vorbit despre gândirea imaginii ca la o suprafață în 3D, unde înălțimea este luminozitatea. Ei bine, atunci putem desena contururi, izofote, un anumit nivel. Și putem trage 0. Ei bine, nu cu imaginile în sine. Dar odată ce luăm laplacianul, vom avea atât valori pozitive, cât și negative. Și putem desena conturul la 0. Ei bine, contururile sunt închise, altfel nu vei ști unde dispar de pe marginea imaginii. Așa că a fost foarte atrăgător pentru că de multe ori, alți detectoare de margine se stingeau. Și atunci nu prea ai ști unde era marginea și așa mai departe. Deci a fost un joc interesant pentru o vreme. Dar se dovedește că obții performanțe mai proaste în prezența zgomotului. Și putem discuta despre asta în termeni de convoluție și așa mai departe. Dar nu vom face asta pentru moment. Deci derivata a doua. Și este menționat pe scurt în brevet. Dar nu se urmărește. Și atunci cu ce corespunde asta în original? E. Deci ceea ce facem cu adevărat este să căutăm un punct de inflexiune. Ce este un punct de inflexiune? Ei bine, imaginați-vă că conduceți de-a lungul acestei curbe. Virați la stânga. Virați la stânga. Virați la stânga. Virați la stânga. Oh, acum fac la dreapta. Acum fac la dreapta. Deci punctul de inflexiune este locul în care schimbați direcția. Și în ceea ce privește derivatele, este maximul derivatelor. Deci, acestea sunt moduri diferite prin care am putea defini unde este marginea. Deci, să vorbim puțin despre estimarea gradientului de luminozitate. Deci ați văzut în cifre acolo un număr de operatori. Deci asta a fost ideea lui Larry Roberts. Și este foarte ușor de calculat, foarte ieftin de calculat. Dar este un unghi de 45 de grade. Deci care a fost ideea aici? Deci, de ce să nu operați în x și y? Ei bine, se pare că acest lucru face posibil ca cei doi operatori să se refere la același punct de referință. Deci, unde estimăm derivata? Ei bine, ați putea spune, OK, eu estim derivata aici luând diferența dintre această valoare și aceea. Și altcineva ar putea spune, ei bine, noi estimăm derivatul aici pentru că iau diferența dintre valoarea de aici și valoarea de acolo. Și vom vedea într-o secundă că niciunul dintre acestea nu este întemeiat. Este mai rezonabil să spun că estim derivatul acolo. Și rezistența la asta, desigur, este că nu este un punct de grilă. Deci nu este un pixel. Este la jumătatea distanței în pixeli. Dar cui ii pasa? Poate că atunci este un loc bun pentru a estima derivata. Și așa Roberts a folosit acești doi operatori. Și apoi a folosit suma pătratelor și a remarcat că, în mod convenabil, aceasta este de fapt aceeași ca și cum ați fi calculat suma pătratelor de gradienți în sistemul de coordonate original. Pentru că dacă faci rotația de 45 de grade , cosinus 45 de grade, sinus 45 de grade, este 1 peste rădăcina pătrată a lui 2. Obții același lucru, cu excepția factorului de proporționalitate, deoarece acestea sunt mai departe decât distanța dintre pixeli cu o rădăcină pătrată de 2. Deci astea nu sunt la fel. Dar sunt legate de un anumit număr. Sunt proporționale unul cu celălalt. Deci acesta este gradientul lui Roberts. Și apoi l-am avut pe Irwin Sobel. Ei bine, să abordăm mai întâi această întrebare despre estimarea derivatelor. Și poate că am făcut deja un pic din asta. Dar să o facem cu mai multă atenție. Deci avem această moleculă de calcul pentru E de x. Și știm din seria Taylor. Și acum, putem folosi asta pentru a-- așa că atunci când facem asta, f-ul lui x se anulează. Și apoi împărțim la delta x. Așa că obținem... asta e partea pe care o dorim. Încercăm să estimăm derivata. Deci e perfect. Și apoi împărțim la delta x. Deci obținem delta x 2. Deci acesta este termenul de eroare de ordinul cel mai mic. Deci asta ne dorim. Și asta e partea pe care nu o dorim. Și când vorbim despre cât de bună este o formulă, ne vom uita la două lucruri. Unul este ordinul termenului de eroare de ordinul cel mai mic, care aici este de ordinul doi. Și apoi celălalt este multiplicatorul. Presupun că avem două metode care au aceeași ordine pe termenul de eroare cel mai mic. Apoi le putem compara în funcție de mărimea acestui multiplicator. Dar cel mai important este mai întâi ordinea. Deci acesta nu este foarte bun, pentru că chiar și funcționează perfect pe linie dreaptă. Dar chiar dacă are un pic de curbură, va primi răspunsul greșit din cauza asta. Deci, să ne uităm în schimb la f de x plus f de x minus delta x. Deci iată, am spus, OK, acesta este x-ul nostru. Și acesta este x plus delta x. Și, evident, încercăm să obținem derivata la x. Acum spunem, OK, acesta este x. Adică x minus delta x. Și încercăm să obținem derivatul acolo. Și dacă trecem prin aceeași aritmetică, obținem aceeași eroare de dimensiune. Dar semnul este răsturnat. Ei bine, ceea ce ai putea spune este, ei bine, hai să facem doar media acestor două. Apoi putem scăpa de acel termen de eroare de ordin scăzut. Și atunci dacă le facem media, ceea ce înseamnă suma acestor două împărțită la 2, atunci obținem doar f din x. Asta ne dorim. Și asta se anulează. Ei bine, dar atunci sunt termeni de ordin superior. Așa că mai bine completăm termenii de ordine superioară. Deci aici, avem delta x pătrat peste 6 f triplu prim al lui x. Și, deci, ceea ce observăm este că acum, avem un termen de eroare de ordin mai mare , ceea ce este de dorit. Deci această formulă nu va funcționa perfect doar pentru o linie dreaptă. Dar chiar dacă linia dreaptă are un pic de curbură , o derivată a doua, atâta timp cât derivata a treia nu este prea mare, vom fi bine. Deci, ce înseamnă de fapt media celor două? Ei bine, înseamnă că luăm... că de fapt, am folosit acel operator. În regulă? Și aceasta este o aproximare perfect rezonabilă a unei derivate. Scădem două lucruri. Și împărțim distanța dintre locul unde am măsurat aceste două lucruri. Și atunci ai putea spune, ei bine, ce se întâmplă dacă, în schimb, aș accepta această idee? Dar acum spun că o să găsesc acolo o estimare a derivatului. Și obiecția ar fi, ei bine, nu este o poziție de pixel. Dar asta nu contează. Putem avea chiar și derivatele să fie compensate cu 1/2 pixel, atâta timp cât ne amintim că, mental, asta sa întâmplat. Acum pot să parcurg și să folosesc seria lui Taylor, bla, bla, bla. Dar, de fapt, tot ce trebuie să fac este să folosesc această formulă și să împart delta x la 2, pentru că acesta este același lucru cu delta x împărțit la 2. Deci, în acest caz, formula mea va fi f plus și apoi delta x peste 2 la pătrat împărțit la 6. Deci acum trebuie să compar doi operatori care au același termen de eroare de ordinul cel mai mic. Și acum mă uit la magnitudinea factorului în fața termenului de eroare. Și, evident, acesta este 1/4 din dimensiunea celuilalt. Deci acesta are un avantaj în acest sens. Pot obține un termen de eroare de ordin relativ ridicat. Și pot avea un mic multiplicator, astfel încât eroarea să fie de fapt mai mică. Și are sens. Aici, comparăm lucruri care sunt relativ îndepărtate și vedem-- deci, evident, ele vor fi afectate mai mult de derivate de ordin superior decât în ​​acest caz, în care mă uit la lucruri care sunt apropiate. Acum e bine pentru Ex. Dar cum va funcționa asta cu Ey? Pentru că dacă iau această idee în ambele direcții, deci iată operatorul meu Ex. Și apoi există un potențial operator Ey. Ei bine, asta nu va funcționa, pentru că aceasta este o estimare bună a derivatei x acolo. Și aceasta este o estimare bună a derivatei x-- derivatei y acolo. Și acestea nu sunt consistente. Și, așadar, ceea ce fac, ei bine, o modalitate de a face față este că, deoarece acestea acum, dacă trec prin povestea aia din seria Taylor, acestea sunt estimări bune ale derivatei x aici. Și aceasta este o estimare bună a derivatei y aici. Și oh, acestea sunt același punct. Așa ajungem la asta. Și când am vorbit despre fluxul optic fix, am menționat deja că așa vrei să calculezi derivatele. Și ei bine, acolo, nu aveam nevoie doar de Ex, Ey, Et, nu avem nevoie doar de Ex și Ey, ci de Et. Și deci acolo, avem de-a face cu un cub întreg. Și astfel, de exemplu, pentru a calcula derivata în direcția y, putem face asta. Și sub materiale, există explicația detaliată a modului de a face fluxul optic fix. Și asta e acolo. Deci acum povestea nu se termină aici, pentru că acum am putea vorbi despre eficiență. Și de exemplu, cât de mult lucrează acești operatori-- ei bine, aici avem trei-- îi putem scădea pe acești doi. Adică 1. Scădeți cei doi. Adică 2. Apoi le adunăm. Deci sunt 3 operații pentru asta și 3 operațiuni pentru asta. Dar, de fapt, ei împărtășesc aceste subcomputații. Și aceasta este 1 operație. Și aia este 1 operație. Deci 3 plus 3 este 6. Deci 1 operație și 1 operație. Și apoi le combinăm. Le adăugăm pentru a obține E sub x. Și le scădem pentru a obține E sub y. Deci este 1 din plus 1 din. Deci un total de 4 ofs. Deci, prin aranjarea inteligentă a calculului, îl putem reduce de la șase operații înainte. Și ați putea spune, cui îi pasă? Ei bine, treaba este că faci asta în fiecare dintre câteva milioane de pixeli. Deci, acesta este un loc în care, de fapt, eficiența contează. Și nu voi trece prin asta. Dacă faci asta în mod evident, este nevoie, nu știu, de 21 de ori pentru a face asta. Dacă obțineți Ex, Ey, Et, în mod evident, obțineți 21 ofs. Și vă las pe voi să... și uneori oamenii vin cu soluții surprinzătoare care înving soluția evidentă cu un factor semnificativ. Și apropo, există operatorul încrucișat al lui Roberts. Deci era cu mult înaintea timpului său. Și cum rămâne cu Irwin Sobel? Așa că Irwin Sobel s-a uitat la chestiile astea. Și aici a ajuns. El a spus, ei bine, acesta este, evident, un mod bun de a face asta. Este o estimare a derivatei la acel pixel. Și nu are un termen de eroare de ordin scăzut. Dar apoi trebuia să o facă în 2D. Așa că a replicat-o. Dar de ce a replicat-o în felul special în care a făcut-o? Ei bine, ne putem gândi la asta în acest fel. Omit consoanele deoparte. Dar, practic, facem o medie. Deci aceasta este o circumvoluție. Deci acesta este operatorul de bază. Și acum o vom netezi făcând o medie pe un bloc de 2 pe 2, care corespunde convoluției cu aceasta. Și dacă doriți, putem pune 1 peste 4. Nu mă îngrijorează acei multiplicatori momentan. Și ce obținem? Ei bine, sper că îți amintești ceva despre convoluție. Așa că întoarcem unul dintre acestea. Ei bine, nu face nimic la asta pentru că este simetric. Și apoi îl schimbăm peste celălalt. Deci prima poziție în care obținem ceva diferit de zero este atunci când îl avem în această poziție. Și ce obținem? Obținem minus 1. Atunci iau acest operator și îl mutăm unul la dreapta. Acum se suprapune în două locuri. Primesc minus 1 ori 1 este minus 1 plus 1 ori 1. Adică 0. Deplasați-l încă o dată. Acum se suprapune doar aici. Și primesc plus 1. Apoi îl mut cu un rând în jos. Și acum o aliniez aici. Și primesc 1 1 ori minus 1 minus 1. Adică minus 2. Îl schimb unul la dreapta. Toate se anulează, 0. Deplasat unul la dreapta, primesc 1 1 ori 1 1 este plus 2. Mai deplasați-l în jos, primesc minus 1 0 plus 1. Și există fostul operator al lui Irwin Sobel. La fel și în direcția y. Așa că ne putem gândi la asta doar ca la o modalitate de a netezi. Iar netezirea are ca efect reducerea zgomotului. Deci, din păcate, are, de asemenea, efectul de a estompa lucrurile, făcându-le-- deci există un compromis evident. Putem reduce gradientul marginii în același timp în care reducem zgomotul. Și astfel Irwin Sobel a reușit să evite problema offset-ului de 1/2 pixeli având doi operatori, fiecare dintre care este decalat de 1/2 pixeli. Și atunci când le uniți , obțineți 0, sau 1 sau minus 1 offset. Deci acesta este partea din față a acestei operațiuni. Și ei discută... ei nu spun, ar trebui să folosești asta sau asta. Ei doar dau diverse formule și cea preferată. Deci, de multe ori, se va spune implementarea preferată. Și acesta este unul complicat pentru că mai târziu, dacă cineva spune, oh, dar eu nu am implementat implementarea dvs. preferată, avocatul va spune, ei bine, vorbiți despre o implementare exemplară, nu despre ceea ce este revendicat în brevet. Ceea ce este revendicat în brevet este în revendicări. Ceea ce spui în specificație este doar o modalitate prin care cineva să implementeze acest lucru. Și doar pentru că al tău nu o implementează exact în același mod este irelevant. Ceea ce este relevant este dacă încalcă încălcarea revendicărilor. Și, așadar, de multe ori, vor exista cuvinte despre, într-o implementare preferată, câștigul este de 10 sau orice altceva. Deci, dacă câștigul tău este 11, asta nu te scuză, deoarece partea importantă este dacă pretențiile îl acoperă sau nu. Deci asta este partea din față. Și apoi vom vorbi despre următorul pas. Deci, următorul pas este conversia de la coordonatele carteziene la polare pentru gradientul de luminozitate. Și vom face asta mai ales data viitoare. Dar pentru oamenii de programare, îl vom numi atan2 dintre aceste două argumente. Și motivul este că nu vrem să avem împărțirea cu 0, ceea ce o putem evita folosind versiunea cu două argumente a lui atan. Deci acum avem o magnitudine gradient. Și avem o direcție. Iar următorul pas este cuantificarea direcției. Deci ceea ce încercăm să găsim este un maxim în direcția peste margine. Deci, să presupunem că marginea merge în acest fel, luminozitatea E1, E2. Apoi vrem să scanăm peste margine și să căutăm un maxim, E0. Iar direcția este dată de E theta. Deci, de aceea avem nevoie de E theta și e0. Și, din păcate, nu avem puncte în toate locurile din avion, doar pe această grilă. Deci ne putem ocupa cu ușurință doar de direcții cuantificate. Așa că avem direcții ale busolei, opt direcții posibile. Și căutăm un maxim. Și acum pe o altă grilă, am avea o cuantizare diferită. Dar tot am avea o problemă. Deci cel central va fi G0. Și apoi, să presupunem că aceasta este direcția gradientului nostru cuantificat. Și apoi vom numi gradientul de aici G plus și gradientul de acolo G minus. Și așa avem acele trei valori. Și în mod clar, pixelul central este unul important. Este pe margine, dar cuantizat la pozițiile pixelilor. Deci nu ne oferă acuratețe în subpixeli. Așa că acum, în primul rând, păstrăm doar dacă... așa că parcurgem imaginea. Și ignorăm nonmaxima. Și acum ceea ce ne dorim de fapt este ceva asimetric. Deci s-ar putea întâmpla ca G0 să fie egal cu G plus sau egal cu G minus. Și am putea spune, ei bine, asta înseamnă că nu este un maxim. Și doar aruncă-l afară. Dar, desigur, este greșit, pentru că trebuie să păstrăm unul dintre aceste două puncte. Dar nu vrem să le păstrăm pe amândouă, pentru că atunci avem două puncte pe margine care sunt puse pe margine care sunt la un pixel una de alta. Deci nici asta nu e bine. Așa că trebuie să avem o departajare. Deci este important ca această condiție să fie asimetrică. O putem face asimetrică în alt mod. Va funcționa și asta. Dar trebuie să avem o modalitate de a trata un caz, în care G0 este egal cu G plus sau egal cu G minus. Și atunci încercăm să găsim vârful. Acum cum merge curba? Ei bine, nu știm. Dar ne putem imagina diverse... ei bine, nu este o parabolă foarte bună. Dar avem... iată parabola noastră. Luăm derivatul său. Și acolo este vârful. Și în ceea ce privește aceste cantități de aici, dacă treceți prin și înlocuiți, dacă vă potriviți cu a, b și c, atunci obțineți această formulă. Și ei bine, aici am folosit x. Aici folosesc S. Și putem arăta important că S calculat în acest fel este 1/2, este limitat ca mărime la 1/2. De ce este asta? Ei bine, dacă ar fi, să spunem, 3/4, asta ar însemna că am fi mai aproape de acest punct. Și atunci acesta ar trebui să fie maxim. Deci poți să arăți că nu se poate întâmpla. Deci aceasta este gama sa de soluții, cu condiția ca G0 să fie maxima. Și poți înțelege ce se întâmplă aici. Deci, dacă G plus este același cu G minus, S este 0. Avem o parabolă echilibrată. Avem această situație. Și în acest caz, bineînțeles că ați spune, oh, asta e dacă acestea două sunt la fel. Și apoi se schimbă cu cât există mai multă diferență între cele două părți. Și cu cât se mișcă? Ei bine, ne uităm la derivata a doua, care este această diferență aici. Ei bine, nu este derivata a doua, ci proporțională cu derivata a doua. Deci ne uităm la media G plus și G minus și o comparăm cu acest punct. Și cu cât această diferență este mai mare, cu atât este mai mare derivata a doua. Deci corespunde doar cu -- b este prima derivată. a este al doilea. Deci, aceasta este o modalitate de a obține acuratețea subpixelilor. Și apoi celălalt mod pe care îl menționează este modelul triunghiului mic. Și asta pare pur și simplu ciudat. Dar din anumite motive, există circumstanțe în care este un model destul de bun. Deci, din nou, avem G0, G plus, G minus. Să vedem. Deci [INAUDIBIL]. Deci, din nou, cu trei măsurători, avem suficiente informații pentru a se potrivi acestui model. Presupunerea modelului este că pantele celor două drepte sunt aceleași. Și apoi trebuie doar să poziționăm vertical în poziție orizontală. Și în acest caz, S se dovedește a fi... și din nou, acea formulă este în brevet. Și este destul de ușor de derivat. Așa că vom mai vorbi despre acest brevet. Dar există câteva probleme tehnice interesante în afară de brevetații la care vom ajunge. De exemplu, un motiv pentru care o margine ar putea să nu fie o muchie de pas unitară este din cauza defocalizării. Și deci întrebarea este, care este forma acelei curbe? Pentru că toată afacerea asta aici, doar inventăm lucruri. Spunem, oh, poate este o parabolă. Sau poate e un triunghi. Ei bine, nu putem să ne dăm seama exact ce este? În special în cazul defocalizării, ar trebui să fim capabili să ne dăm seama ce... evident, nu va mai fi un pas. Va fi mânjit pentru că este încețoșat. Este în afara focalizării. Dar ce este asta? Așa că vom vorbi despre asta și vom vedea cum afectează asta metoda noastră de a recupera poziția actuală a marginii . Și apoi vom vorbi despre câteva alternative la ceea ce este în brevet. În special, această cuantificare a direcției gradientului este problematică, în special pe grila pătrată, unde avem doar opt direcții. Și așa vom vorbi despre alte modalități de a proceda care nu au exact cuantizarea cauzei. Ca și aici, găsim un maxim în acea direcție sau în această direcție. Dar dacă gradientul este de fapt intermediar, nu este. Oricum, deci sunt mai multe. Și pare o problemă foarte simplă. Dar arată cum, dacă vrei o performanță foarte bună, există o mulțime de detalii de care să-ți dai seama, cum ar fi această afacere , care este o modalitate bună de a calcula derivatele?