2014-04-01 41 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而不是情節,它有更多的選項(特別是你可以自己標記線條很好),並且不會在被調用時刪除情節,也會返回句柄。一旦你拿到手柄,你可以分別刪除它們。