MATLAB - 根据可比的z值绘制不同颜色的线条

时间:2012-11-27 14:27:31

标签: matlab colors plot cell octave

我正在使用一些MATLAB代码通过视频捕获跟踪流体解决方案中的粒子。

跟踪的所有粒子都存储在一组单元格(tr)中,每个单元格条目都是跟踪的不同粒子。然后,单元格包含N x 11矩阵,其中每行包含该特定帧处的粒子参数(位置,大小,对比度等),N是粒子被跟踪的视频帧数。

每个单元格的第1列包含粒子x位置,每个单元格的第2列包含粒子y位置,每个单元格的第11列包含所捕获的所有帧的粒子平均速度(忽略所有其他列)。 / p>

粒子单元的示例:

Example of typical particle cell

现在通常将这些曲目绘制在我捕获的视频的第一帧上,我使用以下代码:

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轴值?但我仍然不确定这里如何将颜色添加到绘图中并保持其相对性,以便可以通过绘制它们的颜色来比较不同粒子的速度。

非常感谢任何帮助!

2 个答案:

答案 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);

enter image description here

它也适用于3D,因此您可以将speed作为您想到的第三个坐标。