Daniel@0: % Let the user draw a square with the mouse, Daniel@0: % and then click on the corners to do a manual segmentation Daniel@0: Daniel@0: ss = 6; Daniel@0: Q1 = 1; Q2 = 2; Q3 = 3; obsvel = 6; Daniel@0: CLOCKWISE = 1; ANTICLOCK = 2; Daniel@0: LR = 1; UD = 2; RL = 3; DU = 4; Daniel@0: Daniel@0: % repeat this block manually incrementing the sequence number Daniel@0: % and setting ori. Daniel@0: % (since I don't know how to call getmouse as a call-return function). Daniel@0: seq = 4; Daniel@0: %ori = CLOCKWISE Daniel@0: ori = ANTICLOCK; Daniel@0: clear xpos ypos Daniel@0: getmouse Daniel@0: % end block Daniel@0: Daniel@0: % manual segmentation with the mouse Daniel@0: startseg(1) = 1; Daniel@0: for i=2:4 Daniel@0: fprintf('click on start of segment %d\n', i); Daniel@0: [x,y] = ginput(1); Daniel@0: plot(x,y,'ro') Daniel@0: d = dist2([xpos; ypos]', [x y]); Daniel@0: startseg(i) = argmin(d); Daniel@0: end Daniel@0: Daniel@0: % plot corners in green Daniel@0: %ti = first point in (i+1)st segment Daniel@0: t1 = startseg(1); t2 = startseg(2); t3 = startseg(3); t4 = startseg(4); Daniel@0: plot(xpos(t2), ypos(t2), 'g*') Daniel@0: plot(xpos(t3), ypos(t3), 'g*') Daniel@0: plot(xpos(t4), ypos(t4), 'g*') Daniel@0: Daniel@0: Daniel@0: xvel = xpos(2:end) - xpos(1:end-1); Daniel@0: yvel = ypos(2:end) - ypos(1:end-1); Daniel@0: speed = [xvel(:)'; yvel(:)']; Daniel@0: pos_data{seq} = [xpos(:)'; ypos(:)']; Daniel@0: vel_data{seq} = [xvel(:)'; yvel(:)']; Daniel@0: T = length(xvel); Daniel@0: Q1label{seq} = num2cell(repmat(ori, 1, T)); Daniel@0: Q2label{seq} = zeros(1, T); Daniel@0: if ori == CLOCKWISE Daniel@0: Q2label{seq}(t1:t2) = LR; Daniel@0: Q2label{seq}(t2+1:t3) = UD; Daniel@0: Q2label{seq}(t3+1:t4) = RL; Daniel@0: Q2label{seq}(t4+1:T) = DU; Daniel@0: else Daniel@0: Q2label{seq}(t1:t2) = RL; Daniel@0: Q2label{seq}(t2+1:t3) = UD; Daniel@0: Q2label{seq}(t3+1:t4) = LR; Daniel@0: Q2label{seq}(t4+1:T) = DU; Daniel@0: end Daniel@0: Daniel@0: % pos_data{seq}(:,t), vel_data{seq}(:,t) Q1label{seq}(t) Q2label{seq}(t) Daniel@0: save 'square4' pos_data vel_data Q1label Q2label Daniel@0: Daniel@0: nseq = 4; Daniel@0: cases = cell(1,nseq); Daniel@0: for seq=1:nseq Daniel@0: T = size(vel_data{seq},2); Daniel@0: ev = cell(ss,T); Daniel@0: ev(obsvel,:) = num2cell(vel_data{seq},1); Daniel@0: ev(Q1,:) = Q1label{seq}; Daniel@0: ev(Q2,:) = num2cell(Q2label{seq}); Daniel@0: cases{seq} = ev; Daniel@0: end Daniel@0: save 'square4_cases' cases