Displaying frames in GUIDE

7 views (last 30 days)
John
John on 29 Aug 2014
Commented: John on 6 Sep 2014
I have a necessity to display frames of a video in an axes object (or some other suitable alternative) with the requirement that the various frames can be rendered while maintaining the zoom in level of the axes object. Assume the frames are grayscale and have been stored into a 3 dimensional matrix, the index into the third dimension being used to index frames.
Calling imshow with the parent attribute set to the axes object of my choosing will display the frame. At this point I can use the zoom in controls to zoom into the image data. to display the next frame, my current code calls imshow again with the parent as the same axes object and the image data referenced from the aforementioned 3D array. HOWEVER, the call to imshow resets the zoom, which I believe is set through the XLim and YLim properties of the axes object.
Assuming you have such a 3D array with the frame data for the video, how would you display subsequent frames while maintaining the zoom of the Axes object before the call to imshow?
Something tells me I should keep XLim and YLim of the Axes object untouched and just replace the CData with the data for the new frame. Is this the most effective way to do this?

Accepted Answer

Image Analyst
Image Analyst on 29 Aug 2014
You should be able to set "hold on". However that may "pile up" all the images and you could eventually run out of memory. So you might have to call getimage() and delete any existing image object in the axes before calling imshow() to display the next frame. Don't call "cla reset" as it will reset the zoom. You can check whether "cla" by itself will reset the zoom - I don't know.
  4 Comments
John
John on 29 Aug 2014
Thank you very much Image Analyst.
John
John on 6 Sep 2014
This question has been answered. But reading through the MATLAB documentation, it seems the NextPlot property of Axes can help me achieve the desired effect without having to manipulate CData of the Image . My original problem was that calling the high level image show function, imshow , would cause the Axes properties like XLim and YLim and others which determine the zoom level, to be reset upon subsequent requests for imshow to plot on the same Axes object. It appears setting the NextPlot property of the Axes to ReplaceChildren will preserve those zoom level determining Axes properties between calls to imshow
I imagine setting CData is more efficient and might be a better option if timer objects are being used to play real time video since this would bypass the gauntlet of decision making imshow uses to set things straight
......Just putting it here in case anyone else needs another solution to the original problem......

Sign in to comment.

More Answers (0)

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!