2012-04-21 33 views
13

Hice la detección de contorno trabajar con detección de contorno y aplicar polígono con OpenCv para obtener la ubicación del rectángulo antes de ajustar la proyección de perspectiva. Y está funcionando genial Pero algunas personas en mi grupo sugirieron la transformación de Hough. Me pregunto si hay alguna ventaja de usar la transformación de Hough para la detección de rectángulo.Transformación Hough vs Detección de contorno para reconocimiento de rectángulo con proyección de perspectiva

Actualización: Intenté ambos métodos. En mi ejemplo, ambos métodos funcionaron bien después de la detección de bordes Canny. Pero como la transformación 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 realizar cálculos adicionales, como buscar líneas conectadas y encontrar puntos de esquina de las líneas conectadas. Personalmente, me gustó el método de contorno mejor ya que su concepto es más simple. Con el método, solo busca contornos que se puedan aproximar con polígonos cerrados y convexos con 4 esquinas y ajuste los polígonos para sus proyecciones de perspectiva. Eso es todo.

Respuesta

12

¿Qué tipo de resultados obtiene con la detección de contorno hasta el momento? ¿Tienes algún ejemplo?

La transformada Hough debería funcionar bien para la detección de rectángulo IFF, puede suponer que los lados del rectángulo son las líneas más prominentes en su imagen. Luego puedes simplemente detectar los 4 picos más grandes en el espacio vacío y obtienes tu rectángulo.

Esto funciona, por ejemplo, con una foto de una hoja blanca de papel delante de un fondo oscuro.

Lo ideal sería preprocesar la imagen con desenfoque, umbral, operadores morfológicos para eliminar cualquier estructura de pequeña escala antes de transformarse.

Si hay múltiples rectángulos más pequeños u otro tipo de líneas prominentes en sus imágenes, la detección de contornos podría ser la mejor opción.

Algunas de las ventajas generales para la transformada de Hough de la parte superior de mi cabeza:

  • transformada de Hough puede funcionar incluso si parte del rectángulo está obstruida o fuera del marco.
  • La transformación Hough debería ser más rápida que la detección del contorno, supongo?
  • Hough transform ignorará todo lo que no sea una línea recta, por lo que puede tener un 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?

¿Quizás un enfoque combinado sería lo mejor? ver Combining Hough Transform and Contour Algorithm for detecting Vehicles License-Plates

que hice algunos experimentos en el uso de la transformada de Hough para detectar rectángulos hace un tiempo, se puede ver algunos resultados preliminares aquí: http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14491&start=9

desgracia, eso es todo lo que existe en este momento, el proyecto se encuentra actualmente en hiato, finalmente espero reanudarlo cuando esté menos ocupado.

Estaría muy interesado en sus resultados en la comparación.

(Si usted está haciendo corrección de perspectiva, también echa un vistazo proportions of a perspective-deformed rectangle)

+0

Gracias por su respuesta. En realidad, mi código no es muy diferente de opencv sample [squares] (https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/squares.cpp?rev=4079) Lo que tengo en la duda es cómo se pueden detectar recurtidos con la transformación Hough, ya que ese método es básicamente para la detección de líneas. Supongo que tengo que pasar por todas las líneas y encontrar sus líneas conectadas y ver si están cerradas. –

+0

Sí, agregué una nota al respecto. Detección de rectángulo con Hough funciona bien si el rectángulo es la estructura más grande y más prominente en su imagen. – HugoRune

5

búsqueda para la detección del contorno con Hough Transfórmame trajo a este SO.

Para ayudar a los usuarios futuros, esta entrada del 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. Obtenga las esquinas mediante la búsqueda de 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.

+1

El enlace ahora conduce a un sitio spam, pruebe https://github.com/bsdnoobz/opencv-code/blob/master/quad-segmentation.cpp – dirkjot

Cuestiones relacionadas