NTU RGB + D 120 动作识别数据集 描绘骨架

“ NTU RGB + D”和“ NTU RGB + D 120”数据集分别包含56,880和114,480个动作样本。两个数据集都为每种样本包括4种不同的数据形式:

  1. RGB视频
  2. 深度图序列
  3. 3D骨骼数据
  4. 红外(IR)视频
    在这里主要先讲解 3D骨骼数据
    两个数据集中的每个文件/文件夹名称均采用SsssCcccPpppRrrrAaaa的格式(例如S001C002P003R002A013),其中sss是设置号,ccc是摄像机ID,ppp是表演者(对象)ID,rrr是复制号(1或2),而aaa是动作类别标签。
    在这里插入图片描述
    NTU RGB + D 120 动作识别数据集 描绘骨架_第1张图片
    打开第一个文件
    NTU RGB + D 120 动作识别数据集 描绘骨架_第2张图片
    对应官方的matlab代码:
    代码1:通过fscanf函数读取数值,一一对应的
    NTU RGB + D 120 动作识别数据集 描绘骨架_第3张图片
    代码2:同理
    NTU RGB + D 120 动作识别数据集 描绘骨架_第4张图片
    最后官方文档会生成一个函数 bodyinfo(f).bodies(b)
bodyinfo(2).bodies().joints(1).x    % 代表第一个文件,第二帧数据bodyinfo(2),第1个骨骼点joints(1),的X坐标

下面可以分别采用scatter函数描写出这一帧中全部的点的数据(这里注意z和y的位置)

scatter3([bodyinfo(i).bodies().joints().x], [ bodyinfo(i).bodies().joints().z], [bodyinfo(i).bodies().joints().y] );

将对应两个点连起来,如16和17号点(这里也要注意z和y的位置),最后可以获得骨架的形状

plot3([bodyinfo(i).bodies().joints(a+1).x , bodyinfo(i).bodies().joints(b+1).x ], [bodyinfo(i).bodies().joints(a+1).z , bodyinfo(i).bodies().joints(b+1).z], [bodyinfo(i).bodies().joints(a+1).y , bodyinfo(i).bodies().joints(b+1).y] ); %这里a+1,b+1是为了让这个骨架图和作者的程序对应

这个数据集使用kinect2.0收集的,所以与1.0有所不同。
NTU RGB + D 120 动作识别数据集 描绘骨架_第5张图片
还要做一些简单的坐标调整,连好骨架最后得到
NTU RGB + D 120 动作识别数据集 描绘骨架_第6张图片
附上简单实现的matlab代码(代码运行的效率不高,但能实现效果,有需要的话后面再改吧 ╮(╯_╰)╭):

function  polt(i)
bodyinfo = read_skeleton_file('E:\NUT RGB-D\Raw_Skeleton_S01-S17\skeleton+D0-30000\S001C001P001R001A002.skeleton'); 
plotlian(i,0,1)
plotlian(i,1,20)
plotlian(i,20,2)
plotlian(i,2,3)

plotlian(i,20,8)
plotlian(i,8,9)
plotlian(i,9,10)
plotlian(i,10,11)
plotlian(i,11,23)
plotlian(i,10,24)

plotlian(i,20,4)
plotlian(i,4,5)
plotlian(i,5,6)
plotlian(i,6,7)
plotlian(i,6,22)
plotlian(i,7,21)

plotlian(i,0,12)
plotlian(i,12,13)
plotlian(i,13,14)
plotlian(i,14,15)

plotlian(i,0,16)
plotlian(i,16,17)
plotlian(i,17,18)
plotlian(i,18,19)

xlabel('X');
zlabel('N');
ylabel('Y');
xlim([0 1]);
ylim([-5 -2]);
box('on');
grid('on');
axis('ij');
scatter3([bodyinfo(i).bodies().joints().x], [ bodyinfo(i).bodies().joints().z], [bodyinfo(i).bodies().joints().y] );
function plotlian(i,a,b)
bodyinfo = read_skeleton_file('E:\NUT RGB-D\Raw_Skeleton_S01-S17\skeleton+D0-30000\S001C001P001R001A002.skeleton'); 
plot3([bodyinfo(i).bodies().joints(a+1).x , bodyinfo(i).bodies().joints(b+1).x ], [bodyinfo(i).bodies().joints(a+1).z , bodyinfo(i).bodies().joints(b+1).z], [bodyinfo(i).bodies().joints(a+1).y , bodyinfo(i).bodies().joints(b+1).y] );
fprintf('\n %f,%f',bodyinfo(i).bodies().joints(a+1).x , bodyinfo(i).bodies().joints(b+1).x )
fprintf('\n %f,%f',bodyinfo(i).bodies().joints(a+1).y , bodyinfo(i).bodies().joints(b+1).y )
fprintf('\n %f,%f',bodyinfo(i).bodies().joints(a+1).z , bodyinfo(i).bodies().joints(b+1).z )
hold on

命令行运行:

polt(100); %画出该文件第100帧的骨架

NTU RGB + D 120 动作识别数据集 描绘骨架_第7张图片

你可能感兴趣的:(数据集)