Matlab - Sobreescribir posiciones de un vector

 
Vista:
Imágen de perfil de Alberto
Val: 19
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

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


Capture1

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Sobreescribir posiciones de un vector

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 04/07/2019 19:00:00
Bueno todo eso depende del orden que quieras, a cada línea que obtengas podrías calcularle su punto central o centroide redondeandolo a un entero , con eso vas a tener una coordenada x y una coordenada y por cada línea, ahora aquí es donde debes interveni pues estas dos coordenadas las podrías convertir a una sola con la función sub2ind en la que debes agregarle como parámetro la dimensión de tu imagen y después de esto solo debes ordenar esos valores finales probablemente con la función sort en los que te quedarían los índices organizados para transformar en texto y agregarlos a tu código en el for

saludos
https://www.facebook.com/royethasesorias/

preguntas relacionadas


Detección de Líneas en Matlab
Detección de Bordes en Matlab
Transformada de Hough en Matlab
Procesamiento de Imágenes en Matlab
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar