Introduzione di SIFT( Scale Invariant Feature Transform)
SETACCIARE sta per Scala-Invariant Feature Transform e che è stata presentata nel 2004, dal D. Lowe, Università di British Columbia. SIFT è invarianza alla scala e alla rotazione dell’immagine. Questo algoritmo è brevettato, quindi questo algoritmo è incluso nel modulo non libero in OpenCV.
Principali vantaggi di SIFT sono
- Località: caratteristiche locali, in modo robusto per occlusione e disordine (non prima di segmentazione)
- carattere Distintivo: le singole funzioni possono essere abbinati a un ampio database di oggetti
- Quantità: molte funzioni possono essere generati anche per oggetti di piccole dimensioni
- Efficienza: vicino alle prestazioni in tempo reale
- Estensibilità: può essere facilmente esteso a una vasta gamma di diversi tipi di funzionalità, con ogni aggiunta di robustezza
Questo fa parte di un rilevamento di funzionalità serie 7 e la corrispondenza. Altri articoli inclusi
- Introduzione Alle Funzionalità di Rilevamento E di Corrispondenza
- Introduzione di Harris Angolo Rivelatore
- Introduzione al SURF (Accelerato Caratteristiche solide)
- Introduzione VELOCE (Caratteristiche Accelerato Segmento Test)
- Introduzione a BREVE (Binario Robusto Indipendente Elementare Caratteristiche)
- Introduzione a ORB (Orientato VELOCE e Ruotata in BREVE)
SIFT è abbastanza coinvolti algoritmo. Ci sono principalmente quattro passaggi coinvolti nell’algoritmo SIFT. Li vedremo uno per uno.
- Scala-selezione picco spazio: Posizione potenziale per la ricerca di caratteristiche.
- Localizzazione dei punti chiave: individuazione accurata dei punti chiave della funzione.
- Assegnazione dell’orientamento: assegnazione dell’orientamento ai punti chiave.
- Descrittore dei punti chiave: descrive i punti chiave come un vettore ad alta dimensione.
- Keypoint Matching
Scale-space peak Selection
Gli oggetti del mondo reale sono significativi solo a una certa scala. Si potrebbe vedere una zolletta di zucchero perfettamente su un tavolo. Ma se guardando l’intera via lattea, allora semplicemente non esiste. Questa natura multi-scala degli oggetti è abbastanza comune in natura. E uno spazio in scala tenta di replicare questo concetto sulle immagini digitali.
La scala spaziale di un’immagine è una funzione L(x,y,s) che è prodotto dalla convoluzione di un kernel Gaussiano(Sfocatura), a diverse scale, con l’immagine in ingresso. Scala-lo spazio è separato in ottave e il numero di ottave e scala dipende dalla dimensione dell’immagine originale. Quindi generiamo diverse ottave dell’immagine originale. La dimensione dell’immagine di ogni ottava è la metà di quella precedente.
Sfocatura
All’interno di un’ottava, le immagini vengono progressivamente sfocate utilizzando l’operatore Sfocatura gaussiana. Matematicamente ,la” sfocatura ” è indicata come la convoluzione dell’operatore gaussiano e dell’immagine. La sfocatura gaussiana ha una particolare espressione o” operatore ” che viene applicata a ciascun pixel. Quali risultati è l’immagine sfocata.
G è la Sfocatura Gaussiana operatore e che è un’immagine. Mentre x, y sono le coordinate di posizione e σ è il parametro “scala”. Pensate a come la quantità di sfocatura. Maggiore è il valore, maggiore è la sfocatura.
CANE(a Differenza del kernel Gaussiano)
Ora dobbiamo utilizzare quelle immagini sfocate per generare un’altra serie di immagini, la Differenza di Gaussiane (Cane). Queste immagini cane sono grandi per scoprire punti chiave interessanti nell’immagine. La differenza di gaussiana si ottiene come la differenza di sfocatura gaussiana di un’immagine con due diversi σ, sia σ e kσ. Questo processo viene eseguito per diverse ottave dell’immagine nella Piramide gaussiana. Esso è rappresentato nell’immagine sottostante:
Trovare i punti chiave
Fino ad ora, abbiamo generato una scala spazio e utilizzato la scala spazio a calcolare la Differenza di Gaussiane. Questi vengono quindi utilizzati per calcolare laplaciano di approssimazioni gaussiane che sono invarianti di scala.
Un pixel in un’immagine viene confrontato con i suoi 8 vicini di casa, nonché di 9 pixel in scala successiva e 9 pixel in precedenti scale. In questo modo, vengono effettuati un totale di 26 controlli. Se è un extrema locale, è un potenziale punto chiave. Fondamentalmente significa che keypoint è meglio rappresentato in quella scala.
Localizzazione dei punti chiave
I punti chiave generati nel passaggio precedente producono molti punti chiave. Alcuni di loro si trovano lungo un bordo, o non hanno abbastanza contrasto. In entrambi i casi, non sono così utili come le funzionalità. Quindi ci sbarazziamo di loro. L’approccio è simile a quello utilizzato nel rivelatore angolo Harris per la rimozione di caratteristiche di bordo. Per le caratteristiche a basso contrasto, controlliamo semplicemente le loro intensità.
Hanno usato l’espansione in serie di Taylor dello spazio di scala per ottenere una posizione più accurata di extrema, e se l’intensità a questo extrema è inferiore a un valore di soglia (0,03 come da carta), viene respinta. Il cane ha una risposta più alta per i bordi, quindi anche i bordi devono essere rimossi. Hanno usato una matrice Hessiana 2×2 (H) per calcolare la curvatura principale.
Orientamento di Assegnazione
Ora abbiamo legittimi punti chiave. Sono stati testati per essere stabili. Conosciamo già la scala in cui è stato rilevato il punto chiave (è la stessa della scala dell’immagine sfocata). Quindi abbiamo l’invarianza di scala. La prossima cosa è assegnare un orientamento a ciascun punto chiave per renderlo invarianza di rotazione.
Un quartiere preso in giro per il punto chiave posizione a seconda della scala, e il gradiente di intensità e la direzione è calcolato in quella regione. Viene creato un istogramma di orientamento con 36 contenitori che coprono 360 gradi. Diciamo che la direzione del gradiente in un certo punto (nella “regione di raccolta dell’orientamento”) è di 18,759 gradi, quindi andrà nel contenitore di 10-19 gradi. E la “quantità” che viene aggiunta al bin è proporzionale alla grandezza del gradiente in quel punto. Una volta fatto questo per tutti i pixel attorno al punto chiave, l’istogramma avrà un picco ad un certo punto.
Il più alto picco dell’istogramma è preso e eventuali picchi di oltre l ‘ 80% è anche considerato per calcolare l’orientamento. Crea punti chiave con la stessa posizione e scala, ma direzioni diverse. Contribuisce alla stabilità della corrispondenza.
Descrittore del punto chiave
A questo punto, ogni punto chiave ha una posizione, una scala, un orientamento. Il prossimo è calcolare un descrittore per la regione dell’immagine locale su ogni punto chiave che sia altamente distintivo e invariante possibile a variazioni come i cambiamenti nel punto di vista e nell’illuminazione.
Per fare ciò, viene eseguita una finestra 16×16 attorno al punto chiave. È diviso in 16 sotto-blocchi di dimensioni 4×4.
For each sub-block, 8 bin orientation histogram is created.
So 4 X 4 descriptors over 16 X 16 sample array were used in practice. 4 X 4 X 8 directions give 128 bin values. It is represented as a feature vector to form keypoint descriptor. Questo vettore di funzionalità introduce alcune complicazioni. Dobbiamo liberarcene prima di finalizzare l’impronta digitale.
- Rotazione dipendenza Il vettore caratteristica utilizza orientamenti gradiente. Chiaramente, se si ruota l’immagine, tutto cambia. Anche tutti gli orientamenti del gradiente cambiano. Per ottenere l’indipendenza di rotazione, la rotazione del punto chiave viene sottratta da ciascun orientamento. Pertanto, ogni orientamento del gradiente è relativo all’orientamento del punto chiave.
- Dipendenza dell’illuminazione Se abbiamo numeri di soglia che sono grandi, possiamo raggiungere l’indipendenza dell’illuminazione. Quindi, qualsiasi numero (del 128) maggiore di 0.2 viene modificato in 0.2. Questo vettore di funzionalità risultante viene nuovamente normalizzato. E ora hai un vettore di funzionalità indipendente dall’illuminazione!
Corrispondenza dei punti chiave
I punti chiave tra due immagini vengono abbinati identificando i vicini più vicini. Ma in alcuni casi, la seconda partita più vicina potrebbe essere molto vicina alla prima. Può accadere a causa del rumore o di altri motivi. In tal caso, viene preso il rapporto tra la distanza più vicina e la distanza più vicina. Se è maggiore di 0,8, vengono rifiutati. Elimina circa il 90% delle false corrispondenze mentre scarta solo il 5% delle corrispondenze corrette, come da carta.
Implementazione
Sono stato in grado di implementare sift usando OpenCV(3.4). Ecco come l’ho fatto:
Collegamento Github per il codice:https://github.com/deepanshut041/feature-detection/tree/master/sift