我有多个轨道(一系列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;
答案 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
希望这有帮助。