“ NTU RGB + D”和“ NTU RGB + D 120”数据集分别包含56,880和114,480个动作样本。两个数据集都为每种样本包括4种不同的数据形式:
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有所不同。
还要做一些简单的坐标调整,连好骨架最后得到
附上简单实现的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帧的骨架