2016-06-30 5 views
0

Я показываю видео с мышью в U.I, и у меня есть файл с координатами его головы во времени. Я хотел бы отображать для каждого кадра положение головы, используя, например, маркер.Matlab Guide - Показать дополнительную информацию о видео

Вот что я на самом деле:

% --- Get the current frame, display it and set axes properties 
    setDirectory(handles.video,handles.numFrame); 
    I = handles.video.read();   
    imagesc(I,'Parent',handles.axes1); 
    hold on 
    plot(handles.xHead(handles.numFrame),handles.yHead(handles.numFrame),... 
      'o','MarkerFaceColor','b','MarkerSize',10,'Parent',handles.axes1); 
    colormap(gray); 
    handles.axes1.Visible = 'off'; 
    drawnow 
    hold off 

И проблема в том, что это только для просмотра видео, и когда я делаю паузу отростка (с кнопкой обратного вызова), то отображать только точку без текущего кадра. ..

Я огляделся, но ничего не нашел. Любая помощь была бы оценена :)

Спасибо!

редактировать:

здесь код кнопки pause_callback:

% --- Executes on button press in play. 
function play_Callback(hObject, ~, handles) 
% hObject handle to play (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% --- Inverse the value of the button Play/Pause when it is clicked 
if strcmp(hObject.String,'Play') 
    hObject.String = 'Pause'; 
else 
    hObject.String = 'Play'; 
end 

% --- Algorithm to read the video and graphics 
while strcmp(hObject.String,'Pause') 
    % --- Get the way of reading of the video 
    handles.sens = get(handles.listbox3, 'Value'); 
if handles.sens == 1 
    % Go forward 
    handles.defilement = 1; 
elseif handles.sens == 2 
    % Go back 
    handles.defilement = -1; 
end 

% --- Get the speed of the video 
tPause = get(handles.edit2,'String'); 
tPause = str2num(tPause); 
if isempty(tPause) 
    set(handles.edit2,'String','1'); 
    warndlg('Vous devez entrer une valeur num�rique non nulle !'); 
elseif tPause ~= handles.speedBase 
    handles.speedBase = tPause; 
end 

% --- Check if there is still a frame in the video 
if handles.numFrame > 0 && handles.numFrame < (handles.nbrFrames + 1) 

    % --- Get the current frame, display it and set axes properties 
    setDirectory(handles.video,handles.numFrame); 
    I = handles.video.read();   
    imagesc(I,'Parent',handles.axes1); 
    colormap(gray); 
    handles.axes1.Visible = 'off'; 
    pause(0.001); 

    % --- Assign the new position of the marker 
    handles.xMV = handles.numFrame; 
    handles.yMV = handles.yGV(handles.xMV); 

    handles.xMR = handles.numFrame; 
    handles.yMR = handles.yGR(handles.xMR); 

    handles.xMRat = handles.numFrame; 
    handles.yMRat = handles.yGRat(handles.xMRat); 

    if handles.angle.Value==1 
     handles.xMAng = handles.numFrame; 
     handles.yMAng = handles.yGAng(handles.xMAng); 
    end 

    % --- Assign the new scale for Y 
    if mod(handles.numFrame,(handles.ecart/10)) == 0 && handles.autoscale.Value == 1 
     [handles.YminV, handles.YmaxV] = autoscale(handles.yGVsmooth,handles.ecart,handles.numFrame,handles.nbrFrames); 
     handles.yminV.String = handles.YminV; 
     handles.ymaxV.String = handles.YmaxV; 

     [handles.YminR, handles.YmaxR] = autoscale(handles.yGRsmooth,handles.ecart,handles.numFrame,handles.nbrFrames); 
     handles.yminR.String = handles.YminR; 
     handles.ymaxR.String = handles.YmaxR; 

     [handles.YminRat, handles.YmaxRat] = autoscale(handles.yGRat,handles.ecart,handles.numFrame,handles.nbrFrames); 
     handles.yminRat.String = handles.YminRat; 
     handles.ymaxRat.String = handles.YmaxRat; 

     if handles.angle.Value==1 
      [handles.YminAng, handles.YmaxAng] = autoscale(handles.yGAng,handles.ecart,handles.numFrame,handles.nbrFrames); 
      handles.yminAng.String = handles.YminAng; 
      handles.ymaxAng.String = handles.YmaxAng; 
      disp(handles.YminAng); 
      disp(handles.YmaxAng); 
     end 
    end 

    % --- Refresh graphics 
    if handles.numFrame < handles.ecart 
     % --- Display the graphics 
     % Graph of red fluorescence 
     plot(handles.xGV(1:(handles.ecart*2)),handles.yGV(1:(handles.ecart*2)),... 
      handles.xMV,handles.yMV,'o','MarkerFaceColor','r','MarkerSize',3, ... 
      'Color','g','Parent',handles.axes2); 
     % Graph of green fluorescence 
     plot(handles.xGR(1:(handles.ecart*2)),handles.yGR(1:(handles.ecart*2)),... 
      handles.xMR,handles.yMR,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','r','Parent',handles.axes3); 
     % Graph of ratio 
     plot(handles.xGRat(1:(handles.ecart*2)),handles.yGRat(1:(handles.ecart*2)),... 
      handles.xMRat,handles.yMRat,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','b','Parent',handles.axes4); 
     % Graph of the angle 
     if handles.angle.Value==1 
      plot(handles.xGAng(1:(handles.ecart*2)),handles.yGAng(1:(handles.ecart*2)),... 
       handles.xMAng,handles.yMAng,'o','MarkerFaceColor','g','MarkerSize',3, ... 
       'Color','y','Parent',handles.axes6); 
      set(handles.axes6,'xLim',[1 (handles.ecart*2)],'yLim',[handles.YminAng handles.YmaxAng]); 
      set(handles.axes6.Title,'String','Angle'); 
     end 
     % --- Set the properties of the axis 
     % Graph of red fluorescence 
     set(handles.axes2,'xLim',[1 (handles.ecart*2)],'yLim',[handles.YminV handles.YmaxV]); 
     set(handles.axes2.Title,'String','Fluorescence Verte'); 
     % Graph of green fluorescence 
     set(handles.axes3,'xLim',[1 (handles.ecart*2)],'yLim',[handles.YminR handles.YmaxR]); 
     set(handles.axes3.Title,'String','Fluorescence Rouge'); 
     % Graph of ratio 
     set(handles.axes4,'xLim',[1 (handles.ecart*2)],'yLim',[handles.YminRat handles.YmaxRat]); 
     set(handles.axes4.Title,'String','Ratio'); 

    elseif handles.numFrame > handles.ecart && handles.numFrame < (handles.nbrFrames - handles.ecart-1) 
     % --- Display the graph and the marker and make the graph dynamic 
     % Graph of red fluorescence 
     plot(handles.xGV((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)), ... 
      handles.yGV((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)),... 
      handles.xMV,handles.yMV,'o','MarkerFaceColor','r','MarkerSize',3, ... 
      'Color','g','Parent',handles.axes2); 
     % Graph of green fluorescence 
     plot(handles.xGR((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)), ... 
      handles.yGR((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)),... 
      handles.xMR,handles.yMR,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','r','Parent',handles.axes3); 
     % Graph of ratio 
     plot(handles.xGRat((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)), ... 
      handles.yGRat((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)),... 
      handles.xMRat,handles.yMRat,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','b','Parent',handles.axes4); 
     if handles.angle.Value==1 
      plot(handles.xGAng((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)), ... 
       handles.yGAng((handles.numFrame-handles.ecart):(handles.numFrame+handles.ecart)),... 
       handles.xMAng,handles.yMAng,'o','MarkerFaceColor','g','MarkerSize',3, ... 
       'Color','b','Parent',handles.axes6); 
      set(handles.axes6,'xLim',[(handles.numFrame-handles.ecart) (handles.numFrame+handles.ecart-1)],... 
       'yLim',[handles.YminAng handles.YmaxAng]); 
      set(handles.axes6.Title,'String','Angle'); 
     end 
     % --- Set the properties of the axis 
     % Graph of red fluorescence 
     set(handles.axes2,'xLim',[(handles.numFrame-handles.ecart) (handles.numFrame+handles.ecart-1)],... 
      'yLim',[handles.YminV handles.YmaxV]); 
     set(handles.axes2.Title,'String','Fluorescence Verte'); 
     % Graph of green fluorescence 
     set(handles.axes3,'xLim',[(handles.numFrame-handles.ecart) (handles.numFrame+handles.ecart-1)],... 
      'yLim',[handles.YminR handles.YmaxR]); 
     set(handles.axes3.Title,'String','Fluorescence Rouge'); 
     % Graph of ratio 
     set(handles.axes4,'xLim',[(handles.numFrame-handles.ecart) (handles.numFrame+handles.ecart-1)],... 
      'yLim',[handles.YminRat handles.YmaxRat]); 
     set(handles.axes4.Title,'String','Ratio'); 
    elseif handles.numFrame > (handles.nbrFrames - handles.ecart) 
     % --- Display the graph and the marker 
     % Graph of red fluorescence 
     plot(handles.xGV((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1), ... 
      handles.yGV((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1),... 
      handles.xMV,handles.yMV,'o','MarkerFaceColor','r','MarkerSize',3, ... 
      'Color','g','Parent',handles.axes2); 
     % Graph of green fluorescence 
     plot(handles.xGR((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1), ... 
      handles.yGR((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1),... 
      handles.xMR,handles.yMR,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','r','Parent',handles.axes3); 
     % Graph of ratio 
     plot(handles.xGRat((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1), ... 
      handles.yGRat((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1),... 
      handles.xMRat,handles.yMRat,'o','MarkerFaceColor','g','MarkerSize',3, ... 
      'Color','b','Parent',handles.axes4); 
     if handles.angle.Value==1 
      plot(handles.xGAng((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1), ... 
       handles.yGAng((handles.nbrFrames-(handles.ecart*2)):handles.nbrFrames-1),... 
       handles.xMAng,handles.yMAng,'o','MarkerFaceColor','g','MarkerSize',3, ... 
       'Color','b','Parent',handles.axes6); 
      set(handles.axes6,'xLim',[((handles.nbrFrames-1)-(handles.ecart*2)) handles.nbrFrames],... 
       'yLim',[handles.YminAng handles.YmaxAng]); 
      set(handles.axes6.Title,'String','Angle'); 
     end 
     % --- Set the properties of the axis 
     % Graph of red fluorescence 
     set(handles.axes2,'xLim',[((handles.nbrFrames-1)-(handles.ecart*2)) handles.nbrFrames],... 
      'yLim',[handles.YminV handles.YmaxV]); 
     set(handles.axes2.Title,'String','Fluorescence Verte'); 
     % Graph of green fluoresence 
     set(handles.axes3,'xLim',[((handles.nbrFrames-1)-(handles.ecart*2)) handles.nbrFrames],... 
      'yLim',[handles.YminR handles.YmaxR]); 
     set(handles.axes3.Title,'String','Fluorescence Rouge'); 
     % Graph of ratio 
     set(handles.axes4,'xLim',[((handles.nbrFrames-1)-(handles.ecart*2)) handles.nbrFrames],... 
      'yLim',[handles.YminRat handles.YmaxRat]); 
     set(handles.axes4.Title,'String','Ratio'); 
    end 

    % --- Manage the speed of the video 
    pause(tPause); 

    % --- Conditions whiwh prevent to assign a wrong value to 
    % --- handles.numFrame 
    if handles.numFrame == 1 && handles.sens == 1 
     handles.numFrame = handles.numFrame + handles.defilement; 
    elseif handles.numFrame > 1 && handles.numFrame < handles.nbrFrames 
     handles.numFrame = handles.numFrame + handles.defilement; 
    elseif handles.numFrame == handles.nbrFrames && handles.sens == 2 
     handles.numFrame = handles.numFrame + handles.defilement; 
    end 
end 
    % --- Refresh the UI 
    set(handles.text14,'String',handles.numFrame); 

% --- Manage the case we went back to the beginning 
if handles.numFrame == 1 && handles.sens == 2 
    if strcmp(hObject.String,'Pause') 
     % reset status of the button 
     hObject.String = 'Play'; 
    end 
    break 
end 

% --- Manage the case we arrived to the end of the video 
if handles.numFrame == handles.nbrFrames 
    if strcmp(hObject.String,'Pause') 
     % reset status of the button 
     hObject.String = 'Play'; 
    end 
    break 
end 
end 

% Update handles structure 
guidata(hObject,handles); 

Я прошу прощения за плохой отступа, но я не знаю, как решить эту проблему быстро переполнение стека.

+0

Можете ли вы показать свою обратную связь с паузой? – Suever

+0

Я отредактировал мой пост! –

ответ

0

Эта проблема связана с тем, как Matlab использует очереди событий и как спрятать эффекты этих очередей. Я хотел бы попробовать

drawnow разоблачить

Это должно немедленно обновить графику, не допуская другие обратные вызовы уже в очереди событий для обработки перед обновлением.

+0

Это не сработает ... Если я нажимаю, то показываю только точку позиции и не более изображение! Спасибо, что попробовали помочь. –

Смежные вопросы