2012-01-22 14 views
10

La funzione OpenCV findhomography() trova una trasformazione omografica tra punti di corrispondenza di due immagini. (Vedi Definition)OpenCV: parametro di riservatezza RANSAC per la ricerca di un'omografia

Per trovare sottoinsiemi di punti corrispondenti, è possibile utilizzare RANSAC.

Qui sta il trucco: A differenza di altre funzioni in OpenCV che utilizzano RANSAC (ad esempio findfundamentalMat (Vedere Definition)) il parametro RANSAC per fiducianon può essere cambiato. Solo la soglia di riproiezione può essere passata come argomento.

Ho cercato nella sorgente OpenCV e per findhomography() la riservatezza è hardcoded a 0,995.

Per i miei scopi ho bisogno di aumentare questo. C'è un modo per farlo senza modificare il valore nella sorgente OpenCV stessa?

C'è un motivo per cui questo dovrebbe essere codificato?

PS: Ho aggiunto una modifica request under Ticket 1557 per la prossima versione di subversion.

risposta

5

Il motivo per cui è stato creato un hardcoded è che per la maggior parte degli utenti questa è una scelta molto buona.

Forse sei stato il primo a sentire il bisogno di qualcosa di più. Ma questo è il motivo per cui OpenCV è aperto: prendi il codice, modificalo, crea una patch e proponilo al team di sviluppo di OpenCV, qualunque cosa tu voglia.

E, sei sicuro che questo è quello che ti serve? Di solito, una soglia di reproj più stretta farà il trucco. Se hai problemi, potrebbero essere da qualche altra parte - alcuni punti male scelti, un errore di adattamento troppo grande sulla corrispondenza dei punti, ecc.

+1

Hai ragione: potrei semplicemente cambiarlo da solo e partecipare allo sviluppo. In effetti, questo è quello che ho fatto nella mia sovversione locale e funziona bene. – user834985

5

Bene, non sei il primo che ha bisogno di cambiare le variabili o le funzioni harcoded in OpenCV. In realtà stiamo cambiando molte funzioni di OpenCV per renderle più veloci ed efficienti per i telefoni cellulari. Se si desidera cambiare RANSAC, basta creare una copia della classe con un nome diverso

class CvModelEstimator2 
{ 

} 

nel codice e modificare da soli come avete bisogno. È inoltre possibile modificare il numero massimo di iterazioni per RANSAC, il valore predefinito è molto alto e rende l'applicazione molto lenta.

Problemi correlati