我有一个显示here的向量,代表视频X
的3d点Y
,Z
和frame1
。我有另一个矢量用于视频X
的3D点Y
,Z
和frame2
,等等。
假设我有10帧。我希望在接下来的9帧中跟踪frame1
中的每个3D点。换句话说,我想通过下一帧获得frame1
中每个3D点的轨迹,如图所示。
如果有人可以请建议或指导我如何做到这一点。
答案 0 :(得分:2)
首先:这些点对我来说就像一个表面......你确定你想要个别粒子的轨迹吗?恕我直言,通过你的点动画插值曲面将是更好的选择,但我可能是错的。
现在,有几种方法可以做你想要的。首先使用movie
命令与getframe
结合使用。假设您有一个名为frames
的单元格数组,其中包含
frames{1} = XX;
您已关联的数据,以及frames{2}
至frames{N}
剩余N
帧的数据。然后
% This could take a while....
figure(1);
set(gca, 'NextPlot', 'ReplaceChildren');
for ii = 1:N
pts = frames{ii};
plot3(pts(:,1), pts(:,2), pts(:,3), 'r.');
F(ii) = getframe;
end
% Then playback the movie 100 times
movie(F, 100)
如果你不想要一张动态影像,而是想要所有点的轨迹的静态多色图,你可以通过一次调用plot3
来完成所有这些。 2帧的示例:
YY = XX;
YY(:,1) = YY(:,1) + 10*rand(size(YY(:,1)))-5;
YY(:,2) = YY(:,2) - 2*rand(size(YY(:,2)))+1;
plot3([XX(:,1) YY(:,1)].', [XX(:,2) YY(:,2)].', [XX(:,3) YY(:,3)].')
警告:这可能需要年龄并且看起来完全无法理解超过20分(这就是为什么我会通过这些点设置内插曲面的动画,并使用surf
来制作框架:)
另一种选择是使用comet3
,它会描绘出一个给定的轨迹。在MATLAB命令窗口中键入doc comet3
以获取更多信息。