Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Passiamo ora ad uno dei rilevatori di funzionalità più significativi che sono stati sviluppati in visione informatica conosciuta come la funzione invariante di scala o SIFT. SIFT è stato sviluppato da una persona David Lowe della University of British Columbia. Si è sviluppato di nuovo nei tardi Novanta, ma dal momento in cui è stato pubblicato in precedenza, era vicino al 2004. A questa data ha superato, penso, 56.000 o 57.000 citazioni. Che parla dell'impatto che ha avuto sulla comunità nell'ultimo decennio e mezzo. L'obiettivo principale di SIFT è quello di trasformare i dati di immagine in coordinate di punti chiave invarianti. Quindi ancora una volta, molto simile al rivelatore d'angolo Harris. Il nostro obiettivo è estrarre punti chiave dalle immagini, ma andiamo a un passo più avanti ora. Oltre a rilevare quei punti chiave nelle immagini, vogliamo anche trovare un modo efficace per descrivere quei punti chiave. Un modo semplice di descrivere i punti chiave che abbiamo visto finora è X virgola Y, ovvero la posizione coordinata di quel punto chiave. Magari si può aggiungere una scala proprio come una sigma che abbiamo visto nella lezione precedente. Ma ora con SIFT si parlerà di una caratteristica descrittiva a pieno titolo, che descrive le caratteristiche locali intorno a quel particolare punto chiave. SIFT è fondamentale per molti problemi di visione di core e applicazioni, tra cui il riconoscimento, il motion tracking, la geometria multi - view, così via e così via. Per molti anni, fino a quando il deep learning divenne popolare, SIFT era esteticamente utilizzato per il semplice riconoscimento degli oggetti nelle immagini. (02.30) Come ho appena accennato, in SIFT il contenuto di immagini si trasforma in coordinate di feature locali, che sono ideali per la traduzione, la rotazione, la scala e la guaina. Così per esempio, ancora una volta, due immagini dello stesso oggetto prese da angoli diversi, diverse pose, forse diverse illuminazioni. Ma noi idealmente vogliamo garantire che gli stessi punti chiave siano rilevati in entrambe le immagini indipendentemente dalle variazioni di traslazione, indipendentemente dalle variazioni di rotazione, indipendentemente dalle variazioni di scala, oltre che di taglio, la guaina è una trasformazione prospettiva. (03.15) SIFT è composto da quattro passi e passeremo attraverso ciascuno di essi singolarmente. Ma prima di coprirli dovrei ricordare che SIFT è un ottimo sforzo ingegneristica. Ogni passo ha una motivazione adeguata sul perché è stato sviluppato e quale parte dell'obiettivo ha aiutato a soddisfare. Vi consiglierò vivamente di leggere la carta SIFT, solo per capire come è stata scritta una bella carta ingegneristica in visione informatica. Il primo passo di SIFT è quello di fare quello che è noto come rilevamento di estrema space space. Questo è molto simile al rilevatore di scala Harris Corner. Anche se c'è un po' di più di quello, che chiarirò in qualche tempo. Il secondo passo riguarda la localizzazione dei punti chiave. Una volta trovato un punto chiave, possiamo provare a scoprire esattamente dov' è quel punto chiave? Insomma, è forse mezzo pixel, un po' più in là, così via e così via, potrebbe essere in location, potrebbe essere in scala anche. Terzo passo è determinare l'orientamento di quel punto chiave. C'è un motivo per cui cercheremo di determinare l'orientamento di quel punto chiave. Cercheremo di utilizzare le sfumature dell'immagine locale intorno a quel punto chiave per assegnare l'orientamento. E noi idealmente vogliamo preservare la scala di orientamento e la posizione per ogni caratteristica. Infine, come ho accennato, parleremo di come descrivi quei punti chiave in termini di informazioni locali su quel punto chiave. Ancora una volta, utilizzeremo alcune informazioni dalle sfumature, ma vogliamo sviluppare una rappresentazione per quel punto chiave, invariante a molte trasformazioni. Perché abbiamo bisogno di una rappresentanza? Ricordati che, abbiamo detto che se vuoi abbinare due immagini e stenderle insieme, dobbiamo confrontare i punti chiave in prima immagine in punti chiave della seconda immagine, avere una rappresentazione ti permette di confrontare. Altrimenti non saresti in grado di confrontare, basta coordinare le posizioni perché potrebbero essere molto diverse nelle due immagini. (05.33) Così il primo passo, come ho appena detto, è il rilevamento di estrema space space. E il modo in cui SIFT implementa questo è quello di costruire in primo luogo quello che è conosciuto come uno spazio di scala. Uno spazio di scala come mostrato nel diagramma qui sta semplicemente prendendo un'immagine, convolendolo con Gaussiano, cioè un'immagine. Poi convolerlo con i tempi K sigma. Così hai un altro Gaussiano con i tempi K sigma, cioè un'altra immagine, ma la dimensione dell'immagine rimane la stessa. Potrebbe essere solo più sfocato. Poi, si ha una convoluzione con un gaussiano con sigma quadrato K. Ancora una volta, la dimensione dell'immagine rimane la stessa. Non siamo sottocampionamenti in questo momento. Semplicemente rendendolo più sfocato a seconda di ciò che si sceglie di fare. Tutte queste immagini da quello che è conosciuto come un'ottava. Così avrete molte immagini di questo tipo in un'ottava, a seconda dei valori di K e di quante immagini desiderate. Nel passo successivo costruirete la vostra seconda ottava, dove l'obiettivo ideale sarebbe quello di sottocampionare l'immagine e poi ripetere lo stesso processo che avete avuto per la vostra prima ottava. Invece di fare un sub - campionamento e ripetere lo stesso processo, si può anche fare semplicemente una convoluzione gaussiana con due sigma. Ricordati che lo renderà più ampio. Così si può semplicemente fare una convoluzione gaussiana con due sigma e che vi dà un effetto simile come costruire una seconda ottava di immagini sottocampate. Ricordati quando prendi Gaussian 2 sigma, la tua diffusione sarà più ampia per la Gaussiana. Così si sfocerà più pixel e probabilmente si considerano più pixel che sono più lontani, ovvero quello che sarebbe successo se avesse sottocampionato e poi Gaussiano con sigma come deviazione standard. (07.39) Per essere in grado di rilevare l'estrema tra questi gaussiani, idealmente vogliamo usare l'idea di Laplaciani. Ricordate, ancora, se ricordate il nostro Laplaciano come rivelatore di bordo, abbiamo detto che a differenza di un rivelatore di bordo come Sobel, dove si ottengono alte intensità, ovunque ci sia un bordo, per un Laplaciano si ottiene un bordo ogni qualvolta ci sia una traversata zero, per favore torna indietro e rinfresca la lezione su Laplacian. Abbiamo detto, ogni qualvolta il Laplacchi assume un valore zero ed è circondato da alcune intensità, si può supporre che ci siano informazioni edge. Quindi idealmente vogliamo usare un Laplacchi per poter ottenere le informazioni di angoli e spigoli nell'immagine. Ma ricordate che ne abbiamo parlato in ultima lezione che Laplacchi può essere implementato come una differenza di Gaussians. Quindi, il che significa che tutti questi gaussiani che si hanno nella prima ottava, ricordate, una di quelle immagini sarebbe stata G di sigma, una di queste, G di K sigma, G di K square sigma, così via e così via, quelle sono i filtri. Avresti idealmente convolato la tua immagine di input con ciascuno di quei filtri. Ora, si farebbe semplicemente la differenza tra i successivi Gaussiani sulle immagini in ottava, e otterrete una serie di differenze di immagini gaussiane, che, ricordate, è molto simile al Laplacchi di quelle immagini originali. Così si costruiscono queste diverse immagini gaussiane in ogni ottava separatamente. (09.30) scriveremo che come D (x, y, sigma) è uguale a I-hat (x, y, sigma) - I-hat (x, y, k sigma), dove io - cappello è la convoluzione di un gaussiano con l'apposito Sigma con l'immagine originale. Stiamo solo scrivendo matematicamente, qualunque cosa abbiamo descritto finora. (09.50) Ora per trovare la rilevazione dell'estrema space space, quello che faremo è per ogni pixel, quindi diciamo che prendete quel pixel incrociato, nell'immagine a destra. Prendete un tre di tre quartiere intorno a quel punto a sua immagine. E poi si prende una tre traversa tre di quartiere nell'immagine sulla scala più alta e una tre traversa tre di quartiere nella stessa posizione nella scala più bassa. Con questo avrai una serie di 27 pixel totali e nove pixel sulla parte superiore sulla scala superiore, 9 pixel sulla scala inferiore e 9 pixel nella scala appropriata, tra cui il pixel al centro. Così hai tutti questi pixel dato a te. (10.41) E quello che si fa ora è confrontare un pixel con tutti i 26 pixel dentro e intorno. Ecco quindi che ci sarà intorno in termini di posizione, spaziale oltre che intorno a esso in termini di scala, la scala più alta e la scala più bassa. E poi, scegli un pixel con, se è più grande o più piccolo di tutti i 26 pixel intorno. Così si selezionano sia il minimo che il massimo di tutti quei 27 pixel in un quartiere spaziale e scala. Ecco perché chiamiamo questo rilevamento di estrema space space. Stiamo quindi cercando di rilevare l'estrema sia in scala che nello spazio. Questo è il tuo primo passo. (11.30) Così individuiamo punti interessanti, scala invariante e orientamento in una certa misura, usando DOG o differenza di Gaussiane. Ricorda, ancora, la differenza di Gaussians è un'approssimazione di un Laplaciano di Gaussiano. Basta un chiarimento qui. L'ultima volta abbiamo detto che la differenza di Gaussiano è un'approssimazione del Laplaciano corretto a Laplaciano di Gaussiano. La differenza di gaussiano è un'approssimazione al Laplaciano di Gaussiano. Il passo successivo è la localizzazione dei punti chiave. Noi idealmente vogliamo vedere se abbiamo trovato il punto esatto in cui abbiamo l'estreme, il massimo e il minimo. (12.20) Per fare questo, guarderemo a questa differenza di funzione gaussiana D come qualsiasi altra funzione. E se sapevamo che il nostro rivelatore di estrema era a questi punti blu, che qui sono noti come l'estrema rilevato. Idealmente vogliamo trovare questi punti rossi dove il minimo e il massimo sono effettivamente raggiunti. Quindi significa che minimo e massimo potrebbe essere raggiunto in tra due sedi coordinate o in tra due scale che abbiamo considerato in, nell'esperimento finora. Come lo troviamo? (12.55) Il modo in cui troviamo questo è quello di considerare l'espansione della serie di Taylor. Dato un s_0, che è dato da (x_0 y_0 sigma_ 0). E al delta S che è dato da (delta x, delta y, delta sigma), quindi s_0 è la scala minima o massima e coordinata che già hanno trovato nel passo precedente, nel passo uno e delta x, delta y e delta Sigma è quello che vogliamo trovare, per scoprire dove si raggiunge l'esatto estremo. Così scriviamo la tua tradizionale espansione di serie Taylor, che è data da D nel nostro caso, cioè la differenza di output gaussiano. s non plus delta s non è uguale a, è solo approssimativo, perché non stiamo considerando i termini di ordine più alti qui, circa D (s_ 0) + il primo derivato x delta s + 1/2 delta trasposto secondo delta s e termini di ordine superiore. (14.00) Ora, per scoprire dove questo attendo esattamente i minimi. Noi idealmente dobbiamo differenziare questa espansione di serie Taylor rispetto a s o delta s in questo caso particolare e così tutto per il delta s. Così diciamo che la nostra soluzione per i delta s, che denottiamo come il cappello da cui è dato, questo è un semplice derivato, lo differenziamo solo rispetto a s. Il derivato del primo termine andrà a zero. Secondo derivato, ricordare il gradiente viene valutato a s non. Quindi sarebbe una costante rispetto al delta s. Così rimarresti con, se si differenziasse questa espansione di serie Taylor, finirà per avere d (D) / d (s) + d ^ 2 (D) / d (s) ^ 2 delta s = 0. E quando si risolve per il delta s, la soluzione è quella che denottiamo da S hat. Nasce dalla semplice differenziazione dell'espansione della tua serie di Taylor. (15.20) Così, e come risolviamo questo? Possiamo calcolare il tuo secondo derivato e primo derivato, semplicemente per differenze finite. Ricordati che puoi prendere per completare il primo derivato sia nello spazio che nella scala. Si possono semplicemente fare differenze finite con le successive località a sinistra, le località successive sulla destra o le posizioni più alte sulla scala e così via. Semplici differenze finite, il modo in cui abbiamo parlato di sfumature di calcolo rispetto ai bordi esattamente allo stesso modo in cui questo può essere calcolato. E possiamo risolvere per delta s, che ci dà delta x, delta y, delta sigma, dove si ottiene l'effettivo estrema. Così ora sappiamo esattamente dove si raggiunge l'estremiato. Quindi questo potrebbe aiutarci a localizzare meglio. Una volta che lo facciamo, facciamo anche un altro passo. Vogliamo anche rimuovere ora tutti i punti, che hanno un basso contrasto e tutti i punti, che sono punti edge a causa dei loro punti di bordo, non sono angoli utili come abbiamo già parlato in ultima lezione. (16.26) Come eliminare i punti di contrasto bassi? Abbiamo rimosso punti di contrasto bassi semplicemente dicendo che se D a S hat, ovvero che la nuova posizione è più piccola di un certo valore 0,03. Se quel valore è piccolo, diremo che ha la differenza di output gaussiano c'è molto piccolo, ipotizzando ovviamente che i tuoi valori di immagine siano stati normalizzati in una certa gamma. Diremo che il valore è troppo piccolo e possiamo effettivamente rifiutarlo e non considerare quei punti per la futura elaborazione. Come si rimuovono i punti edge però? (17.00) Che dovrebbe suonare una campana, usando un approccio molto simile, come il rilevatore d'angolo Harris. Tuttavia, David Lowe e SIFT assume un approccio leggermente diverso e utilizza un gaussiano della tua D, che è di nuovo la tua differenza di output gaussiano, invece di usare una correlazione automatica. (17.20) Così ci sono state altre persone che hanno esteso anche il rilevatore d'angolo Harris per usare angoli basati sull'Hessian, SIFT utilizza quel tipo di approccio dove l'Hessian di D che può essere guardato anche come le curvature. L'Hessian in modo efficace, il secondo derivato cattura efficacemente le curvature così l'Hessian, che è la tua matrice di secondo derivata pairwise, ti dà un'idea di curvature in diverse direzioni o i cambiamenti in diverse, bruscamente cambiamenti in diverse direzioni. Quindi gli autovalori dell'Hessian sono anche buone stime per capire gli angoli. Molto simile al rivelatore d'angolo Harris, SIFT propone di usare l'Hessian, calcolando il suo più grande e più piccolo autovalore, che sono denotati da alfa e beta. Poi tu, ancora una volta, calcola la tua traccia e determinante della tua matrice hessiana, molto simile a come rileviamo per il rilevatore d'angolo Harris, e poi valutiamo diversi rapporti rispetto alla traccia e al determinante. (18.20) Così potresti scrivere la tua traccia sarà alfa plus beta. Il tuo determinante sarà, alfa x beta, quindi la tua traccia quadrata per determinante sarà (alfa + beta) ^ 2 /alfa x beta, che può essere scritta come (r beta + beta) / r beta ^ 2, dove r è scritto come alfa / beta .. (19.00) Utilizzando questo approccio, la traccia quadrata per determinante può essere scritta come (r + 1) ^ 2 / r e la via finale che abbiamo rimosso i bordi è notando che questa quantità ora sarà minima quando r è uguale a 1, perché quando r è uguale a 1, sappiamo che alfa e beta sono vicine tra loro, sono ugualmente alte, che è quello che vogliamo trovare i tuoi punti d'angolo. Così SIFT propone di rifiutare il punto chiave se la traccia della piazza hessiana per determinante di H è maggiore della soglia, perché si desidera che sia vicina al 1. Quindi se è maggiore della soglia, si rifiuta semplicemente il punto chiave. La carta SIFT originale utilizza r è pari a 10, in questo caso particolare, la soglia per essere 10 in questo caso particolare. (19.50) Così alla fine del passo due abbiamo determinato la posizione esatta e la scala ad ogni punto estreme. E abbiamo anche selezionato alcuni di questi punti chiave basati sulla stabilità eliminando punti chiave di contrasto così come i punti edge. (20.15) Ora arrivo al passo successivo, che sta per stimare l'orientamento di questi punti chiave. Iniziamo prima chiedendo, perché abbiamo davvero bisogno dell'orientamento? La risposta è semplice. Vogliamo aiutarlo a ottenere invarianza di rotazione ottenendo un senso di orientamento e questo diventerebbe chiaro quando descriveremo come faremo. Così usiamo la scala del punto per scegliere l'immagine corretta. Ricordati ora che ogni punto chiave è denotato come (x, y, sigma), dove x e y sono le posizioni coordinate e sigma è la scala in cui è risultata essere un punto chiave, molto simile al rivelatore di Harris invariante di scala, dove l'angolo finale è misurato è più alto in una determinata scala. Qui di nuovo, un punto d'angolo o un punto chiave è definito da (x, y e sigma). Così si usa la scala del punto per scegliere un gaussiano appropriato e convolete che Gaussiano con la vostra immagine in ingresso per ottenere un'immagine chiamata I-hat. Ora si calcola la grandezza e l'orientamento del gradiente, utilizzando un semplice metodo di differenze finite per l'immagine I - hat. Così avreste m di ogni punto, che è la vostra gradiente magnitudo in ogni punto, che vi verrebbe dato semplicemente con la vostra radice di sfumatura in x direzione quadrato + gradiente in y direction square. Quella sarà la tua grandezza del gradimento. Allo stesso modo, il vostro orientamento del gradimento in quella sede sarà abbronziata inversamente del gradiente y dal gradiente x. Alla fine di questo passo, avremo una magnitudo e un orientamento per ogni punto della vostra immagine, compresi i punti che avete individuato finora. Ora, che facciamo? (22.05) Ora, quello che faremo è prendere una certa regione intorno al punto chiave. Non ci affideremo solo alla grandezza e all'orientamento del solo punto chiave, perché vogliamo catturare le caratteristiche locali, non solo le caratteristiche al punto. Si prende una regione intorno al punto chiave, una certa finestra, diciamo 5 x 5 finestra o qualunque cosa possa essere. E si considerano gli orientamenti di tutti i punti, le grandezze e gli orientamenti di tutti i punti del quartiere intorno al punto chiave. E si costruiscono un istogramma fuori dagli orientamenti di tutti questi punti. Questo istogramma nella carta SIFT ha 36 bidoni, con 10 gradi per cestino. Quindi abbiamo un angolo di orientamento a seconda di quale sia l'angolo di orientamento. Quindi se avessi un angolo di orientamento di 185 gradi, lo metteresti nei 180 a 90 bin, quindi ogni bidone è di 10 gradi. Quando hai 360 gradi, quindi hai 36 bins. (23.10) La carta SIFT raccomanda anche qualche euristica per migliorare le prestazioni qui per dire che le voci di istogramma sono ponderate anche con una grandezza sfumata. Se la grandezza del gradiente è elevata, quel peso nell'istogramma in un determinato vassoio è aumentato. E se la grandezza del gradiente è bassa, quel peso nel bidone per quel punto è ridotto. E ha anche una funzione gaussiana con sigma pari a 1,5 volte la scala del punto chiave. Quindi se aggiungete un punto chiave, posizionare un gaussiano sopra il punto chiave, e poi con un certo sigma (sigma viene dato come 1,5 volte la scala del punto chiave stesso). E poi si guarda se un punto particolare del quartiere che si sta valutando è più lontano, poi contribuisce in misura minore all'istogramma. E se un certo punto è più vicino al punto chiave, contribuisce di più all'istogramma. Questi sono alcuni euristici che venivano utilizzati per migliorare le prestazioni. E una volta che si costruiscono questo istogramma, dopo queste euristiche, il picco, che mai bin ha avuto il maggior numero di voti nell'orientamento è considerato il picco di quel particolare punto chiave. Ancora una volta, tenete a mente qui, pur definendolo il picco di quel punto chiave, il picco è deciso dalle caratteristiche locali del punto chiave piuttosto che il punto da solo. Il lavoro SIFT suggerisce anche di introdurre ulteriori punti chiave nella stessa posizione, se c'è un altro picco nell'istogramma, che è al valore 80% del picco originale. Se ci fossero altri picchi, allora si introduce un altro punto chiave nella stessa posizione con un orientamento diverso. Quindi è possibile. Hai due punti chiave nella stessa posizione con orientamento diverso, che ottiene risultati più robusi. (25:10) Ecco alcune illustrazioni visive di come questa funziona. Ecco un'immagine di input. Il primo passo riguarda la cattura dell'estreme della differenza di Gaussians. Così potete vedere qui che ogni punto ha anche una freccia. La freccia denota l'orientamento del punto chiave e la lunghezza della freccia denota la grandezza del gradimento in quel punto chiave. Quindi la base di quelle frecce è il punto effettivos. Questo è il tuo primo passo di rilevamento estreme. (25:50) Così poi dopo aver fatto una soglia di contrasto basso questi 832 DoG estremi si abbassano a circa 729. Si eliminano i punti chiave che hanno più bassi di una soglia in termini di contrasto. (26:00) Poi facciamo anche il rapporto di prova basato sugli hessiani per eliminare i manufatti di bordo. E poi i tuoi punti chiave scendono dal 729 al 536. (26:18) Così si stanno stampando punti chiave rumorosi che potrebbero non essere davvero di valore. E come abbiamo già detto, le frecce che hai visto erano gli orientamenti che hai ottenuto usando il tuo passo tre. Ora passiamo all'ultimo passo, che sta nel trovare un modo per descrivere quel punto chiave. Finora abbiamo trovato il punto chiave, abbiamo trovato la scala in cui esiste il punto chiave, abbiamo anche un orientamento per il punto chiave. Ora, la domanda è come descriviamo il punto chiave? (26:50) Quindi per fare questo, riserviamo ancora una volta le informazioni di gradimento nel quartiere locale intorno al punto chiave. Quindi prendiamo una finestra di 16 cross 16 intorno al punto chiave rilevato. Quindi portare con questa immagine. Questa immagine mostra una finestra di otto cross otto, ma per soli fini illustrativi, ma il metodo reale suggerisce di scattare una finestra di 16 croce 16 intorno al punto chiave. Quindi prendi la tua 8 traversa 8 o 16 croce 16. E poi si divide quella 16 croce 16 in quadranti di 4 croce 4 ciascuna. Quindi per una finestra da 8 cross 8 avrete 4 simili quadranti, per una finestra da 16 cross 16, si avrebbero 16 quadranti tali, dove ogni quarto era di 4 croce 4. All'interno di ciascuno di quei quadranti si costruisce un istogramma degli orientamenti di punti all'interno della patch e lo allineano lungo 8 bidoni. Così invece di allinearsi lungo 36 bidoni, questa volta si va ad allineare più vicini e allinearlo solo lungo 8 bidoni. Questo è ciò che SIFT propone. Così si sarebbe, ancora una volta, solo per ricordare in una finestra di 8 cross 8 che si avrebbero quattro istogrammi simili. Ma in una finestra da 16 cross 16, si avrebbero 16 istogrammi simili. Così ogni istogramma ha 8 orientamenti perché ci sono 8 piedini lì. E ogni punto del quartiere in quella patch 4x4 contribuisce a uno dei bidoni dell'istogramma. (28:40) Similare a come abbiamo trovato l'orientamento. Qui anche noi usiamo euristici come il down pesando le sfumature da parte di una funzione di caduta Gaussiana. Quindi all'interno di un particolare quartiere, se c'era un punto più lontano che contribuisce un po' meno all'istogramma e un punto più vicino contribuisce di più all'istogramma. Tanto per chiarire l'immagine sulla destra, questo è solo un altro modo di rappresentare un istogramma, basta tenere a mente che lo stesso diagramma potrebbe anche essere stato disegnato una cosa del genere, con 8 bidoni come ho detto. (29:22) Così la lunghezza qui denota la forza del bidone nell'istogramma. Così in ogni quadrante 4x4, calcola il tuo gradiente istogramma di orientamento utilizzando 8 bins di orientamento. (29:30) Una volta che si fa questo, si avranno totalmente 16 istogrammi, ognuno con 8 valori. Questo set di 16x8, che è 128 diventa la tua versione grezza di un descrittivo SIFT. Così è così che descriveremo quel punto chiave, solo dagli orientamenti sfumati del quartiere intorno a quel punto chiave. Per ridurre gli effetti di qualsiasi contrasto o modifiche locali, questo vettore dimensionale 128 è normalizzato a lunghezza unitaria. Inoltre, per garantire che il descrittore possa essere robusta ad altri tipi di variazioni di illuminazione. I valori sono anche clippati a 0,2. E il vettore risultante è ancora una volta rinormalizzato a lunghezza unitaria. Quindi non si considerano valori molto piccoli. Lo si ferma a 0,2 e ancora una volta la normalizza. Questo, si potrebbe considerare questo come un passo di rimozione degli outliers, qualcosa di molto basso, vogliamo solo tagliarlo e poi rinormalizzarlo alla lunghezza originale. Questi sono euristici che la carta raccomanda di ottenere migliori prestazioni. (30:40) Vediamo qualche esempio. Qui potete vedere un paio di immagini turistiche di un monumento popolare. E qui potete vedere questi valori di background, che sono i punti chiave rilevati da SIFT in questa immagine. E se in realtà si confronta anche sulla seconda immagine dove la rotazione significativa, forse quasi un cambio serale morningtel, individuiamo punti chiave simili in entrambe queste impostazioni. Quindi si tratta di un rivelatore di funzionalità straordinariamente robusto. Gestisce fino a circa 60 gradi di variazioni di rotazione. Può anche gestire una buona quantità di cambiamenti di illuminazione. Ed è anche abbastanza veloce ed efficiente può correre in tempo reale. C'è un sacco di codice disponibile per le persone disposte, volendo usare SIFT. E SIFT, come ho già accennato è stato utilizzato in molte applicazioni di visione da quando è stato inizialmente proposto nei primi anni ' 2000s. (31:43) Ecco un altro esempio impegnativo di immagini dal Mars Rover. E noi idealmente vogliamo vedere questa è un'applicazione pratica, dove, quando il Mars Rover prende immagini di scene diverse visto che non c'è un umano lì, sarebbe bene capire quali scene effettivamente abbinano tra loro in modo da sapere quale parte di Marte è il rover attualmente in corso. Ma poi perché le scale e gli angoli possono essere diversi in queste immagini corrispondenti diventa un po' duro. (32:23) Così questo particolare esempio, sebbene queste due immagini sembrano molto diverse, una corrispondenza SIFT tra queste due immagini trova alcune caratteristiche, che in realtà hanno dei descrittori molto simili in queste due immagini. Ora potreste eguagliare queste due immagini per dire dove il rover era rispetto a una scena più ampia sul paesaggio. (32:40) Ecco più esempi. Così SIFT è abbastanza invariante alle trasformazioni geometriche, come la traduzione in scala e la rotazione. (32:55) È anche ragionevolmente invariante alle trasformazioni fotometriche come la modifica delle hues di colore perché ci affidiamo in larga parte a sfumature più che l'intensità di pixel stessa. (33:07) Una delle applicazioni popolari che SIFT può essere utilizzata per come abbiamo iniziato l'ultima lezione con è il cuciture delle immagini, dove trovate i punti chiave SIFT in entrambe queste immagini e poi corrispondono ai descrittori e scopri quale punto chiave è passato da immagine uno è andato a quale punto chiave nell'immagine due. E una volta trovato questi punti chiave corrispondenti, puoi risolvere per un sistema di equazioni per trovare la trasformazione tra due immagini. E una volta che trovate la trasformazione tra due immagini, potete cucitarle insieme per fare un panorama. Questa parte di esso, parleremo un po' più tardi quando si parla di matching dell'immagine. (34:16) Così ecco un esempio. Si rilevano i punti di funzione in entrambe le immagini. Poi scopri utilizzando i descrittori che si ottengono da SIFT. Ricorda che ogni punto chiave sarà rappresentato da un vettore dimensionale 128 in caso di SIFT. E si cerca di vedere, abbinare il vettore dimensionale 128 qui con il vettore dimensionale 128 qui. Se i vettori corrispondono, insomma, che quel punto chiave corrisponde a quel punto chiave della seconda immagine. (32:40) Una volta che lo si fa, si possono allineare le immagini e posizionarle una o l'altra. (32:23) Se vuoi saperne di più su SIFT ci sono abbondanti risorse online. David Lowe ha una carta eccellente, come ho già accennato, si prega di leggere la carta. Ci sono anche esercitazioni di python, l'ingresso di Wikipedia è anche abbastanza informativo oltre che una libreria SIFT aperta. (34:43) Prima di concludere questa lezione, analizzeremo anche le varianti di SIFT che sono state sviluppate. Almeno alcune varianti che sono state sviluppate da quando SIFT è stata sviluppata. Uno dei miglioramenti più popolari su SIFT è noto come SURF, spicca per velocizza le caratteristiche robusta. E cosa fa SURF, ci vuole la pipeline di SIFT. Così si potrebbe ora scrivere la pipeline di SIFT come costruire lo spazio di scala, prendere la differenza di Gaussians, individuare l'estrema DoG, trovare le localizzazioni sub - pixel di quei punti chiave. Quindi filtrare i bordi e le risposte a basso contrasto, assegnare gli orientamenti dei punti chiave, costruire descrittori di punti chiave e quindi utilizzare quelle funzioni per qualsiasi cosa desiderate. Questo è il gasdotto, ma che abbiamo appena finito di discutere. Così uno dei miglioramenti che SURF arriva con sopra SIFT è invece di usare la differenza di Gaussians e di trovare l'estrema, usano quelli che sono noti come filtri box. (36:26) Questi sono noti anche come filtri Harr, ne parleremo nella slide successiva, ma questi sono noti anche come filtri box. I filtri box sono filtri come questi, dove si può avere un filtro, dove una parte è bianca, un'altra parte nera e un'altra parte bianca. Si potrebbe fare in varie combinazioni. Si potrebbe fare un tipo di controllo di un effetto. Si potrebbe fare con, si potrebbe aumentare il numero di neri e bianchi. Potresti avere i neri due volte, bianchi tre volte, o potresti ribattarlo. Tutte quelle combinazioni sono tipicamente chiamate filtri box e insieme formano quelle che sono note come ondulazioni Haar. Non andremo in onda qui. Ma si potrebbero guardare le ondulazioni come una generalizzazione di una base di Fourier. Così utilizziamo le ondulazioni Haar, che sono i vostri filtri Haar come questi per ottenere gli orientamenti chiave. Ecco allora una differenza di SURF e che permette a SURF di essere molto bravo a gestire le variazioni di blur e rotazione. (36:51) Così SURF non è buono come SIFT su invarianti all'illuminazione e al punto di vista cambia anche se, ma gestisce abbastanza bene il blur e le rotazioni. Soprattutto SURF è quasi tre volte più veloce di SIFT a causa di questi cambiamenti. C'è un motivo particolare per cui usare i filtri Haar può rendere i calcoli significativamente più veloci. Vi lascio a voi come domanda di compiti a casa, vi prego di leggere perché usare le ondulazioni di Haar può rendere più veloci le elaborazioni? Un suggerimento per voi è quello di leggere qualcosa chiamato immagini integrate. C'è anche un'altra variante di SIFT chiamata MOPS. I stand MOPS per il descrittore delle patch orientate su più scale. In questo caso, la patch che si ha intorno al punto chiave è ruotata in base al suo orientamento al gradiente dominante. E poi calcola il tuo istogramma e il descrittivo. Perché questo è utile ruotando la patch al suo orientamento al gradiente dominante, si garantisce che tutti i punti chiave abbiano una canonica