image processing - puntos - Transformación de Hough frente a detección de contorno para reconocimiento de rectángulo con proyección en perspectiva
puntos de fuga 1 2 y 3 (2)
¿Qué tipo de resultados está obteniendo con la detección de contornos hasta ahora? ¿Tienes algún ejemplo?
La transformada de Hough debería funcionar bien para la detección de rectángulos IFF, puede asumir que los lados del rectángulo son las líneas más prominentes de su imagen. Entonces, simplemente puede detectar los 4 picos más grandes en el espacio de Hough y obtuvo su rectángulo.
Esto funciona, por ejemplo, con una foto de una hoja de papel blanca frente a un fondo oscuro.
Lo ideal sería preprocesar la imagen con borrosidad, umbral, operadores morfológicos para eliminar cualquier estructura a pequeña escala antes de transformarla.
Si hay múltiples rectángulos más pequeños u otros tipos de líneas prominentes en sus imágenes, la detección de contorno podría ser la mejor opción.
Algunas ventajas generales para la transformación de hough de la parte superior de mi cabeza:
- La transformada de Hough todavía puede funcionar si parte del rectángulo está obstruida o fuera del marco.
- La transformada de Hough debería ser más rápida que la detección de contorno, supongo.
- La transformada de Hough ignorará cualquier cosa que no sea una línea recta, por lo que puede tener mayor éxito con las imágenes desordenadas. (Si los lados del rectángulo son las líneas más prominentes)
Al final, probablemente depende de los datos de entrada. ¿Tienes algún ejemplo?
Tal vez un enfoque combinado sería mejor? vea Combinación de la transformada de Hough y el algoritmo de contorno para detectar matrículas de vehículos
Hice algunos experimentos con el uso de Hough Transform para detectar rectángulos hace un tiempo, puedes ver algunos resultados preliminares aquí: http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14491&start=9
Desafortunadamente, eso es todo lo que existe en este momento, el proyecto está actualmente en pausa, eventualmente espero reanudarlo cuando esté menos ocupado.
Estaría muy interesado en sus resultados en comparación.
(Si está haciendo una corrección de perspectiva, también revise las proporciones de un rectángulo deformado en perspectiva )
Hice trabajo de detección de rectángulo con detección de contorno y aplique polígono con OpenCv para obtener la ubicación del rectángulo antes de ajustar la proyección de perspectiva. Y está funcionando muy bien. Pero algunas personas en mi grupo sugirieron la transformación de Hough en su lugar. Me pregunto si hay alguna ventaja de usar la transformación de Hough para la detección de rectángulos.
Actualización: Probé ambos métodos. En mi ejemplo, ambos métodos funcionaron bien después de la detección de borde Canny. Pero como la transformación de Hough produce líneas, debemos asumir varias cosas, como la longitud de las líneas y la capacidad de conexión de las líneas, y debemos realizar cálculos adicionales, como buscar líneas conectadas y encontrar puntos de esquina a partir de las líneas conectadas. Personalmente, me gustó más el método de contorno, ya que su concepto es más simple. Con el método, solo tiene que buscar contornos que se puedan aproximar con polígonos cerrados y convexos con 4 esquinas y ajustar los polígonos para sus proyecciones de perspectiva. Eso es todo.
La búsqueda de la detección de contornos con la transformada de Hough me llevó a este SO.
Para ayudar a los futuros buscadores, esta publicación de blog tiene un buen tutorial para hacer esto con opencv:
http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/
El concepto:
1. Obtener el mapa de borde - canny, sobel
2. Detectar líneas con Hough transform.
3. Consigue las esquinas encontrando intersecciones entre líneas.
4. Compruebe si la curva poligonal aproximada tiene 4 vértices con approxPolyDP
5. Determine la esquina superior izquierda, inferior izquierda, superior derecha e inferior derecha.
6. Aplique la transformación de perspectiva con getPerspectiveTransform para obtener la matriz de transformación y warpPerspective para aplicar la transformación.