Prima di tutto, in questo documento non esiste qualcosa come "modello": la parola "modello / i" ha un significato diverso in Computer Vision.
Il metodo utilizzato in questo documento è relativamente semplice. Lascia che lo scomponga per te. Ci sono tre cose importanti che devi fare quando esegui attività come il riconoscimento degli oggetti, la corrispondenza delle immagini, la cucitura delle immagini e altre simili, usando le funzioni locali
La prima cosa importante è il rilevamento; in questo passaggio vuoi rilevare punti di interesse o punti chiave, e ciò significa che vuoi scegliere punti locali (sostanzialmente piccole patch) che ritieni interessanti nell'immagine, ci sono molti modi per farlo; questo documento non contribuisce in questo settore. Tuttavia, sembra che utilizzino il rilevatore di funzionalità SURF e i punti chiave CenSurE (puoi cercarli se vuoi saperne di più su di loro, non parlerò di questo passaggio tranne che usano funzionalità come gradienti e così, il che significa che se hai una foto, è improbabile che un punto in mezzo al cielo venga scelto come punto di interesse, perché i pixel intorno a quel punto hanno tutte le stesse intensità, le cose che sono "occupate" tendono ad essere scelte come punti di interesse (es. tavolo / bordi / angoli dell'edificio)).
Al termine del rilevamento, Descrizione funzionesegue. Conosci i punti interessanti nell'immagine e ora vuoi descriverli (sostanzialmente vuoi descrivere i punti / patch attorno ai punti interessanti). SIFT è un descrittore di funzionalità popolare. In questo documento, ne escono uno nuovo, chiamato BREVE. BREVE si basa su confronti, quindi diciamo che abbiamo una patch (50 pixel per 50 pixel), scegliamo due punti e confrontiamo le intensità dei due punti, se il primo punto è più grande del secondo punto, assegniamo il valore ' 1 ', altrimenti' 0 ', lo facciamo per un numero di coppie e finiamo con una stringa di valori booleani. Ora la grande domanda è "come scegli la coppia di punti?", Nel documento hanno spiegato 5 modi, relativamente simili, descriverò il primo. Quello che fai è scegliere uniformemente (pari probabilità) un punto da -S / 2 a S / 2, nel nostro esempio abbiamo detto che la dimensione della patch è 50, quindi scegliamo un punto tra -25 a 25. Supponendo che la coordinata 0,0 si trovi al centro della patch. Quindi ecco un esempio;
Vogliamo selezionare la prima coppia, ogni punto è costituito da coordinate (X, Y), quindi selezioniamo uniformemente la coordinata X del primo punto, quindi la coordinata Y del primo punto, supponiamo che sia (10, -1) , ora il secondo punto; selezioniamo uniformemente la coordinata X per il secondo punto e la coordinata Y per il secondo punto, supponiamo che sia (-2,20), ora otteniamo i valori di intensità per ciascun punto e vediamo quale ha i valori di intensità maggiori - se il primo è maggiore assegniamo il primo valore booleano a '1', in caso contrario assegniamo '0'. Lo facciamo per molte coppie e finiamo con un vettore di valori booleani.
* Punto molto importante: suppongo che funzioni, dovrai specificare un valore seed prima del generatore casuale. Ciò significa che si desidera scegliere gli stessi valori per ogni patch: questo è estremamente importante perché quando si confrontano / corrispondono le patch, l'intero sistema si guasterà se non vengono scelti esattamente allo stesso modo. - si spera che questo abbia senso quando leggi il passaggio corrispondente.
Quindi, lo facciamo per ogni punto di interesse che è stato rilevato dal rilevatore. Per ogni punto di interesse, otterremo un vettore di valori booleani.
Ora per abbinare due immagini ( terzo passaggio; corrispondenza ), facciamo esattamente la stessa cosa per l'altra immagine, rileviamo, quindi descriviamo usando il BREVE. Ad esempio, supponiamo di avere 10 punti di interesse in ogni immagine (questo può sempre funzionare se otteniamo i 10 punti più interessanti in ciascuna immagine), usiamo BRIEF per descrivere ogni patch usando ad esempio 50 coppie, quindi ogni immagine sarà descritta da 10 vettori di 50 valori booleani.
Per confrontare le due immagini, troviamo il vicino più vicino di ciascun vettore dalla prima immagine all'altro vettore della seconda immagine. Usiamo la distanza di Hamming che è piuttosto veloce, esempio di distanza di martellamento
hammingDistance ((0, 1, 1), (0, 0, 0)) = 2
hammingDistance ((0, 1, 1), (0, 1, 1)) = 0
hammingDistance ((0, 1, 1), (1, 0, 0)) = 3
hammingDistance ((0, 1, 1), (1, 1, 1)) = 1
Fondamentalmente quante corrispondenze sbagliate
Spero possa aiutare