在图像上绘制多个轨迹(2D点序列)

时间:2015-05-18 18:29:08

标签: matlab matlab-figure

我有多个轨道(一系列2D点),我想在图像上绘制。例如,在下面的示例中,我有10个轨道,每个轨道都有自己的3个点。我遍历所有轨道并分别绘制每个轨道。请注意,我的所有曲目都有相同的分数。

这很好,但速度很慢。问题在于,当我有大量轨道时(当NUM_TRACKS很大~1000秒时),在每个轨迹上循环并单独绘制它们需要很长时间。有没有办法使用单个plot命令显示所有曲目?

NUM_PNTS = 3;
NUM_TRACKS = 10;
pnts = 400 * rand(NUM_PNTS, 2, NUM_TRACKS);

imshow('peppers.png');
hold on;
for idx = 1:NUM_TRACKS
    curr_pnts = pnts(:,:,idx);
    plot(curr_pnts(:,1), curr_pnts(:,2), '.-', 'Color',[1,1,1], 'LineWidth',2);
end
hold off;

1 个答案:

答案 0 :(得分:1)

更新回答

代码中最耗时的操作是加载图像;尝试添加tic & toc(请参阅下面的代码)。

一种可能的解决方案是将原始pnts矩阵重新整形为(N x M),然后将一组跟踪点放在一起。在这样做时,我们还在轨道的每一组点之间添加一行NaN。

结果矩阵如下所示:

 108.3056  226.8722
   58.8603  322.0754
  294.0138  161.5577
       NaN       NaN
    3.0982  155.5985
   86.1691  190.2200
  390.4753  116.3666
       NaN       NaN
  288.5506  352.9553
  192.4952  158.6255
   31.8394  256.8299
       NaN       NaN
  396.1230  149.1251
  278.0844  110.9723
  274.6267   13.7672
       NaN       NaN

现在我们可以调用plot要求直接绘制矩阵

plot(m(:,1),m(:,2), '.-', 'Color',[0,0,0], 'LineWidth',2);

由于插入了NaN,该函数将绘制与轨道数一样多的“段”。

这应该加快情节。

我已更新代码以生成新的(N x M)矩阵。 (当然,有一种更聪明,更有效的方法)

更新了代码

NUM_PNTS = 3;
NUM_TRACKS = 5000;
pnts = 400 * rand(NUM_PNTS, 2, NUM_TRACKS);

imshow('peppers.png');

tic
m=NaN(NUM_PNTS*NUM_TRACKS+NUM_TRACKS,2);
for i=1:NUM_TRACKS
    m(i+(NUM_PNTS)*(i-1):i+(NUM_PNTS)*(i-1)+NUM_PNTS,:)=[pnts(:,:,i);NaN(1, 2)];
end
plot(m(:,1),m(:,2), '.-', 'Color',[0,0,0], 'LineWidth',2);
hold off;
toc

希望这有帮助。