Matlab - Ordenar un vector de centroides

   
Vista:

Ordenar un vector de centroides

Publicado por Guillermo (12 intervenciones) el 28/03/2017 08:19:49
PICT0006
mi duda es que en la imagen de arriba necesito sacar los centroides y después necesito que se grafique en orden de arriba hacia abajo de izquierda a derecha entonces aplico operaciones morfológicas y saco los centroides hasta ahí todo bien

Mi duda es como ordeno ese vector ya que lo intente por el método burbuja sin resultados favorables y también intente sacar las "x" y las "y" con un resultado todavía más catastrófico si alguien me pudiera ayudar a ordenar los centroides seria genial y se lo agradezco de antemano

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
%%
[nombre, dire]=uigetfile({'*.jpg;*.bmp;*;*.tiff','Imágenes';...
    '*.jpg','JPEG (*.jpg)';'*.bmp', 'BITMAP (*.bmp)';}...
    ,'selecciona imagen','C:\Users\Roguegear\Documents\Escuela\Cuatrimestre 10\Vision');
imcal1=imread( fullfile(dire,nombre));
figure
imshow(imcal1)
assignin('base','imcal1',imcal1);
%%
k=1;
for i=0:5:100
    for j=0:5:100
        a(k,1)=i;
        a(k,2)=j;
        a(k,3)=0;
        k=k+1;
    end
end
%%
img_g=rgb2gray(imcal1);
figure
imshow(img_g);
thresh= graythresh(img_g);
BW=im2bw(img_g,0.5);
figure
imshow(BW)
 
BW=not(BW);
%BW=BW.*(masc)
figure
imshow(BW)
%%
%Obteniendo centroides
BW=bwareaopen(BW,10);
h=ones(2,2);
BW=imerode(BW,h);
figure
imshow(BW)
centroides=regionprops(BW,'centroid');
kk=size(centroides);
centroideso=centroides;
%%
%Ordenando centroides
field ='Centroid';
for k=1:kk(1)
    cen=centroideso(k).Centroid;
    try
        valuex=[valuex;cen(1)];
        valuey=[valuey;cen(2)];
        valueh=[valueh;sqrt(((cen(1))^2)+((cen(2))^2)) k];
    catch
        valuex=cen(1);
        valuey=cen(2);
        valueh=[sqrt(((cen(1))^2)+((cen(2))^2)) k];
    end
end
%Ordenar H
n=kk(1);
svc=length(valueh);
for p=1:svc
    ae1=valueh(p,1);
    ae2=valueh(p,2);
    valuec(p,1)={[ae1 ae2]};
end
centroideso=struct(field,valuec);
for i=1:n
    for j=1:n-i
        ceno=valuec(j);
        cena=valuec(j+1);
        ceno=ceno(1);
        cena=cena(1);
        if ceno>cena
            aux=valuec(j);
            valuec(j)=valuec(j+1);
            valuec(j+1)=aux;
        end
    end
end
% valuef=cat(2,valuex,valuey);
% svc=length(valuef);
% for p=1:svc
%     ae1=valuef(p,1);
%     ae2=valuef(p,2);
%     valuec(p,1)={[ae1 ae2]};
% end
% centroideso=struct(field,valuec);
%%
%Dibujando centroides origen superior izquierdo
figure
imshow(BW)
hold on
for k=1:kk(1)
    cen=centroideso(k).Centroid;
    plot(cen(1),cen(2),'.r','LineWidth',2);
    pause(0.5);
    hold on
end
hold off
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

Ordenar un vector de centroides

1
2
centroidest=reshape([centroideso.Centroid],[],2)
ordenado=sortrows(centroidest,1);

con esto ordenas tus centroides sin usar ciclos, has usado muchos ciclos donde no son necesarios, debes ordenar tus valores de x que están en la primer fila luego si por problema los valores de y están desordenados debes hacer una partición de la matriz y ordenar que fue uno de los problemas que vi en tu código que los valores se graficaban por filas pero el valor de y estaba en desorden, espero te sea de ayuda

saludos
https://www.facebook.com/royethmatlab/
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