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

Bilder für kurze Zeit anzeigen

 

kritzlibear
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2015, 20:40     Titel: Bilder für kurze Zeit anzeigen
  Antworten mit Zitat      
Hallo,
ich habe mich schon totgesucht und finde für mein Problem keine Lösung. Ich bin leider auch noch nicht sehr bewandert in MATLAB..

Ich möchte für ein Experiment Bilder für eine sehr kurze Zeit (ca. 10 bis 50ms) anzeigen und dann direkt von einem anderen Bild überlagern.

Da pause in dem Zeitbereich nicht mehr hilfreich ist, habe ich andere Möglichkeiten versucht, zb. einfach eine while-Schleife mit tic und toc oder über die Java sleep Funktion, aber dabei wird mir das Bild dann gar nicht mehr angezeigt. Das Programm wartet zwar das angegebene Intervall, überspringt das Bild aber vollkommen.

Kann mir irgendjemand erklären was ich falsch mache?
Oder hat jemand eine andere Idee?

Mein Code sieht zurzeit so aus:
Code:
clear all
clc
% -------------------------------------------------------------------------
% Bilder einlesen
ProbeA=imread('A_Stim.jpg');
ProbeB=imread('B_Stim.jpg');
ProbeC=imread('C_Stim.jpg');
ProbeD=imread('D_Stim.jpg');
StimA=imread('A_1D.jpg');
StimB=imread('B_1D.jpg');
StimC=imread('C_1D.jpg');
StimD=imread('D_1D.jpg');
% -------------------------------------------------------------------------
fig=figure(1);
set (fig, 'menubar', 'none',...
    'name', 'Subliminal test',...
    'units', 'pixels',...
    'Color', [0 0 0]);
cross=plot(500,500, '+');
set (cross, 'color', 'w',...
    'markerfacecolor', 'w',...
    'markersize', 30,...
    'linewidth', 3,...
    'visible', 'off');
set(gca, 'Color', [0 0 0]);
axis ([0 1000 0 1000]);
axis manual
axis equal
axis off
active=text(500, 125, 'Press key when ready');
ready=text(500,500, 'Ready?');
rate=text(500, 125, 'Please rate this picture now.');
set([active ready rate], 'horizontalalignment', 'center',...
    'color', 'w', ...
    'fontname', 'Courier',...
    'fontweight', 'bold',...
    'fontsize', 16,...
    'visible', 'off');
set(ready, 'visible', 'on');
waitforbuttonpress
set(ready, 'visible', 'off');
hold on
n=10;
x=[101 900];
y=[800 200];
for i=1:n
    set([cross active], 'visible', 'on');
    waitforbuttonpress
    set([cross active], 'visible', 'off');
    Stim=ceil(rand(1)*4);
    Probe=ceil(rand(1)*4);
    switch Stim
        case 1
            present=image(x,y,StimA);
        case 2
            present=image(x,y,StimB);
        case 3
            present=image(x,y,StimC);
        case 4
            present=image(x,y,StimD);
    end
    set(present, 'visible', 'on');
    tic
    while toc<1
    end
% genau das funktioniert nicht
    set(present, 'visible', 'off');
    switch Probe
        case 1
            present2=image(x,y,ProbeA);
        case 2
            present2=image(x,y,ProbeB);
        case 3
            present2=image(x,y,ProbeC);
        case 4
            present2=image(x,y,ProbeD);
    end
    set(rate, 'visible', 'on');
    waitforbuttonpress
    set ([rate present2], 'visible', 'off');
end    
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.07.2015, 22:24     Titel: Re: Bilder für kurze Zeit anzeigen
  Antworten mit Zitat      
Hallo kritzlibear,

Zitat:
Ich möchte für ein Experiment Bilder für eine sehr kurze Zeit (ca. 10 bis 50ms) anzeigen und dann direkt von einem anderen Bild überlagern.

Auf welcher Art von Monitor möchtest Du das Bild anzeigen? Übliche LCDs laufen mit 60Hz, also ist weniger als 0.016s nicht machbar.
50ms ist ebenfalls noch ziemlich kurz und Matlab's GUI ist nicht für solche hochfrequenten Abläufe gedacht. Manchmal wird ein drawnow benötigt, um die Bildschirm-Anzeige upzudaten (das könnte auch in Deinem Fall das Problem sein), manche Updates geschehen aber auch erst nach einem pause(0.02) , ohne dass es dafür eine Erklärung gibt.

Zitat:
Da pause in dem Zeitbereich nicht mehr hilfreich ist, habe ich andere Möglichkeiten versucht, zb. einfach eine while-Schleife mit tic und toc oder über die Java sleep Funktion, aber dabei wird mir das Bild dann gar nicht mehr angezeigt.

Bitte erkläre nicht nur grob, was Du versucht hast, sondern poste den Code. Dann kann man es auch nachvollziehen.

Wenn das genaue Timing eine Rolle spielt, ist ein clear all bestimmt kontra-produktiv. Das löscht alle Funktionen aus dem RAM und ein erneutes Nachladen von der Festplatte bremst den Code massiv aus.

Ich verstehe nicht, was der gepostete Code genau macht im Zusammenhang mit der Frage. Kannst Du Dich auf den wesentlichen Teil konzentrieren?
Der Kommentar "genau das funktioniert nicht" ist nicht klar: Was genau funktioniert nicht? Ist das Problem vor oder nach dem Kommentar? Wo hast Du die Java-Sleep-Funktion versucht?

Ich vermute, Dir fehlt ein drawnow , um die Figure zu aktualisieren. Das Timing mit der Auflösung von 10ms wird aber eine ernste Schwierigkeit bleiben.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 11:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

jaja, es ist bisher ein normaler LCD-Monitor. Ich probiere bisher auch erst aus, wie das Experiment aussehen könnte. Vermutlich steige ich später sowieso auf Java um.

16ms müssten auch ausreichen, das wird sich beim ausprobieren ergeben. Es geht eben darum, dass das Bild bewusst nicht mehr wahrgenommen wird.

Ich hab es jetzt mit drawnow versucht und es scheint zu funktionieren, vielen Dank also!

Liebe Grüße,
Sarah

PS: Entschuldigung, falls die Frage bzw der Code nicht ganz verständlich war.
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: 27.07.2015, 11:45     Titel:
  Antworten mit Zitat      
Zitat:
Es geht eben darum, dass das Bild bewusst nicht mehr wahrgenommen wird.

Ich hab es jetzt mit drawnow versucht und es scheint zu funktionieren, vielen Dank also!

das lässt sich ja schwer sagen ohne hilfsmittel oder? also wenn du das optisch nicht wahrnehmen kannst kannst du ja auch nicht bestimmtheit sagen ob es da ist oder das programm es halt nicht mehr darstellt.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kritzlibear
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 12:00     Titel:
  Antworten mit Zitat      
Zitat:
das lässt sich ja schwer sagen ohne hilfsmittel oder? also wenn du das optisch nicht wahrnehmen kannst kannst du ja auch nicht bestimmtheit sagen ob es da ist oder das programm es halt nicht mehr darstellt.


Ja das stimmt. Mein bisheriger Ansatz ist es, die Präsentationsdauer schrittweise zu verringern bis ich zu dem Punkt komme, wo es nicht mehr wahrzunehmen ist bzw. wenigstens nicht zu identifizieren.

Kann es denn passieren, dass MATLAB dann einfach gar nichts mehr anzeigt?

Gibt es denn solche Hilfsmittel?
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: 27.07.2015, 12:04     Titel:
  Antworten mit Zitat      
Zitat:
Kann es denn passieren, dass MATLAB dann einfach gar nichts mehr anzeigt?
das weis ich ehrlich gesagt nicht. darum frag ich nach.
hilfsmittel wäre halt eine highspeed kammera Smile damit man sicher gehen kann Smile
ich bin da nicht in der materie.
_________________

richtig Fragen
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: 27.07.2015, 13:30     Titel:
  Antworten mit Zitat      
Hallo kritzlibear,

Das genaue Timing ist auch mit Java nicht trivial. LCDs haben verschiedene Einschwing-Zeiten, siehe Stichwort "Overdrive". D.h. der Monitor kann die Bilder mit einer Verzögerung darstellen, um Schlieren zu vermeiden. So etwas dürfte für Timer-gesteuerte Experimente sehr tückisch sein.

Viel Erfolg, 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 - 2025 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.