Beruflich Dokumente
Kultur Dokumente
Prsentation d'images
sous Matlab
Tuteur de projet:
Mr Pierre Bonnet
Fvrier 2008
Table des matires
2
9.3 l'Absence de toolbox ................................................................................................30
10 Perspectives d'volution................................................................................................31
11 Conclusion......................................................................................................................32
12 Bibliographie..................................................................................................................33
13 ANNEXES......................................................................................................................34
13.1 Programmes lis au GUI .......................................................................................34
13.1.1 Patients............................................................................................................34
13.1.2 Consultation.....................................................................................................41
13.1.3 Explorateur d'images.......................................................................................47
13.2 Programmes li la Psychtoolbox.........................................................................52
13.2.1 Pim_clavier......................................................................................................52
3
1 Remerciements
Nous tenons remercier notre tuteur Monsieur Pierre Bonnet pour ses conseils et
sa disponibilit qui ont permis le bon droulement de ce projet.
4
2 Introduction
5
3 Cahier des charges
3.1 Objectif
L'objectif principal de ce projet est de crer une application pour des manipulations
effectues par des chercheurs du CNRS.
la suite des essais de stimulation sur le patient, pour lesquels le temps est un
paramtre critique. Chaque essai se dcompose en 3 phases :
Les contraintes de temps souhaites par les chercheurs sont de matriser le temps
de prsentation l'image et le temps de rponse la milliseconde prs.
3.2 Descriptif
6
3.4 La manipulation raliser
Lors d'un rendez-vous avec une chercheuse (Delphine PINS) du CNRS, elle nous a
expos le type de manipulation mettre en place au sein du Laboratoire NeuroSciences.
Au cours de ce rapport, nous allons donc vous expliquer la mthode et les moyens
mis en oeuvre pour arriver ce que le laboratoire dsire mettre en oeuvre sur ses sujets.
Une exprience est compose de plusieurs essais. Le nombre d'essais est fix
l'avance.
Essai
4. Pour finir, l'cran est de nouveau noir pendant un dlai appel dlai_post.
Le sujet possde une manette 2 boutons qui va lui permettre de valider ou non un
critre de l'image comme par exemple la prsence ou non d'un animal sur la photo.
Les rsultats de l'exprience sont enregistrs dans un fichier Excel rfrenc dans une
table de base de donnes :
exemple :
feuille1 : identification du sujet,
feuille2 : donnes de l'exprience (paramtres des stimuli et rponses)
7
4 Prsentation du GUI
La premire tape est la cration d'un GUI en tapant le mot cl GUIDE dans la
fentre de commande Matlab. Voici la fentre de dpart :
l'dit box
la listbox
le bouton (pushbutton)
A la cration du GUI (fichier d'extension .fig), un fichier d'extension .m est aussi gnr et
porte le mme nom.
8
4.2 Les fonctions les plus utilises
Pour chaque objet, dans le fichier .m est dclare une fonction Callback prcde
du nom de l'objet (modifiable grce au champ Tag dans ses proprits).
Par exemple :
Par exemple, pour mettre une valeur qui se trouve dans la variable
ChaineCourante dans une listbox qui a pour tag listbox2, le code correspondant est :
set(handles.listbox2,'String',ChaineCourante);
Pour rcuprer ce qu'il y a dans une edit box qui a pour tag nom :
nom = get(handles.nom,'String')
9
5 Interfaces graphiques
Plusieurs edit boxes qui permet l'utilisateur de rentrer l'tat civil du sujet.
Deux radio buttons permettant de slectionner le sexe du sujet.
Un bouton Suivant qui lance la deuxime interface.
Quand l'utilisateur clique sur le bouton Suivant, les caractres rentrs dans les edit
boxes sont rcuprs grce au code suivant :
nom = get(handles.nom,'String');
prenom = get(handles.prenom,'String');
datenaiss = get(handles.datenaiss,'String');
Adresse = get(handles.Adresse,'String');
Ville = get(handles.Ville,'String');
CodePostal = get(handles.CodePostal,'String');
Tel= get(handles.Tel,'String');
Email= get(handles.Email,'String');
10
Le lancement de l'interface, pour remplir les paramtres d'une consultation, se
ralise grce au code suivant :
Plusieurs edit boxes pour renseigner sur les conditions et les raisons de la consultation
Un pushbutton Suivant qui lance la dernire interface.
Un pushbutton Prcdent qui permet de revenir sur la premire interface
11
5.3 Interface 3 : Choix des images et cration du fichier d'exprience .txt
1. Pour slectionner une image, il faut cliquer sur le bouton Chercher une image, qui
ouvre une fentre permettant de parcourir le disque et de choisir n'importe quelle
image. Tous les formats d'image sont possibles (exemple : .jpg , .bmp).
Ensuite un aperu de l'image s'affiche ainsi que le chemin de l'image dans la
listbox.
Voici un exemple:
L'utilisateur a cliqu sur le bouton Chercher une image et a slectionn l'image
avion.jpg dont le chemin est : D:\Vision180\image\Contraste\100005_N.pg
12
Le code correspondant est :
%Rcupration du chemin de l'image choisie par l'utilisateur
[file,path] = uigetfile('*.*');
%Affichage de l'aperu
axes(handles.axes3)
imshow(iref);
2. Puis, par action d'un double clic sur le chemin de l'image, une autre fentre s'ouvre.
L'utilisateur peut ainsi rentrer les deux champs : le delai_pre et le delai_post
13
Il faut bien sr que le delai de l'image soit suprieur 0.Si l'utilisateur se trompe,
c'est dire si il rentre des valeurs trop grandes par rapport la dure de l'essai une dialog
box l'avertit
3. Les paramtres s'affichent ensuite dans les edit box Delai pr et Delai post en
dessous de l'aperu de l'image.
5. Quand le choix des images ainsi que les paramtres correspondants est termin,
l'utilisateur clique soit sur le bouton Experience Clavier si il veut utiliser les touches
du clavier pour rpondre, soit sur le bouton Experience Joypad s'il veut utiliser le
Joypad pour rpondre.
14
5.3.2 Cration du .txt
Pour lancer cette exprience, la cration d'un fichier .txt a t indispensable.
Ce fichier se prsente sous la forme :
Pour ajouter une ligne ou supprimer une ligne dans le fichier texte, nous avons cr
deux fonctions :
affimage(mon_image, delai_pre,delai_post)
supprimer('test.txt',ligne)
15
Pour cela, deux nouveaux fichiers affimage.m et supprimer.m ont t mis en place.
function affimage(mon_image,delai_pre,delai_post)
duree_essai=5000
delai_pre2=char(delai_pre)
delaipre=str2num(delai_pre2)
delai_post2=char(delai_post)
delaipost=str2num(delai_post2)
%Calcul du temps d'affichage du stimulus
delai_image=duree_essai-(delaipost + delaipre)
%Affiche message d'erreur si le temps d'affichage de l'image est
infrieur 0
if delai_image<0
errordlg('Le delai_pre et/ou le delai_post sont trop
grands','Erreur de saisie');
else
%Ecrit les parametres dans le fichier texte
fid = fopen('test.txt','a');
fprintf (fid,' %s;',char(mon_image))
fprintf (fid,'%s;',char(delai_pre));
fprintf (fid,' %d;',delai_image);
fprintf (fid,' %s\n',char(delai_post));
%Ferme le fichier
fclose(fid);
end
function supprimer(file,ligne)
% Rcriture du fichier
fid=fopen(file,'a');
fprintf(fid,'%s\n',str{:});
fclose(fid);
16
5.4 Astuces avec le GUIDE
Nous avons pass beaucoup de temps sur des problmes lis au GUIDE. Voici
certaines de nos astuces pour y remdier:
Pour raliser un double clic sur une ligne de la listbox, nous avons utilis la fonction
strcmp et SelectionType
if strcmp(get(handles.figure1,'SelectionType'),'open')
Il faut tout rassembler en une seule instruction sinon cela ne fonctionne pas.
Par exemple, si nous dcomposons en mettant le get dans une variable et que
nous comparons la variable avec open, il ne se passe rien lors du double clic.
17
Pour changer le nom d'un objet, il suffit l'aide d'un double clic, de changer l'attribut tag.
5. Remplacer un caractre
mon_image = strrep(image,'\','/');
Pour insrer un logo, il suffit d'ajouter un objet Axes la o l'on souhaite intgrer le
logo. Ensuite il faut afficher l'image dedans et mettre sa proprit Visible off.
Par exemple :
iconeCNRS = imread('\images.jpeg');
axes(handles.axes8)
image(iconeCNRS)
axis off;
18
6 La Psychotoolbox
La Psychophysique Toolbox est un ensemble d'outils libres pour la recherche en
neurosciences. Elle apporte Matlab des fonctionnalits supplmentaires de contrle de
l'affichage au niveau physique, de gestion du temps, du son, des ports sries et du clavier.
6.1 Prsentation
Les fondateurs de cette toolbox open source sont le Professeur et directeur
Brainard du dpartement de Psychologie l'universit de Pennsylvanie, et le Professeur
Pelly de l'universit de New York.
Leur objectif est de pouvoir offrir des chercheurs en psychophysique un langage
hautement interprt (celui de Matlab) afin de raliser leur expriences. Ils revendiquent
une prise en main rapide et l'apprentissage du langage Matlab en quelques semaines. La
Psychotoolbox est livre avec plusieurs exemples illustrant toutes ses capacits grer
les images, la vido, le son et les priphriques ( clavier, souris, TTL scanner...) . La PTB
en est a sa version 3, et propose un forum et une encyclopdie en ligne (Wiki) pour sa
documentation.
Dans notre projet, nous avons surtout exploit les outils de gestion de l'affichage
pour respecter les fortes contraintes temps rel du projet. En effet les images (on parlera
de stimuli) ont lors de certain essais un temps d'apparition de l'ordre de la millisecondes.
La fonction screen fournit dans la PTB permet de grer ces contraintes.
19
Fig 6.2 - Gestion de la carte graphique
L'utilisation du double buffer permet de charger en mmoire une image dans un
buffer pendant que l' autre est utilis pour l'affichage. (cf schma)
Notre script utilise cette proprit , on charge les stimulus dans des buffers puis on envoie
l'ordre de changement au buffer avec la commande copy window (quivalent de flip).
Afin de garantir une synchronisation sur la trame d'affichage (frquence de l'cran,
ie 60hz) nous utiliserons la commande wait blanking
20
6.4 Notre Solution
Nous avons ralis deux scripts spars pour la gestion des expriences avec
rponse au clavier et avec rponse au joypad. Voici la syntaxe d'appel:
>> Pim_clavier('test.txt','SARNIC0000')
>> Pim_joypad('test.txt','BOBMAR6259')
Ces fonctions sont appeles par l'interface GUI pour dbuter l'exprience. Le
premier argument est le fichier '.txt' du plan d'exprience suivre (ordre et temps de
prsentation des images).Le deuxime argument reprsente le nom du fichier de
sauvegardes.
Ce code est une premire version fonctionnelle, non valid par le LNFP. Notre script
est spar en 3 parties:
Une partie d'initialisation qui lit le plan d'exprience (test.txt) et range les
paramtres dans une structure. Chaque entre contient l'ensemble des paramtre
d'un essais. En suite on initialises l'affichage en chargeant en mmoire les images:
buffer(i)=screen(window,'OpenOffscreenWindow', [0 0 0]);
screen(buffer(i), 'PutImage', stim(i).img);
La troisime tape sauvegarde les rsultats dans un fichier csv. Ce format Comma-
Separated values est un format informatique ouvert reprsentant des donnes
tabulaires sous forme de valeurs spares par des virgules . Ces fichiers sont
lisibles sous Excel.
21
6.5 L'affichage multi crans
22
7.1.2 Syntaxe respecter
Pour que ces dll soient exploitables par Matlab, elles doivent respecter la syntaxe
suivante:
#include "mex.h"
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{ /* le code en C */
/* appel aux diffrentes fonction C */
}
La mexFunction est le point d'entre utilise par Matlab pour accder la dll
avec nlhs le nombre d'argument on the left hand side et plhs le tableau de pointeurs vers
ces arguments de sortie; nrhs et prhs ont des fonctionnalits quivalentes ont pour les
arguments d'entre(right hand side).
Par exemple, si l'on appelle une fonction MEX avec la commande
[r,z] = toto(x);
Alors MATLAB appelle la mexFunction de toto.c avec les arguments suivants :
nlhs = 2
nrhs = 1
plhs = (pointer_at)-> *non assign*
(pointer_at)-> *non assign*
prhs = (pointer_at)-> x
La valeur des pointeurs "de gauche" sera assigne au cours de l'excution du code
de la mexFunction.
23
7.2 Pilotage d'un joypad en C
L1
L2
R1
R2
24
8 Stockage des informations
Sujet Essai
1-N 1-N
1-1 1-N
1-N 1-N
Consultation Est constitue Experience
Explications:
25
8.1.2 Modle relationnel
Sujet
_NSujet Nom Prnom Date Sexe Adresse Ville Code Tlphone Email
naissance Postal
Consultation
_NConsultation #NSujet Date Age Dure Dure Traitement tat du
maladie hospitalisation dossier
Experience
_NExperience Type
Constitution 1
#Experience #Consultation
Essai
_NEssai Nom_image Stockage Archivage CD Laboratoire Technicien Observations
Constitution 2
#Experience #Essai
26
8.2 Gnration des fichiers Excel
Afin de garder en mmoire les donnes rentres par l'utilisateur, on a cre un
fichier base.xls dont l'onglet tat Civil concerne l'tat civil du sujet et Consultation les
paramtres de la consultation.
Pour cela deux nouveaux fichiers ont t mis en place :
EcriceExcel qui permet de garder en mmoire l'tat civil
EcrireExcelConsultation permettant de mmoriser la consultation
Pour le bon fonctionnement du programme, il faut faire attention ce que le chemin
du fichier donn dans les fichiers .m correspondent bien l'endroit o se situe le fichier
Excel :
L'instruction a vrifi est :
File='C:\Documents and Settings\Franois\Bureau\Projet_celine
\Interface Projet15nov\base.xls';
Pour faire appel la fonction EcrireExcel, l'instruction est :
EcrireExcel(nom,prenom,datenaiss,Adresse,Ville,CodePostal,Tel,Emai
l)
Les paramtres de la fonction correspondent aux variables associes chacune
des edit boxes de l'interface patient.
Onglet Consultation
27
Afin de mmoriser le numro permettant d'identifier un sujet, on a utilis deux
instructions. Ces instructions permettent de garder les variables travers toutes les
interfaces que nous avons cres.
La premire permet de mmoriser la variable. Toutes ces variables commencent
par handles. La variable se trouvant dans l'interface patients est num_consultation. Le but
est de rutiliser cette variable dans la troisime interface.
handles.num_consultation =num_consultation ;
setappdata(0, 'numaleatoire',num_consultation );
9 Problmes rencontrs
28
10 Perspectives d'volution
Faciliter les codes : renommer les fonctions au nom pas assez clair pour les
utilisateurs.
29
11 Conclusion
30
12 Bibliographie
PsychoToolbox -Medical School of Harvard-
http://www.psychtoolbox.org
Cours de cration de fichiers mex executables sous matlab (Michel Bercovier - Olivier
Ricou )http://www.ricou.eu.org/matlab/cours3/index.html
31
13 Annexes
13.1.1 Patients
Patients.m
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @patients_OpeningFcn, ...
'gui_OutputFcn', @patients_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
32
iconeCNRS = imread('\images.jpeg');
axes(handles.axes2)
image(iconeCNRS)
axis off;
iconeUSTL= imread('\imagesustl.jpeg');
axes(handles.axes3)
image(iconeUSTL)
axis off;
iconeneuro= imread('\neuro.jpg');
axes(handles.axes4)
image(iconeneuro)
axis off;
% --- Outputs from this function are returned to the command line.
function varargout = patients_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
33
% Hints: get(hObject,'String') returns contents of nom as text
% str2double(get(hObject,'String')) returns contents of nom as a double
% --- Executes during object creation, after setting all properties.
function prenom_CreateFcn(hObject, eventdata, handles)
% hObject handle to prenom (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
34
% str2double(get(hObject,'String')) returns contents of numeroaleatoire
as a double
35
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function Adresse_Callback(hObject, eventdata, handles)
% hObject handle to Adresse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Adresse as text
% str2double(get(hObject,'String')) returns contents of Adresse as a
double
36
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
37
% hObject handle to Email (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Email as text
% str2double(get(hObject,'String')) returns contents of Email as a
double
38
Patients.fig
39
13.1.2 Consultation
Consultation.m
function varargout = Consultation(varargin)
% CONSULTATION M-file for Consultation.fig
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Consultation_OpeningFcn, ...
'gui_OutputFcn', @Consultation_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
40
iconeneuro= imread('\neuro.jpg');
axes(handles.axes6)
image(iconeneuro)
axis off;
% UIWAIT makes Consultation wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Consultation_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
41
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
42
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function traitement_Callback(hObject, eventdata, handles)
% hObject handle to traitement (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
43
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
44
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of observation2 as text
% str2double(get(hObject,'String')) returns contents of observation2 as
a double
Consultation.fig
45
46
13.1.3 Explorateur d'images
Proj.m
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
47
iconeUSTL= imread('\imagesustl.jpeg');
axes(handles.axes10)
image(iconeUSTL)
axis off;
iconeneuro= imread('\neuro.jpg');
axes(handles.axes9)
image(iconeneuro)
axis off;
% --- Outputs from this function are returned to the command line.
function varargout = proj_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
48
% Hint: listbox controls usually have a white background, change
% 'usewhitebg' to 0 to use default. See ISPC and COMPUTER.
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
contents=get(handles.listbox2,'String');
ligne=contents{get(hObject,'Value')};
axes(handles.axes3)
imshow(ligne);
axis off;
%Doucle click
if strcmp(get(handles.figure1,'SelectionType'),'open')
%Affcihage d'une boite de dialogue pour rentrer les parametres
prompt = {'Enter le delai_pr:','Enter le delai_post'};
dlg_title = 'Entrer les parametres d affichage';
num_lines= 1;
answer = inputdlg(prompt,dlg_title,num_lines);
%affichage des parametres dans les edit box correspondantes
set(handles.delai_pre,'String',answer(1));
delai_pre=get(handles.delai_pre,'String');
set(handles.delai_post,'String',answer(2));
delai_post=get(handles.delai_post,'String');
contents = get(handles.listbox2,'String');
%Recupere le numero de la ligne
ligne = get(handles.listbox2,'Value');
image=contents(ligne);
%Utilise la fonction strrep pour remplacer \ par / dans le fichier texte
mon_image = strrep(image,'\','/');
%Appel de la fonction pour inserer une ligne dans le fichier .txt
49
affimage(mon_image,delai_pre,delai_post)
end
ligne= get(handles.listbox2,'Value');
contents = get(handles.listbox2,'String');
contents(ligne)=[]
if ligne~=1
ligne=ligne-1;
end
set(handles.listbox2,'String',contents,'Value',ligne);
set(handles.listbox2,'Value',1);
supprimer('test.txt',ligne)
50
function delai_pre_Callback(hObject, eventdata, handles)
% hObject handle to listbox2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns listbox2 contents as cell
array
% contents{get(hObject,'Value')} returns selected item from listbox2
% --- Executes during object creation, after setting all properties.
function delai_post_CreateFcn(hObject, eventdata, handles)
% hObject handle to delai_post (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
51
num_aleatoire = getappdata(0, 'numaleatoire')
13.2.1 Pim_clavier
function stim = Pim(filename, subject)
%Prsentation d'images avec rponse du sujet au clavier
%Les paramtres de l'exprience sont dfinit dans le fichier filename (.txt) et
doit
%respecter la syntaxe :
%
% nom image ; delais prs stimuli ; dlais stimuli ; delais post stimuli
% (chaques lignes representes un essais)
%
% -> voir test.txt
52
%Il est possible d'enregistrer les rsultats dans un fichier texte.
%Son nom doit etre spcifi aprs le fichier filename .
%Le cas cheant pas les donnes ne seront pas sauvegardes
%Dbut du script:
clear('stim');
clear('buffer');
clear('timePerImage');
53
%mise en buffer d'une fenetre noire
buffer(length(stim)+2)=screen(window,'OpenOffscreenWindow', [0 0 0]);
GetChar;
[keyDown,oldTimeStamp,keyCode]=KbCheck % initialisation des variables
screen(window, 'WaitBlanking');
priority(2); % change la priorit de matlab , amliore les performances
for index=1:length(files)
%WaitBlanking attend que la trame arrive en bas d'ecran,
%cela permet la synchronisation des stimulis avec l'cran
screen(window, 'WaitBlanking');
%affichage de la mire
screen('CopyWindow',buffer(length(stim)+1),window);
%attente delais prs image
waitsecs(stim(index).delay_pre);
%temps de depart du stimulus
startAt = GetSecs;
%affichage de l'image par appel du buffer voulue
screen('CopyWindow', buffer( index ), window); % affiche la fenetre
prs calcules buffer(i)
%attente durant temps de presentation de l'image
waitsecs(stim(index).delay_stim);
%affichage d'un ecran noir
screen('CopyWindow',buffer(length(stim)+2),window);
%calcul du temps d'affichage du stimili
timePerImage(index) = GetSecs - startAt;
% attente durant delai post avec enregistrement de la rponse au clavier
54
[stim(index).pressedKey, stim(index).delay_reponse] =
waitForKey(stim(index).delay_post); %attend qu'une touche soit tape pendant le
temp delay_post
stim(index).correct = '0'+ strcmp((stim(index).pressedKey) ,'space');
%le dernier argument correspond a la touche a test
% fin d'un essai
55