[MatLab] Creare un array di matrici da piú immagini differenti

Messaggioda leoriccio » 11/08/2017, 10:41

Ciao a tutti, devo scrivere un programma che mi modellizzi la pedalata di un cilcista con una sequenza di immagini; in queste immagini si vedono 5 punti di interesse, selezionandoli nella prima immagine dall'alto verso il basso li faccio identificare al programma, li collego e creo una matrice 5x2 delle loro coordinate.
E fin qui il programma va bene.
Poi devo fare in modo che il programma, aprendo tutte le immagini successive nella sequenza esatta e sapendo che i punti sono sempre spostati di poco tra un'immagine e l'altra, mi riconosca gli stessi 5 punti, mi crei una matrice di tutte le coordinate (perchó 5x(2xn_immagini) in cui ogni riga contiene tutte le coordinate x e y dello stesso punto) e mi crei le rette che mi collegano i punti esattamente come sono stati collegati nella prima immagine.
Spero che qualcuno possa aiutarmi.
Questa é la prima parte del programma, che sono sicuro vada bene al 100%, che mi fa tutto nella prima immagine:

open('x60_codec1');
%ciclo for per portare il file in scala di grigi per migliorarne l'estetica
for i=1:length(x60_codec1)
IMG(:,:,i)=rgb2gray(x60_codec1(i).cdata);
end
I=IMG(:,:,1);
figure(1)
subplot(1,2,1)
imshow(I)

%sequenza di passaggi per migliorare la grafica dei punti e cerchiarli in rosso
BW = im2bw(I,0.8);
se = strel('disk',20);
BW= imdilate(BW,se);
BW= imerode(BW,se);
gui=subplot(1,2,2);
imshow(BW)
[centers,radii] = imfindcircles(BW,[2 10]); %centers é la matrice 5x2 con tutte le coordinate (ordinate dal punto piú grande al piú piccolo)
viscircles(centers, radii,'EdgeColor','r');

%funzione per selezionare manualmente i punti in modo da nominarli esattamente nell'ordine desiderato
[x, y] = getpts(gui);

Href=[x(1) y(1)];
Kref=[x(2) y(2)];
Aref=[x(3) y(3)];
Pref=[x(4) y(4)];
Sref=[x(5) y(5)];
%close Figure

%ciclo for per dare ai punti definiti prima le coordinate esatte nell'immagine e scriverli nell'ordine esatto
n_punti=size(centers,1)-1;

for i=1:n_punti
point=centers(i,:);
norm_vect(1)=norm(point-Href);
norm_vect(2)=norm(point-Kref);
norm_vect(3)=norm(point-Aref);
norm_vect(4)=norm(point-Pref);
[C,I]=min(norm_vect);
point_vect(I,:)=point; %point_vect é una nuova matrice 4x2 con le coordinate esatte dei punti meno quelle di Sref che é solo di riferimento
end

%funzione per creare le linee desiderate
subplot(1,2,1)
line(point_vect(:,1),point_vect(:,2),'Color','b')
subplot(1,2,2)
line(point_vect(:,1),point_vect(:,2),'Color','r')
leoriccio
Starting Member
Starting Member
 
Messaggio: 1 di 24
Iscritto il: 11/08/2017, 10:06

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite