1

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

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

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

粒子单元的示例:

典型粒子单元示例

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

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

任何帮助将不胜感激!

4

2 回答 2

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按照您的想法放置第三个坐标。

于 2012-11-27T15:42:14.127 回答
1

我的建议是首先为每条轨道决定你想要的颜色范围。(例如计算每个轨道的速度)

在此之后,您可以sort跟踪以正确的顺序获取它们。

然后你可以使用 acolormap来确保每一行都得到正确的颜色。

于 2012-11-27T14:51:24.687 回答