2013-01-20 14 views
5

Attualmente sto terminando il mio strumento di valutazione per i rivelatori di punti di interesse. Negli ultimi passaggi ho trovato un errore confuso.OpenCV CV findHerografia errore asserzione contatore => 4

Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray()) 

Il srcPoints e dstPoints sono vector<Points2f> che memorizza i punti corrispondenti dei punti chiave corrispondenti. Fin qui niente di speciale - È come nei tutorial.

Ma quando uso RANSAC e ho un vector<Points2f> nell'intervallo [0, ..., 4], viene visualizzato un errore di asserzione che il contatore deve essere maggiore o uguale a quattro.

Domanda 1: L'algoritmo richiede almeno quattro punti per descrivere ciò che appartiene al modello corrente o no e per creare il consenso?

Domanda 2: C'è qualche documentazione a riguardo? (Ho dato un'occhiata allo doc e allo tutorials.)

Please note that I already have seen this question. Ma non c'è una risposta soddisfacente per il comportamento di RANSAC. O dovrei accettare che questo metodo abbia bisogno di almeno quattro punti per trovare l'omografia?

Grazie per il vostro aiuto.

risposta

8

Un'omografia non può essere calcolata con meno di 4 coppie di punti. Questo perché con solo 3 punti c'è un'ambiguità prospettica. Immaginare un triangolo

a 


b  c 

in un'immagine 1. Nell'immagine 2 i punti sono stati trasformati per assomigliare questo

a 


b c 

La distanza tra B e C è stato tagliato a metà. Sfortunatamente non sai se questo è perché il punto c si avvicina al tuo o più lontano da te. Con un 4 ° punto la differenza diventa chiara.

a  d 


b  c 

Ecco una piazza di un'immagine 1

 d 


a   


b c  

qui D e C ruotato verso di voi

a  

    d 
b c 

e qui hanno ruotato lontano da voi.

Non vedo questo requisito nella documentazione di openCV, ma se trovi risorse sul calcolo dell'omografia non dovrai leggere molto prima di trovare questo requisito e una prova più rigorosa di 4 punti sufficiente.

4

RANSAC viene utilizzato per selezionare 4 coppie di punti corrispondenti in un set o corrispondenze maggiori (ad esempio, quando srcPoints.size() >= 4). Ecco perché ricevi un errore se srcPoints.size() <=4.

Avete bisogno di almeno 4 corrispondenze semplicemente perché una matrice di omografia H ha 8 gradi di libertà, quindi sono necessarie 8 equazioni lineari per trovare una soluzione. Poiché ogni coppia di punti genera due equazioni lineari (usando le coordinate xey), avrai bisogno di un totale di almeno 4 corrispondenze.

+0

Potete per favore darmi un suggerimento dove posso leggere queste equazioni? Ho trovato solo alcune frasi nei testi che mi dicevano "hai bisogno di almeno quattro punti" ma senza alcuna spiegazione. –

+0

Controlla questo: http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf – memecs

Problemi correlati