In this series:
Mitsubishi Movemaster Joint Tracking: Part 1 – Concept
Mitsubishi Movemaster Joint Tracking: Part 2 – Communication
Mitsubishi Movemaster Joint Tracking: Part 3 – Joint Tracking with Matlab
Okay I’m not going to type a bunch out here, but I will go ahead and just post the joint tracking video and Matlab code I used. This is using a Kinect for XBox One
Source:
clc
clear
imaqreset
delete(imaqfind)
pause(2)
% Create color and depth kinect videoinput objects.
colorVid = videoinput('kinect', 1)
depthVid = videoinput('kinect', 2)
% Look at the device-specific properties on the depth source device,
% which is the depth sensor on the Kinect V2.
% Set 'EnableBodyTracking' to on, so that the depth sensor will
% return body tracking metadata along with the depth frame.
depthSource = getselectedsource(depthVid);
depthSource.EnableBodyTracking = 'on';
% Acquire 100 color and depth frames.
framesPerTrig = 200;
colorVid.FramesPerTrigger = framesPerTrig;
depthVid.FramesPerTrigger = framesPerTrig;
% Start the depth and color acquisition objects.
% This begins acquisition, but does not start logging of acquired data.
pause(5);
start([depthVid colorVid]);
% Get images and metadata from the color and depth device objects.
[colorImg] = getdata(colorVid);
[~, ~, metadata] = getdata(depthVid);
% These are the order of joints returned by the kinect adaptor.
% SpineBase = 1;
% SpineMid = 2;
% Neck = 3;
% Head = 4;
% ShoulderLeft = 5;
% ElbowLeft = 6;
% WristLeft = 7;
% HandLeft = 8;
% ShoulderRight = 9;
% ElbowRight = 10;
% WristRight = 11;
% HandRight = 12;
% HipLeft = 13;
% KneeLeft = 14;
% AnkleLeft = 15;
% FootLeft = 16;
% HipRight = 17;
% KneeRight = 18;
% AnkleRight = 19;
% FootRight = 20;
% SpineShoulder = 21;
% HandTipLeft = 22;
% ThumbLeft = 23;
% HandTipRight = 24;
% ThumbRight = 25;
% Create skeleton connection map to link the joints.
SkeletonConnectionMap = [ [4 3]; % Neck
[3 21]; % Head
[21 2]; % Right Leg
[2 1];
[21 9];
[9 10]; % Hip
[10 11];
[11 12]; % Left Leg
[12 24];
[12 25];
[21 5]; % Spine
[5 6];
[6 7]; % Left Hand
[7 8];
[8 22];
[8 23];
[1 17];
[17 18];
[18 19]; % Right Hand
[19 20];
[1 13];
[13 14];
[14 15];
[15 16];
];
trackingIndex = [];
trackingIncrement = 1;
for i=1:framesPerTrig
if(sum(metadata(i).BodyTrackingID) ~= 0)
trackingIndex(trackingIncrement)=i;
trackingIncrement=trackingIncrement+1;
else
disp("yup")
end
end
metadata = metadata(trackingIndex);
colorImg = colorImg(:,:,:,trackingIndex);
colors = ['r';'g';'b';'c';'y';'m'];
hfig = figure('units','normalized','outerposition',[0 0 1 1])
%
%
% % Overlay the skeleton on this RGB frame.
for j=1:size(metadata)
anyBodiesTracked = any(metadata(j).IsBodyTracked ~= 0);
trackedBodies = find(metadata(j).IsBodyTracked);
nBodies = length(trackedBodies);
colorJointIndices = metadata(j).ColorJointIndices(:, :, trackedBodies);
imshow(colorImg(:,:,:,j));
for i = 1:24
for body = 1:nBodies
X1 = [colorJointIndices(SkeletonConnectionMap(i,1),1,body) colorJointIndices(SkeletonConnectionMap(i,2),1,body)];
Y1 = [colorJointIndices(SkeletonConnectionMap(i,1),2,body) colorJointIndices(SkeletonConnectionMap(i,2),2,body)];
line(X1,Y1, 'LineWidth', 1.5, 'LineStyle', '-', 'Marker', '+', 'Color', colors(body));
end
hold on;
end
drawnow
tmp = getframe(hfig);
colorImg2(:,:,:,j) = imresize(tmp.cdata,[1280 1920]);
hold off;
end
mov=immovie(colorImg2);
implay(mov);
Mitsubishi Movemaster Joint Tracking: Part 3 – Joint Tracking with Matlab
