我正在使用一些MATLAB代码通过视频捕获跟踪流体解决方案中的粒子。
跟踪的所有粒子都存储在一组单元格(tr
)中,每个单元格条目都是跟踪的不同粒子。然后,单元格包含N x 11
矩阵,其中每行包含该特定帧处的粒子参数(位置,大小,对比度等),N是粒子被跟踪的视频帧数。
每个单元格的第1列包含粒子x位置,每个单元格的第2列包含粒子y位置,每个单元格的第11列包含所捕获的所有帧的粒子平均速度(忽略所有其他列)。 / p>
粒子单元的示例:
现在通常将这些曲目绘制在我捕获的视频的第一帧上,我使用以下代码:
image = read(mmreader([movie '.avi']), 1); %Loads the first frame of the avi file
figure
imshow(image);
hold on
for i = 1:length(tr) % Or choose which particle you want to show
plot3(tr{i}(:,1),tr{i}(:,2),tr{i}(:,11),'r')
end
但我更喜欢做的是绘制粒子,就像我使用上面的代码一样,但粒子轨道的颜色取决于其平均速度的值(红色 - 快,蓝 - 慢等......)。我想也许最好的方法是将它绘制成3D并使用平均速度作为Z轴值?但我仍然不确定这里如何将颜色添加到绘图中并保持其相对性,以便可以通过绘制它们的颜色来比较不同粒子的速度。
非常感谢任何帮助!
答案 0 :(得分:1)
我的建议是首先确定你想要的颜色范围内的每个轨道。 (例如,计算每个轨道的速度)
在此之后,您可以sort
曲目以正确的顺序获取曲目。
然后您可以使用colormap
确保每一行都能获得正确的颜色。
答案 1 :(得分:1)
您可能需要查看FEX包cline。
考虑这个例子(2D曲线的颜色由其速度决定)
tt = 0:.1:5
x_v = sin(tt);y_v = tt.^2; % // my curve
speed = sqrt( cos(tt).^2 + (2 * tt).^2 ); % // its local speed
figure
cline(x_v,y_v,speed);
它也适用于3D,因此您可以将speed
作为您想到的第三个坐标。