WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Movie pause

 

Earny
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 20.05.2015, 22:05     Titel: Movie pause
  Antworten mit Zitat      
Hallo.

Ich bin damit beschäftigt, Partikel mit einem Laser in Bewegung zu bringen. Als Programmiersprache nutze ich Matlab. Ich habe 3 Partikel, die durch den Laserstrahl eingefangen werden, wobei ich die äußeren bewege und und das mittlere in Ruheposition beobachte. Dabei muss ich das mittlere Partikel vor und während der Bewegung der äußeren Partikel beobachten, d.h. einen Bildausschnitt und dann eine Videosequenz mit der Software "ueye" erstellen.

Wie kann ich durch Matlab das "movie" beginnen bevor ich die äußeren Partikel bewege und dann eine Pause einführen, um danach die Bewegung zu starten. Ich darf dabei meinen Bildausschnitt nicht entfernen.

Mit folgendem Code habe ich es versucht, aber die Pause zwischen statischem Bild und der Bewegung ist zu lange. Es müsste direkt übergehen.
Code:

figure(21); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;
%     imshow(phi_sp_new_statisch);
    n_times2 = 5;
    fps2 = 1;
    movie(video(1),n_times2,fps2);
   
   
     
    figure(22); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;

    l_vid = length(video);
   
    n_times = 10;
    fps = 60;
     
    movie(video,n_times,fps); %movie(M,n-times,fps)
 


Wäre auf Antworten sehr dankbar.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.05.2015, 10:38     Titel: Re: Movie pause
  Antworten mit Zitat      
Hallo Earny,

Der erste Absatz ist für die Lösung des Problems nicht relevant, oder? Falls doch, erkläre es bitte nochmal so, dass auch Leute verstehen können, die nicht genau in Deinem Fachgebiet arbeiten.

Zitat:
Wie kann ich durch Matlab das "movie" beginnen bevor ich die äußeren Partikel bewege und dann eine Pause einführen, um danach die Bewegung zu starten. Ich darf dabei meinen Bildausschnitt nicht entfernen.

Ich verstehe nicht, was das bedeutet.

Zitat:
Mit folgendem Code habe ich es versucht, aber die Pause zwischen statischem Bild und der Bewegung ist zu lange. Es müsste direkt übergehen.

Kannst Du noch erklären, wo was in was direkt übergehen müsste? An welcher Stelle tritt die Pause ein und wie lange ist sie?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 21.05.2015, 21:19     Titel:
  Antworten mit Zitat      
Also noch einmal.

Meine Aufgabe besteht darin, mehrere Mikropartikel mit Laserstrahlen einzufangen. Dabei kann ich beliebig viele und bestimmte Partikel bewegen.
Den jeweiligen Abstand zwischen den Partikeln, die Bewegungslänge der Partikel kann ich in Matlab eingeben.
Mit der Software uEye beobachte ich eine Liveaufnahme der Partikel unter dem Mikroskop. Dabei muss ich aber explizit einen Partikel beobachten und dessen Auslenkung im statischen Zustand und während der Bewegung der übrigen (2) Partikel ermitteln.
Mein Problem ist folgendes:
Ich möchte beispielsweise 3 Partikel einfangen, indem ich das Matlab-Programm starte. Anschließend möchte ich durch die Software uEye eine Videosequenz aufnehmen, aber nur von dem mittleren ruhenden Partikel, indem ich einen Ausschnitt erstelle. Nach 5 Sekunden ohne Stoppen der Videoaufnahme soll durch Betätigen einer Taste beispielsweise das Matlab-Programm die äußeren Partikel zur Bewegung bringen. Dies kann beliebig lange dauern, so dass ich nach Wunsch mein Video stoppen kann.

Es geht darum, die Auslenkung des mittleren Partikels ohne und mit Bewegung der äußeren Partikel zu ermitteln. Diese erfolgt dann durch Partikeldetektion mit einem weiteren Matlab-Code, wobei dies problemlos gelingt.

Ich hoffe, dass der Sachzusammenhang nun klar ist Jan.

