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 transformada de Hough estándar (SHT).hough La transformada de 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 a 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 de la transformada de Hough, puede utilizar la función para encontrar los puntos finales de los segmentos de línea correspondientes a los picos de la transformada de Hough.houghlines Esta función rellena automáticamente pequeños huecos en los segmentos de línea.

Detecte líneas en imágenes con Hough

En este ejemplo se 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. Visualice la imagen.

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

Encuentre los bordes en la imagen usando la función.edge

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

Calcule la transformada de 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)

Encuentra los picos en la matriz de transformación Hough, usando la función.Hhoughpeaks

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

Superponer un trazado en la imagen de la transformada que identifica los picos.

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

Buscar 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.

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');