2011-11-24 20 views
5

Sto solo iniziando a utilizzare OpenCV per rilevare curve specifiche in un'immagine. Per prima cosa, voglio verificare se c'è una curva, e successivamente, vorrei identificare il tipo di curva in base a convessità verticale o orizzontale o curva concava. Esiste una funzione disponibile in OpenCV? In caso contrario, puoi darmi qualche idea su come posso scrivere una tale funzione? Grazie! A proposito, sto usando C++.Rilevamento di curve in OpenCV

+0

Che tipo di immagini hai a che fare? Che sfondo hanno? Se possibile allegare alcune immagini delle tue immagini. – maximus

risposta

6

La corrispondenza dei modelli non è un metodo efficace per risolvere questo problema (è come guardare un oggetto da un piccolo foro stenopeico) ei rilevatori di bordi non necessariamente restituiscono i veri bordi dell'immagine; anche i bordi falsi come quelli dovuti alle ombre vengono restituiti. Inoltre, devi affrontare il problema dei bordi incompleti e di altri problemi che si adattano alla complessità della scena nell'immagine.

Il problema che si pone, in generale, è molto impegnativo e, a parte gli esempi di giocattoli, non ci sono soluzioni valide.

Un tentativo approssimativo potrebbe essere quello di provare per la prima volta a rilevare i bordi plausibili utilizzando un rilevatore di bordo (ad esempio suggerito dal rilevatore di bordo canny). Quindi, utilizzare RANSAC per provare ad adattare un sottoinsieme dei punti nei bordi rilevati al modello di curva.

Ad es. diciamo che stai cercando di rilevare una curva della seguente forma f (x) = ax^2 + bx + c. RANSAC cercherà fondamentalmente di trovare tra i punti nei bordi rilevati, un sottoinsieme di essi che meglio si adatti a questo modello di curva. Per rilevare curve diverse, cambia f (x) di conseguenza ed esegui RANSAC per ognuna di esse. Puoi quindi provare a determinare se la curva rappresentata da f (x) esiste realmente nell'immagine usando una certa euristica applicata ai punti che gli sono stati assegnati da RANSAC (ad esempio se sono stati montati troppi punti sul modello è probabile che la curva non c'è, ma come determinare una buona soglia per il numero di punti?). Il modello diventerà più complesso quando devi tenere conto della trasformazione consentita come la rotazione ecc.

Il problema con questo approccio è che stai fondamentalmente provando ciò che pensi che dovrebbe essere nell'immagine ai punti e, a volte, anche se quello che stai cercando non è lì, ti restituirà il miglior adattamento possibile. Ad es. hai un sacco di punti rilevati da un cerchio concentrico. Se cerchi di rilevare linee rette da questi punti, RANSAC ti restituirà la linea migliore! In effetti, potrebbe darti molte linee diverse da diverse esecuzioni a seconda di quali punti ha selezionato durante la sua fase di inizializzazione casuale.

Per ulteriori dettagli su come utilizzare RANSAC su questo tipo di problema, dare un'occhiata a RANSAC for Dummies entro il Marco Zuliani. Ha anche un bel MATLAB toolbox per accompagnare questo rapporto tecnico, che probabilmente puoi portare nella lingua che preferisci.

A meno che non si conosca l'aspetto dello sfondo o se ne abbia il controllo, ad es. forzando uno sfondo pulito, questo è un problema molto difficile da risolvere.

Problemi correlati