Estoy empezando a usar OpenCV para detectar curvas específicas en una imagen. Primero, quiero verificar si hay una curva, y luego, me gustaría identificar el tipo de curva de acuerdo con la curva cóncava o convexa vertical u horizontal. ¿Hay una función disponible en OpenCV? Si no, ¿puedes darme algunas ideas sobre cómo puedo escribir tal función? ¡Gracias! Por cierto, estoy usando C++.Detección de curvas en OpenCV
Respuesta
La coincidencia de plantillas no es una forma robusta de resolver este problema (es como mirar un objeto desde un pequeño orificio) y los detectores de bordes no necesariamente le devuelven los bordes verdaderos en la imagen; también se devuelven los bordes falsos, como los debidos a las sombras. Además, tiene que lidiar con el problema de los bordes incompletos y otros problemas que se amplían con la complejidad de la escena en su imagen.
El problema que usted planteó, en general, es muy desafiante y, a excepción de los ejemplos de juguetes, no hay buenas soluciones.
Un primer intento podría consistir en intentar detectar plausible bordes con un detector de bordes (por ejemplo, el detector de bordes astutos). Luego, use RANSAC para tratar de ajustar un subconjunto de puntos en los bordes detectados a su modelo de curva.
Por ej. digamos que está tratando de detectar una curva de la siguiente forma f (x) = ax^2 + bx + c. RANSAC básicamente tratará de encontrar entre los puntos en los bordes detectados, un subconjunto de ellos que mejor se ajuste a este modelo de curva. Para detectar diferentes curvas, cambie f (x) en consecuencia y ejecute RANSAC para cada una de ellas. A continuación, puede tratar de determinar si la curva representada por f (x) existe realmente en su imagen utilizando alguna heurística aplicada a partir de los puntos que RANSAC le asignó (por ejemplo, si se ajustaron muy pocos puntos al modelo, es probable que la curva no está allí. ¿Pero cómo determinar un buen umbral para la cantidad de puntos?). Su modelo se volverá más complejo cuando tenga en cuenta la transformación permitida, como la rotación, etc.
El problema con este enfoque es que básicamente intenta ajustar lo que cree que debería estar en la imagen a los puntos y, a veces, aunque lo que está buscando no está allí, le devolverá el ajuste "mejor posible". Por ej. tienes un montón de puntos detectados en un círculo concéntrico. ¡Si intenta detectar líneas rectas desde estos puntos, RANSAC le devolverá la mejor línea de ajuste! De hecho, podría darle muchas líneas diferentes de diferentes ejecuciones dependiendo de qué puntos seleccionó durante su etapa de inicialización aleatoria. Para obtener más información sobre cómo utilizar RANSAC en este tipo de problema, consulte RANSAC for Dummies en Marco Zuliani. También tiene un bonito MATLAB toolbox para acompañar este informe técnico, que probablemente pueda transferir al idioma de su elección.
A menos que sepa cómo se ve el fondo, o si tiene el control de él, p. al forzar un fondo limpio, este es un problema muy difícil de resolver.
- 1. ¿Cómo suavizo las curvas (contornos) en OpenCV?
- 2. OpenCV Identificación de líneas y curvas
- 3. Detección de color opencv
- 4. ¿Detección manual de OpenCV?
- 5. detección de objetos android opencv
- 6. Detección de iris con opencv
- 7. Detección de Objetos 3D-Opencv
- 8. Detección de logotipos usando OpenCV
- 9. Detección de elipse con OpenCV
- 10. Detección de manos usando OpenCV
- 11. OPENCV vs GIMP, detección de bordes falla en OPENCV
- 12. Muestras de detección de objetos en OpenCV
- 13. Detección de rostro lento en OpenCV?
- 14. oblicua detección y reducción en opencv
- 15. Detección de línea horizontal con OpenCV
- 16. Detección de movimiento Opencv con seguimiento
- 17. Detección de objetos OpenCV - Punto central
- 18. ANDROID - detección de color usando openCV - ¿cómo?
- 19. Transformación de Hough para detección de iris en OpenCV
- 20. Detección de características en enlaces de OpenCV Python
- 21. Detección de área brillante rectangular en una imagen usando OpenCv
- 22. opencv - seguimiento de objetos usando detección de características
- 23. Clasificando líneas con opencv
- 24. openCV: Detección de borde Sobel me da error de aserción
- 25. detección de formas - aproximación del contorno con OpenCV
- 26. OpenCV C++/Obj-C: Detección adecuada de objetos
- 27. Detección de rostros con OpenCV para imágenes no frontales
- 28. ¿Hay alguna función opencv como "cvHoughCircles()" para la detección cuadrada?
- 29. Aprendiendo Curvas de Rubí
- 30. Puntos equidistantes en curvas Bezier
¿Con qué tipo de imágenes está tratando? ¿Qué antecedentes tienen? Si es posible, adjunte algunas imágenes de sus imágenes. – maximus