Würde mich über positive Rückmeldungen freuen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 21.05.2015, 22:08     Titel:
  Antworten mit Zitat      
ich muss ehrlich sagen das ich jetzt noch weniger durchsehe als vorher. du hast anstatt das problem auf seine grundlegenden eigenschaften zurück zu führen es noch weiter mit realen dingen erklärt. ich glaube das ist genau das gegenteil von dem was jan meinte Smile aber ich mag mich da auch irren Smile es ist immer schwer eine frage zu stellen. wenn man sich selber mit dem problem beschäftigt ist alles offensichtlich. aber als außenstehender halt nicht.
Zitat:
Meine Aufgabe besteht darin, mehrere Mikropartikel mit Laserstrahlen einzufangen. Dabei kann ich beliebig viele und bestimmte Partikel bewegen.
ist es für die lösung deines problem mit der pause im movie wirklich wichtig das die "parikel mit Lasertrahel eingefangen werden?
Zitat:
Den jeweiligen Abstand zwischen den Partikeln, die Bewegungslänge der Partikel kann ich in Matlab eingeben.
Mit der Software uEye beobachte ich eine Liveaufnahme der Partikel unter dem Mikroskop. Dabei muss ich aber explizit einen Partikel beobachten und dessen Auslenkung im statischen Zustand und während der Bewegung der übrigen (2) Partikel ermitteln.
Mein Problem ist folgendes:

ich weis nichtmal was der partikel bei dir in matlab ist... aus deinem code beispiel kann ich das so nicht erkennen was das damit zu tun hat...
Zitat:
Ich möchte beispielsweise 3 Partikel einfangen, indem ich das Matlab-Programm starte.
ich dachte du willst irgendwas pausieren.... und wie fängt matlab parikel ein? ....
ich hoffe du sihst worauf ich hinaus will. es ist alles andere als einfach die richtigen fragen zu stellen da zur richtigen fragestellung auch schon ein verständniss der dinge notwendig ist die eigendlich zur lösung des problems notwending sind. wenn du also dein problem auf die matlab ebene runterprechen kannst ohne dabei begriffe zu verwenden wie "parikel" etc wäre das besser. ich kann dir so sonst leider nicht helfen. aber vieleicht siht ja jan besser durch Smile
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 23.05.2015, 13:38     Titel:
  Antworten mit Zitat      
Hallo Winkow.

Es kann sein, dass ich mehr über meine Arbeit geschrieben habe als über das Problem mit Matlab. Aber aus dem Grund, damit klar wird, was mit Matlab programmiert werden soll und worum es eigentlich geht.
Der Laser fängt natürlich Partikel ein, den ich aber mit Matlab steuere.

Ich frage mal kurz und knapp: Nachdem im Programm "figure 21" beendet ist (statischer Zustand der Partikel) soll es mit "figure 22" weitergehen (Bewegung der äußeren Partikel). Das Problem ist, dass zwischen den beiden eine längere Pause eintritt. Es sollte direkt übergehen.
Oder was wäre eine andere Möglichkeit?

Ich bin kein Programmierer, das Programmieren umfasst nur einen sehr geringen Anteil meiner Arbeit.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2015, 22:38     Titel:
  Antworten mit Zitat      
Hallo Earny,

Zitat:
Es kann sein, dass ich mehr über meine Arbeit geschrieben habe als über das Problem mit Matlab.

Was Dein Fachgebiet angeht, bist Du hier höchstwahrscheinlich der einzige Profi. Deinen Erklärungen dazu wird hier also wohl niemand folgen können. Du hast aber auch keine Fragen zu Deinem Fachgebiet, sondern zu Matlab.

Zitat:
Aber aus dem Grund, damit klar wird, was mit Matlab programmiert werden soll und worum es eigentlich geht.

Worum es eigentlich geht bleibt den Hilfe-Leistenden im Allgemeinen verborgen, denn es wäre viel zu viel Aufwand sich in jedes Problem inhaltlich hineindenken zu müssen. Nach ein paar Tausend Antworten würde man sonst sicherlich schnell durchdrehen :-)
Deshalb sind Erklärungen zu den physikalischen Grundlagen im Allgemeinen Zeitverschwendung für Dich und für alle Leser.

Zitat:
Der Laser fängt natürlich Partikel ein, den ich aber mit Matlab steuere.

Es ist nicht wichtig für das eigentliche Matlab-Problem, wie Du was steuerst, oder?

Zitat:
Nachdem im Programm "figure 21" beendet ist (statischer Zustand der Partikel) soll es mit "figure 22" weitergehen (Bewegung der äußeren Partikel).

Wieso werden dafür unterschiedliche FIGUREs verwendet?

Zitat:
Das Problem ist, dass zwischen den beiden eine längere Pause eintritt. Es sollte direkt übergehen.

Wie lange ist "längere"? Sekundenbruchteile oder Minuten? Welche Verzögerung wäre akzeptabel?

Kannst Du alles, was Zeit benötigt, erledigen, bevor der erste Schritt stattfindet?
Kannst Du mit dem Profiler oder mit ein paar TIC/TOCs heraus finden, welche Befehle welche Zeiten benötigen?

An welcher Stelle im Code kommt dies zum Tragen:
Zitat:
Nach 5 Sekunden ohne Stoppen der Videoaufnahme soll durch Betätigen einer Taste beispielsweise das Matlab-Programm die äußeren Partikel zur Bewegung bringen. Dies kann beliebig lange dauern, so dass ich nach Wunsch mein Video stoppen kann.


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 23.05.2015, 23:00     Titel:
  Antworten mit Zitat      
Hallo Jan,

figure 21 wird verwendet, um ein statisches Bild zu erzeugen. Figure 22, um ein dynamisches Bild zu erstellen.
Der statische Teil dauert 5 Sekunden, danach sollte ohne Verzögerung direkt der nächste Teil weitergehen. Ich muss aber in meinem Code im Anschluss an figure 21 ca. 3-5 Sekunden warten bis der dynamische Teil weitergeht.

Welche Moglichkeiten gibt es denn im Allgemeinen, um meine Erwartungen zu erfüllen? Der vorgegebene Code ist ja eine Möglichkeit, aber ich könnte diesen ja auch anders formulieren. Wichtig ist, dass ich sowohl statische als auch dynamische Bilder erhalte.

Vielleicht sollte ich den Anfang des Codes auch mal einfügen, wenn es etwas bringt.

Gruß,
Earny
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 23.05.2015, 23:05     Titel:
  Antworten mit Zitat      
Code:

%% Stationary Three Sphere Microswimmer
%
%   |-------D-------|
%   |-e-|
%  O-----=====O=====-----O
%  2                 1                 3
%
%          ----> moving direction of the swimmer

clear all;
clc;
close all;


%% Parameter: %%
% D = maximaler Partikelabstand
% e = maximaler Verfahrweg
% delta = resultierende Verschiebung nach 4 Schritten
% R = Radius Partikel

%UMRECHNUNGSFAKTOR AUF µM!!!!


D = 12.5;
e = 10.5;
R = 1;
delta = 2.8 * R * ((e/D).^3); % nach [j.Chem.Phy. 126, 064703 (2007) !!! kann auch anders berechnet werden !!!


x_res = 1920;
y_res = 1080;
[X,Y] = meshgrid(1:1:x_res, 1:1:y_res);

% distance_from_zero = 10;


%% Sphere in middle (1) is fixed
% Position (0/0)

    step_size = 0.4;
    frame_number = 1;
   
    shift_x1 = 0;
    shift_y1 = 0;
       
    sph1 = mod(1/100 * (2*pi*shift_x1*X + 2*pi*shift_y1*Y),2*pi);
   
    tic
   
    disp('Program running ...');
   
   
    for kk=0:1:4
   
        if kk==1
           
            for ii=0:step_size:e

                shift_x2 = -D + ii;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                %Berechnung des gesamten Phasenbildes (sph1+sph2+sph3)
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition
                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);
               
                if ii==0;
                    phi_sp_new_statisch = phi_sp_new;
               
                end

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                if ii==0
                    start_frame = phi_sp_new;
                end
                frame_number=frame_number+1;

            end
           
        elseif kk==2
           
            for ii=0:step_size:e
               
                shift_x2 = -D + e;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D - ii;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
            end
       
       elseif kk==3
           
           for ii=0:step_size:e
               
                shift_x2 = (-D + e) - ii;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D - e;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
           end
       
       elseif kk==4

          for ii=0:step_size:e
             
                shift_x2 = -D;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = (D - e) + ii;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
          end
         
        else
                 
       end                              
                                                 
    end
    toc
   
