Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
function cell_connect_tracks(case_string)
track_dir = fullfile('cases',case_string,'tracks');
num_frms = numel(dir([track_dir ,'/*.mat']));
tracks_euler = zeros(num_frms,1000,9);
for volume = 1 : num_frms-1
load([track_dir,'/tracks_',num2str(volume,'%.4d'),'.mat']);
tracks_euler(volume,1:size(tracks,1),:) = tracks;
end;
num_of_tracks = 0;
tracks_lagrangian = zeros(num_frms,4,1000);
for volume = 1 : num_frms
for p = 1:size(tracks_euler,2)
if tracks_euler(volume,p,1) ~= 0
num_of_tracks = num_of_tracks + 1;
tracks_lagrangian(volume,:,num_of_tracks) = tracks_euler(volume,p,[1,4:6]);
tracks_lagrangian(volume+1,:,num_of_tracks) = tracks_euler(volume,p,[2,7:9]);
target_num = tracks_euler(volume,p,2);
tracks_euler(volume,p,:) = zeros(1,9);
for nxt_v = volume + 1 : num_frms
ind = tracks_euler(nxt_v,:,1) == target_num;
if sum(ind) == 0
break
end
tracks_lagrangian(nxt_v,:,num_of_tracks) = tracks_euler(nxt_v,ind,[1,4:6]);
tracks_lagrangian(nxt_v+1,:,num_of_tracks) = tracks_euler(nxt_v,ind,[2,7:9]);
target_num = tracks_euler(nxt_v,ind,2);
tracks_euler(nxt_v,ind,:) = zeros(1,9);
end
end
end
end
% display(sprintf('Number of tracks : %.4d',num_of_tracks));
fst_frame = zeros(1, num_of_tracks);
lst_frame = zeros(1, num_of_tracks);
for p = 1 : num_of_tracks
current_track = tracks_lagrangian(:,:,p);
ind = find(current_track(:,1) ~=0);
fst_frame(p) = min(ind);
lst_frame(p) = max(ind);
end;
for p1 = 1 : num_of_tracks
p1_t = lst_frame(p1);
if p1_t == 0
continue
end
p1_p = tracks_lagrangian(p1_t ,2:4,p1);
for p2 = 1 : num_of_tracks
p2_t = fst_frame(p2);
if p2_t == 0
continue
end
p2_p = tracks_lagrangian(p2_t ,2:4,p2);
dis = sum((p1_p-p2_p).^2)^0.5;
if (p1_t == p2_t)&&(dis<5)
tracks_lagrangian(fst_frame(p2):lst_frame(p2),:,p1) = tracks_lagrangian(fst_frame(p2):lst_frame(p2) ,:,p2);
lst_frame(p1) = lst_frame(p2);
fst_frame(p2) = 0;
lst_frame(p2) = 0;
end;
if (p1_t + 1 == p2_t)&&(dis<10)
tracks_lagrangian(fst_frame(p2):lst_frame(p2),:,p1) = tracks_lagrangian(fst_frame(p2):lst_frame(p2) ,:,p2);
tracks_lagrangian(lst_frame(p1)+1,:,p1) = ...
(tracks_lagrangian(lst_frame(p1),:,p1) + tracks_lagrangian(lst_frame(p1)+2,:,p1) )/2;
lst_frame(p1) = lst_frame(p2);
fst_frame(p2) = 0;
lst_frame(p2) = 0;
end;
end
end
ind = find(fst_frame ~=0);
tracks_lagrangian = tracks_lagrangian(:,:,ind);
num_of_tracks = length(ind);
% display(sprintf('Number of tracks after connection : %.4d',num_of_tracks));
duration = zeros(num_of_tracks,1);
position = zeros(num_of_tracks,3);
displacement = zeros(num_of_tracks,1);
for p = 1 : num_of_tracks
current_track = tracks_lagrangian(:,:,p);
ind = find(current_track(:,1) ~= 0);
s0 = current_track(ind(1),2:4);
st = current_track(ind(end),2:4);
duration(p) = length(ind);
position(p,:) = mean(current_track(ind,2:4),1);
displacement(p) = sum((st - s0).^2)^0.5;
end
% [duration,order] = sort(duration,'descend');
[duration,order] = sort(displacement,'descend');
tracks_order = tracks_lagrangian(:,:,order);
save(fullfile(track_dir,'tracks.mat'),'tracks_order')