我正在搜索从数据集中读取骨架文本文件的任何matlab代码(MSR Daily Activity 3D)。我无法弄清楚如何理解文件的编写方式以及它们代表什么?另外,不知道如何解析它们来提取特征。
答案 0 :(得分:1)
网站http://research.microsoft.com/en-us/um/people/zliu/ActionRecoRsrc/会告诉您他们的确切组织方式。他们还提供了一些C ++示例加载器。
"骨架文件的格式如下。第一个整数是帧数。第二个整数是始终为20的关节数。对于每个帧,第一个整数是行数。当在此帧中检测到一个骨架时,此整数为40。没有检测到骨架时为零。检测到两个骨架时是80(在这种情况下很少见,我们只是在实验中使用第一个骨架)。对于大多数帧,行数为40.每个关节对应两行。第一行是它的真实世界坐标(x,y,z),第二行是它的屏幕坐标加上深度(u,v,深度),其中u和v被归一化到[0,1]内。对于每一行,结尾处的整数应该是置信度值,但它没有用。"
希望这有帮助。
答案 1 :(得分:1)
这是读取深度序列的matlab代码。 在'for ei = 1:2'的每个循环中,它从bin文件中读取所有深度数据到深度(3D矩阵)。
clear;close all;clc;
binPath = 'MSR Daily Activity 3D dataset\Depth';
for ai = 1:16
for si = 1:10
for ei = 1:2
%%%%%%%%%%%%%
%%%%%%%%%%%%%
[acsr,susr,exsr]=getsr(ai,si,ei);
%%%%%% getsr(ai,si,ei) convert ai,si,ei to double bits
%%%%%% for example, if ai=3, acsr is 03
%%%%%%%%%%%
binfile = [binPath,'\a',acsr,'_s',susr,'_e',exsr,'_depth.bin'];
if ~exist(binfile,'file');
disp('error');
continue;
end;
disp(binfile);
fileread = fopen(binfile);
if fileread<0
disp('no such file.');
return;
end
header = fread(fileread,3,'uint=>uint');
nnof = header(1); ncols = header(2); nrows = header(3);
depths = zeros(ncols, nrows, nnof);
for f = 1:nnof
frame = zeros( ncols, nrows);
for row = 1:nrows
tempRow = fread(fileread, ncols, 'uint=>uint');
tempRowID = fread(fileread, ncols, 'uint8');%%%%%
frame(:,row) = tempRow;
end
depth(:,:,f) = frame;
clear tempRow tempRowID;
end
fclose(fileread);
end
end
end