frame_number=frame_number-1;
   
disp('Calculations complete ...');
% msgbox('SLM calculations complete');

%% plot hologram

    %%
 
    figure(21); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;
%     imshow(phi_sp_new_statisch);
    n_times2 = 5;
    fps2 = 1;
    movie(video(1),n_times2,fps2);
   
   
     
    figure(22); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;

    l_vid = length(video);
   
    n_times = 10;
    fps = 60;
     
    movie(video,n_times,fps); %movie(M,n-times,fps)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2015, 23:31     Titel:
  Antworten mit Zitat      
Hallo Earny,

Ich empfehle dringen unbedingt da "clear all" wegzulassen. Es ist viel sicherer mit Funktionern zu arbeiten, statt in Scripts den Workspace mit Variablen zu fluten und vorsichtshalber alles zu löschen - eben auch alles nützliche wie Breakpoints des Debuggers und bereits eingelesene Funktionen, so dass der erneute Aufruf wieder zeitaufwändiges Lesen von der Festplatte benötigt.

Code:
...
disp('Calculations complete ...');
figure(21); % Phasenbild auf 2. Bildschirm
set(gca,'Position', [0 0 1 1], ...
     'Visible', 'Off');
set(gcf,'menubar','none');
colormap gray;

figure(22);
set(gca,'Position', [0 0 1 1], 'Visible', 'Off');
set(gcf,'menubar','none');
colormap gray;

    l_vid = length(video);
   
    n_times = 10;
    fps = 60;

    n_times2 = 5;
    fps2 = 1;

drawnow;

figure(21);
movie(video(1),n_times2,fps2);
   
figure(22);
movie(video,n_times,fps); %movie(M,n-times,fps)
 

Welche Timings siehst Du damit?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 25.05.2015, 15:51     Titel:
  Antworten mit Zitat      
Hey Jan,

zunächst einmal danke für den Code.

Ich habe es damit auch versucht, aber es erscheint auch ein kurzes Stoppen von etwa 2 Sekunden.

Weißt du was ich mit dem Stoppen zwischen beiden 'figure's meine?

Wenn du mit F9 ein Phasenbild erstellst, sieht man, dass kurz das Bild grau wird. Das ist mein Problem. Wie lange jeweils die figure's dauern ist nicht relevant.

Mit dem folgenden Code (was ich vorher geschickt hatte, nur mit einer pause noch dazwischen) beginnt figure21. Wenn ich dann die Leertaste betätige, geht es nach etwa 2 Sekunden in figure22 über. Aber ich darf diese 2 Sekunden dazwischen nicht haben.

Code:

%% Stationary Three Sphere Microswimmer
%
%   |----D----|
%   |-e-|
%  O-----=====O=====-----O
%  2          1          3
%
%          ----> moving direction of the swimmer

clear all;
clc;
close all;


%% Parameter: %%
% D = maximaler Partikelabstand
% e = maximaler Verfahrweg
% delta = resultierende Verschiebung nach 4 Schritten
% R = Radius Partikel

%UMRECHNUNGSFAKTOR AUF µM!!!!


