Hough Transform
La transformada de Hough es una técnica de visión artificial basada en la votación que detecta líneas, círculos y formas, incluso cuando hay huecos o ruido en los bordes de la imagen.
La transformada de Hough es una técnica geométrica de extracción de características que detecta líneas, círculos y otras formas parametrizadas haciendo que los puntos de la imagen voten por las formas posibles. Los puntos que pertenecen a una misma estructura se refuerzan entre sí y generan un pico pronunciado en una tabla de votación. En visión artificial, esto permite recuperar formas con huecos o bordes ruidosos.
Paul V. C. Hough presentó la técnica en 1959 en Machine Analysis of Bubble Chamber Pictures, para abordar el análisis de trayectorias de partículas en fotografías de física. Richard Duda y Peter Hart introdujeron la representación de ángulo y distancia, muy utilizada actualmente, en su artículo de 1972 sobre detección de líneas y curvas.
Cómo funciona la votación de Hough#
Un flujo de trabajo habitual comienza con el preprocesamiento de datos y la detección de bordes. Un detector de bordes identifica cambios locales de brillo; la transformada de Hough agrupa los píxeles de borde en estructuras geométricas. El operador de Sobel estima los gradientes de brillo, mientras que Canny genera un mapa de bordes finos adecuado para la votación de líneas.
Cada línea candidata se representa mediante rho, su distancia perpendicular con signo respecto al origen de la imagen, y theta, el ángulo de esa perpendicular con respecto al eje x. Así se pueden representar líneas verticales sin una pendiente infinita. Cada píxel de borde vota por pares rho–theta compatibles en un acumulador, una tabla que divide el espacio de parámetros en intervalos discretos. Los píxeles colineales contribuyen al mismo intervalo, aunque estén separados en la imagen. Los picos identifican las líneas respaldadas por los votos.
La geometría y las reglas de votación determinan el resultado. Un detector de aprendizaje profundo aprende patrones visuales a partir de datos de entrenamiento; la detección de Hough utiliza un modelo de forma elegido y umbrales numéricos, en lugar de pesos del modelo aprendidos.
Transformadas de líneas, probabilística y de círculos#
Tres implementaciones habituales se diferencian por la búsqueda y el resultado:
- Transformada estándar de líneas:
cv2.HoughLines()devuelve pares rho–theta que describen líneas infinitas. Para obtener los extremos de los segmentos, se necesita un procesamiento adicional. - Transformada probabilística de líneas:
cv2.HoughLinesP()reduce el trabajo de votación mediante el muestreo de puntos y devuelve directamente los extremos de los segmentos.minLineLengthdescarta los segmentos cortos;maxLineGapcontrola la distancia máxima entre tramos alineados para poder unirlos. - Transformada de círculos: para determinar los círculos candidatos, se necesitan un centro y un radio.
cv2.HoughCircles()utiliza un método basado en gradientes, y los límites del radio acotan la búsqueda. La entrada está en escala de grises, mientras que las funciones para líneas reciben una imagen binaria.
Detección de segmentos de línea en Python#
Instala las dependencias con pip install opencv-python numpy. En este ejemplo se utiliza OpenCV para detectar y dibujar segmentos de línea en la imagen de muestra del autobús.
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Extrae los bordes para la votación.
edges = cv2.Canny(gray, 50, 150)
# Detecta segmentos finitos respaldados por los votos del acumulador.
lines = cv2.HoughLinesP(
edges,
1,
np.pi / 180,
threshold=80,
minLineLength=80,
maxLineGap=10,
)
if lines is not None:
for x1, y1, x2, y2 in lines[:, 0]:
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imwrite("hough_segments.jpg", image)La imagen guardada superpone en rojo los segmentos devueltos. Los intervalos rho tienen un ancho de un píxel, los intervalos theta abarcan un grado y threshold=80 establece el umbral de votos del acumulador. La longitud de los segmentos y la distancia entre tramos se miden en píxeles.
Aplicaciones y limitaciones prácticas#
En el procesamiento de documentos, la extracción de las líneas de la cuadrícula permite analizar la estructura: OpenCV muestra la detección de Hough en una imagen de un sudoku. La votación circular localiza los centros y radios de las monedas en los ejemplos de círculos y elipses de scikit-image. Estos resultados describen la geometría; la detección de objetos añade categorías semánticas, y la segmentación de instancias asigna píxeles a objetos individuales.
Un prototipo para medir vigas de acero combina máscaras de YOLOv8, bordes de Canny y líneas de Hough probabilísticas para facilitar la extracción de esquinas. La segmentación de Ultralytics YOLO26 proporciona máscaras para el aislamiento de objetos, lo que permite aplicar el mismo enfoque con entradas enmascaradas antes de procesar la geometría por separado.
Los intervalos más finos del acumulador aumentan el uso de memoria; los intervalos más gruesos fusionan candidatos cercanos. En la extracción de los límites de una tabla, los bordes incompletos reducen la cantidad de límites detectables, mientras que las líneas ajenas pueden generar correcciones de límites incorrectas. Al aumentar maxLineGap, se unen interrupciones más grandes entre tramos alineados; al aumentar minLineLength, se eliminan los segmentos más cortos.










