2015-10-16 79 views
0

我有一个-constant-image上的P点的像素位置,对于T迭代的算法,所以locations = [T x 2*P] double如何在MATLAB中对图像上的点进行动画处理?

现在我想创建一个动画,在其中绘制图像,然后绘制点,暂停N秒,并将其位置更新为下一步。我不知道是否有标准的方法。我想,我需要这样的东西:

figure; 
imshow(img); 
hold on; 
for t=1:T 
    anim = updatePlot(locations(t,:), anim); % ? 
end 

我怎样才能实现这个功能updatePlot

感谢您的帮助!

+0

在每次更新时,是否只想显示当前点集,或者是否希望以前看到的所有点直到显示当前点?具体来说,假设我们在't-1'时刻有一个点。在't'时刻,你是否希望't-1'时刻的点消失,只有时间点't'的点才可见? – rayryeng

+0

我只想'点(t,:)'出现,是的,我想要删除之前的那些。但是,如果我可以添加转场效果(如淡入淡出或插值),这也可以是非常好的,这将是一个项目演示,以尽可能“漂亮”:) – jeff

回答

1

您可以通过几种不同的方法来做到这一点。第一个办法是给绘制点句柄,这样就可以在下一次迭代之前将其删除:

figure 
imshow(img); 
hold on; 
for t = 1:T 
    % delete the previous points plotted (skip t = 1 since they won't exist) 
    if t > 1 
     delete(hPoints); 
    end 
    hPoints = plot(xLocations(t,:),yLocations(t,:),'.'); 
    getframe; 
    pause(N); 
end 

(我不清楚自己是如何分析你的位置沿每一行的X和Y分离部件,所以我只是用xLocationsyLocations代表这些值)

第二种方法是重新绘制在每次迭代整个图像。

figure 
for t = 1:T 
    clf; 
    imshow(img); 
    hold on; 
    plot(xLocations(t,:),yLocations(t,:),'.'); 
    getframe; 
    pause(N); 
end 

注意imshow可能会有自己的getframe效果,以便在绘制点之前看到图像闪烁 - 如果发生这种情况,请从imshow切换为image

+0

非常感谢Brian。手柄可能是我期待的。但我想知道我们是否也可以添加过渡效果。无论如何,我接受你的答案,但未来的用户:请不要犹豫,建议过渡方式。 – jeff

+0

你是什么意思?你的评论让我意识到我忘记了包括暂停N秒,这可以使用'暂停(N)'完成 - 我已经适当地编辑了答案。你在寻找什么样的过渡效果? –

+0

我不确定其实:)我只是想做一个很好的演示/演示。一个基本的事情可能是“点(t)”淡出,“点(t + 1)”淡入。或者每个点可以逐渐“移动”到下一个位置。只是为了让人们更好地观察过程。 – jeff