Sobreescribir posiciones de un vector
Publicado por Alberto (9 intervenciones) el 04/07/2019 17:52:57
hola, primero los pongo en algo de contexto... estoy trabajando con procesamiento de imágenes, donde uso la transformada de hough para detectar lineas rectas, hasta allí todo bien. El problema viene cuando quiero etiquetar cada una de las lineas, ya que tengo que etiquetarlas con números en orden y la transformada pues hace su chamba detectando las lineas pero no lo hace en el orden que espero, entonces, lo que quiero saber es como podría yo ordenar las etiquetas
anexo la imagen en donde hago todo el proceso para que se den una mejor idea y también el código con el que realizo el etiquetado

en la imagen se pueden apreciar las rectas con su respectiva etiqueta (numero), sus coordenadas iniciales (los puntos amarillos), puntos finales (los puntos rojos), las intersecciones de las rectas dentro de la zona de interés.
el objetivo es enumerar las rectas de arriba hacia abajo y de izquierda a derecha
CÓDIGO:
en el código lo que hago es leer la imagen, luego cambiar su espacio de color a escala de grises y posteriormente le aplico Canny para la detección de bordes y así poder aplicar la transformada de Hough
y el ciclo for es solo para dibujar las rectas que la transformada encontró y dentro del mismo con la función text realizo el etiquetado de cada uno
el codigo es solo para encontrar las rectas horizontales, ya que es el mismo procedimiento para las verticales
les agradecería muchísimo su ayuda
anexo la imagen en donde hago todo el proceso para que se den una mejor idea y también el código con el que realizo el etiquetado
en la imagen se pueden apreciar las rectas con su respectiva etiqueta (numero), sus coordenadas iniciales (los puntos amarillos), puntos finales (los puntos rojos), las intersecciones de las rectas dentro de la zona de interés.
el objetivo es enumerar las rectas de arriba hacia abajo y de izquierda a derecha
CÓDIGO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Img = imread('Capture_3-14 cells.bmp');
Img_g = rgb2gray(Img);
Img_e = edge(Img_g,'canny');
% búsqueda de líneas horizontales
[H,T,R] = hough(Img_e,'Theta',[-90:-87 86:89]);
P = houghpeaks(H,10);
tempP = find(P(:,2)~=8);
P(tempP,:) = [];
linesH = houghlines(Img_e,T,R,P,'FillGap',200,'MinLength',10);
figure, imshow(Img), hold on
max_len = 0;
for k = 1:length(linesH)
LH = int2str(k);
xy = [linesH(k).point1; linesH(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
text(xy(:,1),xy(:,2),LH,'Color','blue','FontSize',15)
% 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(linesH(k).point1 - linesH(k).point2);
if ( len > max_len)
max_len = len;
xy_long = xy;
end
Lh(k) =linesH(k).rho;
end
en el código lo que hago es leer la imagen, luego cambiar su espacio de color a escala de grises y posteriormente le aplico Canny para la detección de bordes y así poder aplicar la transformada de Hough
y el ciclo for es solo para dibujar las rectas que la transformada encontró y dentro del mismo con la función text realizo el etiquetado de cada uno
el codigo es solo para encontrar las rectas horizontales, ya que es el mismo procedimiento para las verticales
les agradecería muchísimo su ayuda
Valora esta pregunta


0