Matlab - Ordenar un vector de centroides

 
Vista:
sin imagen de perfil

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
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ordenar un vector de centroides

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 28/03/2017 22:53:04
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