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
risposta
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.
- 1. Rilevamento di scanalature OpenCV
- 2. Rilevamento di autotransferimento in curve chiuse di Bezier
- 3. Android OpenCV - rileva le curve da Houghlines
- 4. rilevamento oggetti android opencv
- 5. Rilevamento manuale tramite OpenCV
- 6. opencv - rilevamento oggetti tramite rilevamento funzionalità
- 7. Rilevamento di caratteristiche in OpenCV Python Binding
- 8. CamShift + Rilevamento di volti in OpenCv
- 9. Rilevamento linea orizzontale con OpenCV
- 10. Rilevamento oggetti con OpenCV SVM
- 11. Come si uniformano le curve (contorni) in OpenCV?
- 12. Rilevamento del logo tramite OpenCV
- 13. Rilevamento della linea OpenCV in generale
- 14. Rilevamento e riduzione dell'inclinazione in opencv
- 15. rilevamento pupilla in OpenCV e Python
- 16. Rilevamento di volti lenti su OpenCV?
- 17. HOG per "oggetto di rilevamento" opencv
- 18. Rilevamento di linee e forme in OpenCV con Python
- 19. rilevamento forme - approssimazione del contorno con OpenCV
- 20. OpenCV C++/Obj-C: rilevamento oggetto corretto
- 21. ANDROID - rilevamento del colore tramite openCV - come?
- 22. OpenCV: rilevamento circolare macchie/dischi Domino
- 23. rilevamento movimento su opencv C++ (telecamera mobile)
- 24. Rilevamento dei bordi con OpenCV (Canny)
- 25. rilevamento di oggetti di colore multiplo utilizzando OpenCV
- 26. OpenCV in Android: rilevamento punto chiave nelle immagini da file
- 27. Rilevamento dell'area rettangolare luminosa in un'immagine usando OpenCv
- 28. Approccio corretto al rilevamento di funzioni con opencv
- 29. Python e OpenCV - Miglioramento dell'algoritmo di rilevamento corsia
- 30. Rilevamento di simmetrie in Python
Che tipo di immagini hai a che fare? Che sfondo hanno? Se possibile allegare alcune immagini delle tue immagini. – maximus