Contenido principal

Detectar líneas con la transformada de Radon

En este ejemplo se muestra cómo detectar líneas en una imagen utilizando la transformada de Radon. La transformada de Radon está estrechamente relacionada con una operación de visión artificial común conocida como la transformada de Hough. Puede utilizar la función radon para aplicar una forma de la transformada de Hough usada para detectar líneas rectas.

Calcular la transformada de Radon de una imagen

Lea una imagen en el área de trabajo. Conviértala a una imagen en escala de grises.

I = fitsread("solarspectra.fts");
I = rescale(I);

Muestre la imagen original.

figure
imshow(I)
title("Original Image")

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

Calcule una imagen de borde binaria usando la función edge. Muestre la imagen binaria devuelta por la función edge.

BW = edge(I);
figure
imshow(BW)
title("Edges of Original Image")

Figure contains an axes object. The hidden axes object with title Edges of Original Image contains an object of type image.

Calcule la transformada de Radon de la imagen con la función radon. Las ubicaciones de los picos en la transformada se corresponden con las ubicaciones de las líneas rectas de la imagen original.

theta = 0:179;
[R,xp] = radon(BW,theta);

Muestre el resultado de la transformada de Radon.

figure
imagesc(theta,xp,R)
colormap(hot)
xlabel("\theta (degrees)")
ylabel("x^{\prime} (pixels from center)")
title("R_{\theta} (x^{\prime})")
colorbar

Figure contains an axes object. The axes object with title R indexOf theta baseline blank (x toThePowerOf prime baseline ), xlabel theta blank (degrees), ylabel x toThePowerOf prime baseline blank (pixels blank from blank center) contains an object of type image.

Interpretar los picos de la transformada de Radon

Calcule los valores de desplazamiento θ y x' de los cinco mayores picos. Los valores xp_peak_offset representan el desplazamiento del pico desde el centro de la imagen, en píxeles.

R_sort = sort(unique(R),"descend");

[row_peak,col_peak] = find(ismember(R,R_sort(1:5)));
xp_peak_offset = xp(row_peak);
theta_peak = theta(col_peak);

Añada un marcador x en el centro de la imagen original. Los índices de fila se asignan a la dirección y y las columnas se asignan a la dirección x, por lo que debe calcular centerX como la mitad del número de columnas y centerY como la mitad del número de filas de la imagen I.

centerX = ceil(size(I,2)/2);
centerY = ceil(size(I,1)/2);

figure
imshow(I)
hold on
scatter(centerX,centerY,50,"bx",LineWidth=2)

Figure contains an axes object. The hidden axes object contains 2 objects of type image, scatter.

Hay tres picos marcados con θ = 1 grado y desplazamientos de –80, –84 y –87 píxeles desde el centro. Represente la línea radial que pasa por el centro a un ángulo de θ = 1 grado como una línea roja discontinua. Represente la transformada de Radon como líneas rojas continuas perpendiculares a la línea discontinua y desplazadas –80, –84 y –87 píxeles desde el centro, lo que las coloca a la izquierda.

[x1,y1] = pol2cart(deg2rad(1),5000);
plot([centerX-x1 centerX+x1],[centerY+y1 centerY-y1],"r--",LineWidth=2)

[x91,y91] = pol2cart(deg2rad(91),100);
for i=1:3
    plot([centerX-x91+xp_peak_offset(i) centerX+x91+xp_peak_offset(i)], ...
        [centerY+y91 centerY-y91], ...
        "r",LineWidth=2)
end

Figure contains an axes object. The hidden axes object contains 6 objects of type image, scatter, line.

También hay dos picos marcados a θ = 91 grados con desplazamientos de –8 y –44 píxeles desde el centro. Represente la línea radial que pasa por el centro a un ángulo de θ = 91 grados como una línea verde discontinua. Represente los picos de Radon como líneas verdes continuas perpendiculares a la línea discontinua y desplazadas –8 y –44 píxeles desde el centro, lo que las coloca abajo.

plot([centerX-x91 centerX+x91],[centerY+y91 centerY-y91],"g--",LineWidth=2)

for i=4:5
plot([centerX-x1 centerX+x1], ...
    [centerY+y1-xp_peak_offset(i) centerY-y1-xp_peak_offset(i)], ...
    "g",LineWidth=2)
end

Figure contains an axes object. The hidden axes object contains 9 objects of type image, scatter, line.

Consulte también

| |

Temas