D = 12.5;
e = 10.5;
R = 1;
delta = 2.8 * R * ((e/D).^3); % nach [j.Chem.Phy. 126, 064703 (2007) !!! kann auch anders berechnet werden !!!


x_res = 1920;
y_res = 1080;
[X,Y] = meshgrid(1:1:x_res, 1:1:y_res);

% distance_from_zero = 10;


%% Sphere in middle (1) is fixed
% Position (0/0)

    step_size = 0.4;
    frame_number = 1;
   
    shift_x1 = 0;
    shift_y1 = 0;
       
    sph1 = mod(1/100 * (2*pi*shift_x1*X + 2*pi*shift_y1*Y),2*pi);
   
    tic
   
    disp('Program running ...');
   
   
    for kk=0:1:4
   
        if kk==1
           
            for ii=0:step_size:e

                shift_x2 = -D + ii;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                %Berechnung des gesamten Phasenbildes (sph1+sph2+sph3)
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition
                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);
               
                if ii==0;
                    phi_sp_new_statisch = phi_sp_new;
               
                end

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                if ii==0
                    start_frame = phi_sp_new;
                end
                frame_number=frame_number+1;

            end
           
        elseif kk==2
           
            for ii=0:step_size:e
               
                shift_x2 = -D + e;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D - ii;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
            end
       
       elseif kk==3
           
           for ii=0:step_size:e
               
                shift_x2 = (-D + e) - ii;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = D - e;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
           end
       
       elseif kk==4

          for ii=0:step_size:e
             
                shift_x2 = -D;
                shift_y2 = 0;

                sph2 = mod(1/100 * (2*pi*shift_x2*X + 2*pi*shift_y2*Y),2*pi);

                shift_x3 = (D - e) + ii;
                shift_y3 = 0;

                sph3 = mod(1/100 * (2*pi*shift_x3*X + 2*pi*shift_y3*Y),2*pi);
               
                superpos = exp(1i*sph1) + exp(1i*sph2) + exp(1i*sph3);
                phi_sp = angle(superpos); % phi_superposition

                maxv=max(max(phi_sp));
                minv=min(min(phi_sp));
                phi_sp_new=uint8((phi_sp-minv)/(maxv-minv)*255);

                video(frame_number)=im2frame(phi_sp_new,gray(256));
                frame_number=frame_number+1;
               
          end
         
        else
                 
       end                              
                                                 
    end
    toc
   
frame_number=frame_number-1;
   
disp('Calculations complete ...');
% msgbox('SLM calculations complete');

%% plot hologram

    %%
 
    figure(21); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;
%     imshow(phi_sp_new_statisch);
    n_times2 = 5;
    fps2 = 1;
    movie(video(1),n_times2,fps2);
   
    pause();
 
    figure(22); % Phasenbild auf 2. Bildschirm
%     set(gcf,'outerposition', [1913         113        1936     1118]); %left bottom width height
    set(gca,'Position', [0 0 1 1]);
    set(gca,'Visible', 'Off');
    set(gcf,'menubar','none');
%     axis('square');
    colormap gray;

    l_vid = length(video);
   
    n_times = 5;
    fps = 60;
     
    movie(video,n_times,fps); %movie(M,n-times,fps)
 


Ich hoffe, du kannst mir auf die Sprünge helfen. Wenigstens ist jetzt glaube ich klar, worum es geht. Smile

Viele Grüße,
Earny
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.05.2015, 23:09     Titel:
  Antworten mit Zitat      
Hallo Earny,

Zitat:
Ich habe es damit auch versucht, aber es erscheint auch ein kurzes Stoppen von etwa 2 Sekunden.

Da ich immer noch am Raten bin, wann genau diese Pause auftritt, wäre es eine gute Idee, die mal explizit im Code zu markieren oder eindeutig zu erklären.

Zitat:
Weißt du was ich mit dem Stoppen zwischen beiden 'figure's meine?

Nein.

Zitat:
Wenn du mit F9 ein Phasenbild erstellst, sieht man, dass kurz das Bild grau wird. Das ist mein Problem. Wie lange jeweils die figure's dauern ist nicht relevant.

Ein Phasenbild mit F9? Das sagt mir gar nichts. Wo sieht man kurz ein graues Bild?

Ich habe nun mal den Code aufgeräumt. Z.B sind die EXP-Berechnungen sind am teuersten und man kann einige davon vor die Schleifen ziehen, weil sie gar nicht von den Schleifenzählern abhängen. Das macht den Code schon mal 30% schneller, das eigentliche Problem liegt aber an anderer Stelle - und es wäre effizient gewesen, wenn genau dies gleich in der ersten Fragen gestanden hätte:

