38

Estoy siendo aventurero y estoy dando mi primer paso hacia la visión por computadora. Intenté implementar la Transformación Hough por mi cuenta, pero no entiendo la imagen completa. Leí la entrada de la wikipedia, e incluso el "uso original de la transformación de la base para detectar líneas y curvas en imágenes" de Richard Duda y Peter Hart, pero no sirvió de nada.Explique Hough Transformation

¿Alguien puede ayudarme a explicarme en un lenguaje más amigable?

Respuesta

32

Es más común pensar en una línea en coordenadas rectangulares, es decir, y = mx + b. Como dice el artículo de Wikipedia, una línea también se puede expresar en forma polar. La transformación Hough explota este cambio de representación (para líneas, de todos modos. La discusión también se puede aplicar a círculos, elipses, etc.).

El primer paso en la transformación Hough es reducir la imagen a un conjunto de bordes. El detector de bordes Canny es una elección frecuente. La imagen de borde resultante sirve como entrada para el proceso Hough.

Para resumir, los píxeles "Lit" la imagen de bordes en se convierten a la forma polar, es decir, su posición se representa usando una dirección theta y una distancia r - en lugar de x y y. (El centro de la imagen se usa comúnmente como el punto de referencia para este cambio de coordenadas.)

La transformada de Hough es esencialmente un histograma. Se supone que la asignación de píxeles del borde al mismo theta y r define una línea en la imagen. Para calcular la frecuencia de ocurrencia, theta y r están discretizados (divididos en varios contenedores). Una vez que todos los píxeles de borde se han convertido a forma polar, los contenedores se analizan para determinar las líneas en la imagen original.

Es común para buscar los N parámetros más frecuentes - o el umbral de los parámetros, lo que cuenta más pequeña que algunos n son ignorados.

No estoy seguro de que esta respuesta sea mejor que las fuentes que presentó originalmente. ¿Hay algún punto en particular en el que se haya quedado atrapado?

+0

Tu respuesta es buena. Asegura las cosas que he leído en otro lugar. La respuesta que Ray H proporcionó a continuación también me dijo algo que me costaba imaginar: se calculan todas las combinaciones posibles de los parámetros. Así que mi cabeza se está volviendo más clara simplemente escuchándola de diferentes maneras. – Haoest

+3

Hay una buena herramienta de javascript para ver el espacio de votación en [http://gmarty.github.io/hough-transform-js/](http://gmarty.github.io/hough-transform-js/) – user1311069

15

La transformada Hough es una forma de encontrar los valores más probables que representan una línea (o un círculo, u otras cosas).

Le da a Hough la transformación de una imagen de una línea como entrada. Esta imagen contendrá dos tipos de píxeles: los que forman parte de la línea y los que forman parte del fondo.

Para cada píxel que forma parte de la línea, se calculan todas las combinaciones posibles de parámetros. Por ejemplo, si el píxel en la coordenada (1, 100) es parte de la línea, entonces eso podría ser parte de una línea donde el gradiente (m) = 0 y el intercepto y (c) = 100. También podría ser parte de m = 1, c = 99; o m = 2, c = 98; o m = 3, c = 97; y así. Puede resolver la ecuación de línea y = mx + c para encontrar todas las combinaciones posibles.

Cada píxel da un voto a cada uno de los parámetros (myc) que podrían explicarlo. Entonces, pueden imaginar, si su línea tiene 1000 píxeles, entonces la combinación correcta de myc tendrá 1000 votos.

La combinación de myc que tiene más votos es la que se devuelve como los parámetros para la línea.

+0

muy útil, gracias. – Haoest

102

Aquí hay una explicación muy básica, visual de cómo una transformada de Hough obras para la detección de líneas en una imagen:

enter image description here

+0

¡Gracias por tu maravillosa explicación pictórica! ¡Muy agradable! –

+1

¡Gran ejemplo! Es posible que necesite un poco, mencionó dibujar líneas a lo largo de los bordes y mostró esos bordes como un punto que está bien, pero de hecho estas líneas son solo la tangente a esos bordes. – SIslam

+0

@mlai, ¿has creado esta imagen? Si es así, ¿puedo usarlo para mis tesis de maestría, si no puedes mostrarme dónde lo obtuviste, me encanta?!?! Gracias –

1

Aquí hay otro punto de vista (que se utiliza en el episodio piloto de la serie de televisión Números): Imagine que un rociador de césped tipo fuente se encontraba en algún lugar en el césped antes, echando gotas de agua alrededor de sí mismo. Ahora el aspersor se ha ido, pero las gotas permanecen. Imagine convertir cada gota en su propio rociador, proyectando gotitas sobre sí mismo, en todas las direcciones, porque la gota no sabe de qué dirección proviene. Esto dispersará una gran cantidad de agua en el suelo, excepto que habrá un lugar donde una gran cantidad de agua golpea todas las gotas a la vez. Ese lugar es donde estaba el rociador original.

La aplicación para (por ejemplo) detección de línea es similar. Cada punto en la imagen es una de las gotitas originales; cuando actúa como un rociador, envía sus propias gotas marcando todas las líneas que podrían estar pasando por ese punto. Los lugares donde una gran cantidad de gotas secundarias aterrizan representan los parámetros de una línea que pasa por una gran cantidad de puntos de imagen: ¡VOILA! Línea detectada