Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Hough Transform

Las funciones de soporte que le permiten utilizar la transformación Hough para detectar líneas en una imagen.Image Processing Toolbox™

La función implementa la transformación de elevación estándar (SHT).hough La transformación Hough está diseñada para detectar líneas, utilizando la representación paramétrica de una línea:

rho = x*cos(theta) + y*sin(theta)

La variable es la distancia desde el origen hasta la línea a lo largo de un vector perpendicular a la línea. es el ángulo entre el eje X y este vector.rhotheta La función genera una matriz de espacio de parámetros cuyas filas y columnas corresponden a estos y valores, respectivamente.houghrhotheta

Después de calcular la transformación Hough, puede utilizar la función para buscar valores máximos en el espacio de parámetros.houghpeaks Estos picos representan líneas potenciales en la imagen de entrada.

Después de identificar los picos en la transformación Hough, puede utilizar la función para buscar los puntos finales de los segmentos de línea correspondientes a los picos de la transformación Hough.houghlines Esta función rellena automáticamente pequeños huecos en los segmentos de línea.

Detectar líneas en imágenes usando Hough

Este ejemplo muestra cómo detectar líneas en una imagen mediante la transformación H.ough

Lea una imagen en el espacio de trabajo y, para que este ejemplo sea más ilustrativo, gire la imagen. Muestre la imagen.

I = imread('circuit.tif'); rotI = imrotate(I,33,'crop'); imshow(rotI)

Busque los bordes de la imagen utilizando la función.edge

BW = edge(rotI,'canny'); imshow(BW);

Calcular la transformación Hough de la imagen binaria devuelta por .edge

[H,theta,rho] = hough(BW);

Mostrar la transformación, , devuelta por la función.Hhough

figure imshow(imadjust(rescale(H)),[],...        'XData',theta,...        'YData',rho,...        'InitialMagnification','fit'); xlabel('\theta (degrees)') ylabel('\rho') axis on axis normal  hold on colormap(gca,hot)

Busque los picos en la matriz de transformación Hough, utilizando la función.Hhoughpeaks

P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));

Superponer un trazado en la imagen de la transformación que identifica los picos.

x = theta(P(:,2)); y = rho(P(:,1)); plot(x,y,'s','color','black');

Busque líneas en la imagen utilizando la función.houghlines

lines = houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);

Cree un trazado que muestre la imagen original con las líneas superpuestas en ella.

figure, imshow(rotI), hold on max_len = 0; for k = 1:length(lines)    xy = [lines(k).point1; lines(k).point2];    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');     % Plot beginnings and ends of lines    plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');    plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');     % Determine the endpoints of the longest line segment    len = norm(lines(k).point1 - lines(k).point2);    if ( len > max_len)       max_len = len;       xy_long = xy;    end end % highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','red');