2014-04-01 44 views
0

我需要你的帮助。我的程序读取一个M-File,这是一个录制的视频。 要显示每个图像我使用“imagesc”,因为图像被保存为200x200矩阵,归一化值范围从0到1.剧情没有重置

读完每幅图像后,我做一些微积分。结果应显示为图像的叠加图(一个点和一个线)。使用下面的代码,可以按照循环的第一次迭代的预期工作。

在所有进一步的迭代中,图像都被重绘(这是正确的),但点和线不被清除。

我该如何实现在显示新图像时清除图。 我用“hold”命令尝试了几个变体。但没有成功。

附加问题(不是那么重要): 是否可以用“set”(特别是Point)交换下面的“plot”命令?

我的程序由多个Axes Elements组成,这些Axes Elements为了保持简单的例子而剪掉了。这意味着我的用户界面非常缓慢的“情节”命令,所以我试图加快与“设置”。

它工作得很好,但我不确定一个简单的Point是否可以用“set”显示。

在此先感谢。

function work() 
    h_figure = figure('Name','MainFig'); 
    hImage.ax = axes('Units', 'Pixels','Position', [50 375 200 200]); 

    imagesc('Parent',hImage.ax,'CData',zeros(200)); 
    hImage.axc = get(gca, 'Children'); 

    hProfileLeft.ax = axes('Position', [50 200 200 100]); 
    hProfileLeft.pl = plot(hProfileLeft.ax, 1:200); 

    for(frame = obj.Startframe:obj.Endframe) 
    imgIntens= obj.video.A.intens(:,:,frame); 
    ProfileResult = doSomeCalc(someArgs); 

    set(hImage.axc, 'CData', imgIntens); % Show Image(200x200 double) 

    hold(hImage.ax, 'on'); % Using hold so that plot is overlayed 

    plot(ProfileResult.peaks.x, ProfileResult.peaks.y,'Parent',hImage.ax); % Simple Point 
    plot(ProfileResult.corridor.left, 1:200, 'Parent',hImage.ax); % Line 

    set(hProfileLeft.pl,'YData', ProfileResult.trace); % Draw data to different axes 
    hold(hImage.ax, 'off'); 
    end 

end 

回答

0

我遇到了同样烦人的行为。对我来说,结论是手动拨打cla

并使用line而不是情节,它有更多的选项(特别是你可以自己标记线条很好),并且不会在被调用时删除情节,也会返回句柄。一旦你拿到手柄,你可以分别删除它们。