Du hast ein Array mit 108 Frames, also ein struct mit den Feldern:
cdata: [1080x1920 uint8]
colormap: [256x3 double]
Der Aufruf des MOVIE-Befehls benötigt eine Pause von etwa 2 Sekunden, bevor das Video abgespielt wird.

Muss das in Matlab abgespielt werden oder könntest Du auch ein animiertes GIF daraus machen und es mit einem externen Programm abspielen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 25.05.2015, 23:36     Titel:
  Antworten mit Zitat      
Hallo Jan,

wenn du den gesamten Code markierst und F9 drückst, dann siehst du es eigentlich was ich mit dem grauen Bild meine. Es werden ja 2 figures nacheinander erstellt. Zwischen diesen kommt es kurz zum Stoppen. Damit würdest du es besser verstehen (also mit F9).

Code:

...
disp('Calculations complete ...');
figure(21); % Phasenbild auf 2. Bildschirm
set(gca,'Position', [0 0 1 1], ...
     'Visible', 'Off');
set(gcf,'menubar','none');
colormap gray;

figure(22);
set(gca,'Position', [0 0 1 1], 'Visible', 'Off');
set(gcf,'menubar','none');
colormap gray;

    l_vid = length(video);
   
    n_times = 10;
    fps = 60;

    n_times2 = 5;
    fps2 = 1;

drawnow;

figure(21);
movie(video(1),n_times2,fps2);

 
-----> (Nachdem figure21 fertig ist, beginnt figure22 nach ca. 2 Sekunden)

 
figure(22);
movie(video,n_times,fps); %movie(M,n-times,fps)
 


Gruß, Earny
Private Nachricht senden Benutzer-Profile anzeigen
 
Earny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 20.05.15
Wohnort: Essen
Version: R2014a
     Beitrag Verfasst am: 26.05.2015, 00:22     Titel:
  Antworten mit Zitat      
Hey Jan,

es sollte schon in Matlab abgespielt werden. Und das mit 2 Sekunden habe ich jetzt erst gelesen. Also führt kein Weg vorbei, dass das Video mit dem movie-Befehl nach 2 Sekunden abgespielt wird???

Es müssen ja dann nicht 2 figures sein, sondern könnte auch ein figure bzw. ein Video sein. Die Pause am Anfang wäre nicht problematisch. Aber es geht mir in der Arbeit darum, Mikropartikel einzufangen und anschließend äußere zu bewegen. Deshalb hatte ich 2 movie-Befehle.

Ich darf mit dem Programm uEye, welches ich zur Videoaufnahme der Partikel nutze, NUR EINEN Ausschnitt erstellen, womit ich dann ruhende Partikel und bewegende Partikel beobachte bzw. aufnehme. Diese Videoaufnahme hat nichts mit dem Matlab-Video zu tun. Ich kann damit die Partikel unter dem Mikroskop aufnehmen. Vorher muss aber der movie-Befehl ausgeführt sein.

Gibt es keine Möglichkeit, das Video zu pausieren? Also nach dem Start des movie-Befehls möchte ich das Video stoppen, dann nach 15 Sekunden beispielsweise wieder fortfahren. Wie wäre das denn in meinem Fall möglich?

Gruß, Önder
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.05.2015, 10:56     Titel:
  Antworten mit Zitat      
Hallo Earny,

Ich weiß nicht, womit MOVIE die 2 sekündige Pause verbringt. Wahrscheinlich werden die großen 1080x1920 Frames mit indizierten Farber erst mal in die Aufklösung des AXES-Objektes umgerechnet. Ich habe testweise versucht, ob es mit RGB-Bildern schneller geht - ohne Erfolg: Jedes CDATA und COLORMAP per IND2RGB in ein RGB-Array umgewandelt.
Aber Graustufen-Bilder könnten auch hilfreich sein. Oder wenn das AXES-Objekt auch 1920x1080 pixels besitzt.
Oder der Befehl IMPLAY. Vielleicht ist es auch schneller ein animiertes GIF zu erzeugen und es dann in Matlab abzuspielen (frage Deine Internet-Suchmaschine nach Details).

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.