You are on page 1of 55

Rapport de Projet :

Prsentation d'images
sous Matlab

Ralis par: Cline Labranche, Matthieu Saison

Tuteur de projet:
Mr Pierre Bonnet

Fvrier 2008
Table des matires

Table des matires


1 Remerciements..................................................................................................................4
2 Introduction........................................................................................................................5
3 Cahier des charges............................................................................................................6
3.1 Descriptif.....................................................................................................................6
3.2 Objectif........................................................................................................................6
3.3 Environnement de travail............................................................................................6
3.4 La manipulation raliser..........................................................................................6
4 Prsentation du GUI..........................................................................................................8
4.1 Prsentation des diffrents objets..............................................................................8
4.2 Les fonctions les plus utilises..................................................................................9
5 Interfaces graphiques......................................................................................................10
5.1 Interface 1 : Gestion du patient...............................................................................10
5.2 Interface 2 : Consultation.........................................................................................11
5.3 Interface 3 : Choix des images et cration du .txt....................................................12
5.3.1 Choix des images.............................................................................................12
5.3.2 Cration du .txt..................................................................................................15
5.4 Astuces avec le GUIDE............................................................................................17
6 La Psychtoolbox...............................................................................................................19
6.1 Prsentation..............................................................................................................19
6.2 La Gestion graphique avec Screen.dll.....................................................................19
6.3 La gestion du temps et des priphriques avec la PTB (getsecs et kbcheck)........20
6.4 Notre Solution ..........................................................................................................21
6.5 L'affichage multi crans............................................................................................22
6.5.1 Objectif ( supervision de l'exprience ).............................................................22
6.5.2 Mise en place (carte graphique)........................................................................22
7 Utilisation du joypad USB sous Matlab............................................................................23
7.1 Cration d'un fichier MEX excutable sous Matlab.................................................23
7.1.1 Dfinition d'un MEX-file.....................................................................................23
7.1.2 Syntaxe respecter..........................................................................................23
7.1.3 Compilation et linkage.......................................................................................23
7.1.4 Utilisation de la mex-file....................................................................................24
7.2 Pilotage d'un joypad en C.........................................................................................24
7.2.1 Descriptif du joypad...........................................................................................24
7.2.2 La librairie winmm de Microsoft.........................................................................24
7.2.3 Implmentation en language C.........................................................................24
8 Stockage des informations...............................................................................................26
8.1 Cration d'une base de donnes Sujet...................................................................26
8.1.1 Modle entit-association..................................................................................26
8.1.2 Modle relationnel ............................................................................................27
8.2 Gnration des fichiers Excel..................................................................................28
9 Problmes rencontrs......................................................................................................30
9.1 Prise en main du GUIDE.........................................................................................30
9.2 Problmes matriels.................................................................................................30

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.

Nous remercions galement Delphine PINS, chercheuse au CNRS, pour sa


collaboration.

4
2 Introduction

Le Laboratoire de Neurosciences Fonctionnelles et de Pathologies, laboratoire


associ au CNRS depuis janvier 2004 , est une association de trois spcialits mdicales
du systme nerveux (ophtalmologie, neurologie et psychiatrie chez l'adulte et chez
l'enfant). Cette association permet de regrouper des cliniciens et des chercheurs de
spcialisations et de formations pluridisciplinaires. Les activits de recherche du LNFP
sont centres sur l'tude exprimentale et thorique des mcanismes de traitement de
l'information visuelle ou spatiale, d'intgration multi-sensorielle, des processus
attentionnels et des fonctions excutives. Ces travaux s'appuient sur diverses
mthodologies des neurosciences cognitives : la neuropsychologie exprimentale,
l'imagerie crbrale d'activation fonctionnelle, l'lectrophysiologie, l'oculomotricit, la
psychophysique sensorielle et la modlisation.
Dans le cadre des ses recherche en neuropsychologie, le Dr Delphine Pins ralise
des expriences qui consistent prsenter des sries d'images des sujets sains et non
sains. Les sujets ont pour consigne d'interprter l'image selon un critre et de valider la
rponse par un botier rponse. L'ordre d'affichage, le temps de prsentation et le temps
de rponse font l'objet de contraintes importantes (temps rel) afin d'obtenir des donnes
exploitables. A travers ce projet le Dr Pins souhaite acqurir de nouveaux outils et de
l'autonomie dans ses expriences.
Dans un premier temps, nous nous sommes concentrs sur la conception d'
interfaces GUI (Graphics User Interfaces, Matlab) avec comme objectif la gestion des
patients. Grce des formulaires, nous renseignons les fiches patients et les dtails de la
consultation, puis un explorateur d'image assiste la configuration des expriences (choix
des images).
Ensuite, l'aide de la Psychtoolbox, nous avons travaill sur l'affichage des images
slectionnes auparavant en intgrant les contraintes de temps.
Enfin, nous avons pris l'initiative de substituer le botier rponse par un joypad USB
et de l'implanter sous Matlab a l'aide d'un fichier MEX (DLL).

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.

Les fonctionnalits envisages sont :

la saisie par l'oprateur des paramtres du patient, des paramtres


l'exprience et la dfinition des lments de l'exprience (choix des images,
des rponses et des temps de prsentation). Cette partie du travail est faite
en temps libre.

la suite des essais de stimulation sur le patient, pour lesquels le temps est un
paramtre critique. Chaque essai se dcompose en 3 phases :

la prsentation d'une ou plusieurs images


l'attente de la rponse du patient
l'enregistrement du temps de rponse du sujet

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

Dfinition d'une manipulation type en accord avec les chercheurs

Prise en main du GUIDE en vue de raliser des interfaces conviviaux pour


l'oprateur pour la partie "saisie paramtres patient"

Etude de la prise en compte des informations de retour du sujet.

Etude des techniques d'affichage sous Matlab en vue de la construction de la


partie "prsentation" de l'application.

Analyse des performances, en particulier temps rel

3.3 Environnement de travail


Logiciels : Matlab/Simulink 7 avec l'outil GUIDE

Matriels : Une ou plusieurs cartes graphiques ,


Un cran oprateur distinct de l'cran du patient
Une manette de jeu ou une bote bouton pour la rponse du sujet

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

Un essai se dcompose en plusieurs tapes :

Delai Stimulus Delai

1. Premirement, une croix s'affiche (pas forcement au milieu de l'cran) qui


correspond au centre de l'image qui va tre envoye ainsi qu'un son indiquant au
sujet le dbut de l'essai.

2. Ensuite, l'cran est noir pendant un dlai appel dlai_pr

3. Puis le stimulus (l'image) est affiche pendant une dure spcifie

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)

Chaque exprience est rfrence par un numro alatoire qui se compose de la


manire suivante :3 premires lettres du nom du sujet puis les 2 premires lettres du
prnom du sujet suivi de 2 chiffres alatoires.

Une base de donnes est cre et comporte plusieurs tables :


Sujet ayant pour attributs l'tat civil du patient
Consultation o se situe les paramtres de la consultation en cours
Essai comportant les dtails du stimulus choisi (image)

7
4 Prsentation du GUI

Le GUI (Graphical User Interface) permet de crer des interfaces o le crateur


choisi plusieurs types d'objets (boutons, edit box, listbox.....) appels handles.
Ensuite, il doit raliser le programmation pour obtenir l'interaction qu'il souhaite
obtenir entre ces diffrents objets.

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 :

4.1 Prsentation des diffrents objets

Dans nos interfaces, nous avons utilis principalement 3 objets graphiques

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).

Le code introduit dans cette fonction correspond l'vnement qui va se produire


lors de l'action de la souris ou du curseur sur l'objet.

Par exemple :

function Suivant_Callback(hObject, eventdata, handles)


run Consultation;

Le bouton s'appelle Suivant et l'action sur ce bouton lance le fichier Consultation.m

Ensuite, pour manipuler ces objets, il existe 2 fonctions importantes :

get qui permet de rcuprer les valeurs


set qui permet de mettre des valeurs

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

5.1 Interface 1 : Gestion du patient


Premirement, nous avons cre une interface qui permet d'enregistrer l'tat civil du
sujet qui va passer les tests.
Grce au logiciel Matlab et en particulier au GUIDE,nous avons ralis une
interface compose de diffrents types d'objets :

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 :

run Consultation; %Consultation est le nom de la deuxime


interface (Consultation.m)

5.2 Interface 2 : Consultation


Ensuite, nous avons labor une interface qui permet d'enregistrer les diffrents
paramtres concernant la consultation.

Les diffrents objets graphiques prsents dans cette interface sont:

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

5.3.1 Choix des images


La dernire interface consiste choisir les images pour une exprience (ensemble
d'essais).On va aussi choisir le delai_pre et le delai_post que l'on souhaite avoir pour
chacune des images.

Cette interface contient :


Une listbox dans laquelle se trouve les chemins des diffrentes images choisies
Un pushbutton Chercher une image
Un pushbutton Supprimer
Un pushbutton Prcdent qui permet de revenir en arrire
Un pushbutton Exprience clavier
Un pushbutton Exprience Joypad
Deux edit boxes

Marche suivre pour choisir les images :

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('*.*');

%Chargement de l'image et affichage


iref = imread(sprintf('%s',path,file));

%Affichage de l'aperu
axes(handles.axes3)
imshow(iref);

%Affichage du chemin dans la listbox

%On garde les lignes qu'il y a dj dans la listbox


ChaineCourante=get(handles.listbox2,'String');
%On prend le chemin de la nouvelle image
NouvelleValeur=sprintf('%s',path,file);
%On ajoute le chemin aprs la dernier ligne actuelle
ChaineCourante{end+1}=NouvelleValeur;
set(handles.listbox2,'String',ChaineCourante);

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

%Instruction permettant l'action sur le double clic


if strcmp(get(handles.figure1,'SelectionType'),'open')

%Affichage d'une boite de dialogue pour rentrer les paramtres


prompt = {'Enter le delai_pr:','Enter le delai_post'};
dlg_title = 'Entrer les paramtres d affichage';
num_lines= 1;

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

La dure de l'essai se fixe dans le fichier affimage.m :


duree_essai=5000

Par la suite, si les utilisateurs de la manipulation souhaitent modifier la dure d'un


essai, il suffira de changer cette ligne (les temps sont en ms:5000=5secondes)

3. Les paramtres s'affichent ensuite dans les edit box Delai pr et Delai post en
dessous de l'aperu de l'image.

4. Si l'utilisateur dsire supprimer une image de l'exprience, il peut le faire grce au


bouton Supprimer.

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 :

Chemin de l'image1;delai_pre1 ; delai_image1;delai_post1


Chemin de l'image2;delai_pre2 ; delai_image2;delai_post2

Par exemple si nous choisissons deux images avec l'interface :

Dans le fichier texte de dfinition, nous obtenons donc :

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.

affimage.m permet d'ajouter une ligne supplmentaire dans le fichier .txt :

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

supprimer.m permet de supprimer la ligne qui correspond au chemin de l'image


slectionne par l'utilisateur dans la listbox .

function supprimer(file,ligne)

% Sauvegarde du fichier avant modification


copyfile(file,strrep(file,'.txt','.bak'));

% Lecture complte du fichier


str=textread(file,'%s','delimiter','\n');

% Suppression de la ligne correspondante


str(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:

1. Ajouter une ligne dans la listbox

Pour ajouter une ligne la listbox :

%Recuperer les lignes deja existantes


ChaineCourante=get(handles.listbox2,'String');
%Recuperer la nouvelle ligne ajouter
NouvelleValeur=sprintf('%s',path,file);
%Ajouter la nouvelle valeur la suite
ChaineCourante{end+1}=NouvelleValeur;
%Reafficher le tout
set(handles.listbox2,'String',ChaineCourante);

2. Supprimer les lignes dans la listbox

Le problme, avec le GUIDE, est que lors de la suppression de la dernire ligne


dans une listbox, la listbox disparat l'affichage.

La solution est la suivante :

%Recupere la ligne selectionn par l'utilisateur


ligne= get(handles.listbox2,'Value');
%Recupere le chemin correspondant
contents = get(handles.listbox2,'String');
%Supression de la ligne
contents(ligne)=[]
%Astuce si il ne reste qu'une seule ligne
if ligne~=1
ligne=ligne-1;
end

3. Raliser un double-clic sur une ligne de la listbox

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.

4. Changer le nom d'un objet graphique

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

Pour obtenir le chemin correct de l'image, la modification du caractre '\' par le


caractre '/' a t ncessaire.

Ceci a t ralis l'aide de la fonction strrep

mon_image = strrep(image,'\','/');

6. Ajouter une icne dans l'interface

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.

6.2 La Gestion graphique avec Screen.dll


La fonction screen est la principale fonction utilis dans notre projet, elle permet
l'accs la mmoire rserve de la carte vido la VRAM. crite en langage C, elle utilise
la librairie OpenGL pour piloter l'affichage.

Matlab associ a la Psychtoolbox (PTB) permet l'accs la mmoire et rend


accessible les commandes de dclenchement d'affichage (mise jour des buffers).
Voici un exemple d'appel de la fonction screen pour ouvrir un cran vide:
>> screen(0, 'OpenWindow', [0 0 0]);
Cette ligne cre une fentre vide sur l'cran 0 ( cran Windows par dfaut) de couleur
noire [R G B].

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

6.3 La gestion du temps et des priphriques avec la PTB (getsecs et


kbcheck)
La fonction Getsecs offre une gestion du temps plus fine que celle de Matlab (car
crite en C). Elle gre le temps avec les fonctionnalits de la bibliothque time.h. L'appel
de cette fonction retourne un nombre de secondes.
Toutes les mesures de temps sont effectues l'aide de cette commande. Nous
mesurons les dlais d'affichage de la mire, le dlai de prsentation du stimulus et le dlai
de rponse du sujet. Les temps de rponses sont respects +/- 0,3 ms
La fonction Kbcheck relve les touches tapes ainsi que la date. Cette fonction
nous sert grer les rponses au clavier lors des expriences.

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);

Cette phase de prs traitement vite un ralentissement de l'exprience, les images


sont stockes en mmoire vido et seront appeles grce un pointeur ( buffer(i) ).
La deuxime partie gre le droulement de l'exprience et l'enregistrement des
temps de prsentation et rponse. Le principe d'un essai est le le suivant :
1. on affiche la mire pendant le temps delai_pr
2. on affiche le stimulus pendant le temps donn
3. on affiche un cran vide pendant le temps allou la rponse du sujet.
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);
%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

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

6.5.1 Objectif ( supervision de l'exprience )


Afin de suivre les expriences, les chercheurs demandent un cran de contrle
pour le suivi des rponses du sujet et des diffrentes donnes lies l'exprience. Ce
mode a un grand intrt, il permet de voir si le patient suit bien les consignes de
l'exprience, ce qui le cas contraire faussera les rsultats. Les chercheurs n'auront pas
attendre la fin de la manipulation pour se rendre compte d'une erreur.

6.5.2 Mise en place (carte graphique)


La Psychotoolbox gre aisment cette configuration sous un environnement Mac.
La mthode d'affichage multi-cran sous Windows n'est pas fonctionnelle. Cependant il
existe des solutions, sur le site de Jenny Read binocular vision research (voir
bibliographie); nous avons un exemple complet de la configuration adopter pour utiliser
deux crans avec la PTB.

La PTB, d'aprs sa documentation, dtecte les diffrents crans de Windows, ce


qui n'est pas le cas en ralit. La fonction screen ne dtecte qu'un seul cran. La solution
propose sur se site consiste fusionner deux sorties vidos pour ne faire qu'un seul
cran de trs grande largeur (2560*1024). L'ide se rapproche de la mthode classique
d'extension de bureau (spanned desk) ,qui elle, est compose de deux crans Windows.

7 Utilisation du joypad USB sous Matlab


Matlab ne gre pas nativement les priphriques USB du type HID (Human
InterfaceDevice). Afin d'exploiter le joypad, nous avons utilis la librairie Windows
winmm.lib dans un programme en c pour ensuite le convertir en une mex-fonction
compatible Matlab.

7.1 Cration d'un fichier MEX excutable sous Matlab

7.1.1 Dfinition d'un MEX-file


MEX signifie MATLAB Excutable. Les fonctions mex de Matlab permettent
l'utilisation des bibliothques de fonctions crites en C ou en Fortran (et C++ si un
compilateur C++ est install et compatible avec Matlab.). Ces bibliothques sont en ralit
de simples DLL.
Contrairement aux dll classiques, une mexFunction ne comprend qu'une seule
fonction de nom gnrique. Lors de l'appel d'une mexFunction, Matlab recherche le fichier
de mme nom que la fonction appele, avec l'extension .mex en premier rang, puis avec
l'extension .m si la fonction compile n'existe pas

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.

7.1.3 Compilation et linkage


Une fois le code source crit, compiler le code sous Matlab:
Se placer dans le rpertoire de travail ou le fichier compiler se trouve.
Ensuite Lancer l'ordre de cration du fichier mex:
mex nomdufichier.c librairies_associes.lib
par exemple : >> mex joypad.c winmm.lib
Matlab cr ensuite la dll du mme nom.

7.1.4 Utilisation de la mex-file


Pour que Matlab reconnaisse la dll il faut inclure le rpertoire o elle se trouve dans
le Path: file/setpath/-> addfolder
Ou encore placer la dll dans le rpertoire de travail.
Pour excuter le code, il suffit d'appeler la dll par son nom suivi des arguments
qu'elle ncessite. Le code qui s'excutera sera celui crit dans la fonction mexFunction.
Dans notre cas entrer : >> joypad

23
7.2 Pilotage d'un joypad en C

7.2.1 Descriptif du joypad


Les rponses des sujets lors des expriences se font par un boiter 4 boutons USB.
Cet outil a t dvelopp en interne et n'a pas pu nous tre prt pour l'intgration sous
Matlab.
A notre initiative, nous avons propos lors de l'tablissement du cahier des charges
de remplacer le botier 4 boutons USB (coteux a raliser) par un joypad USB largement
distribu. Celui-ci est de type HID (Human Interface Device) ce qui signifie une
reconnaissance automatique par Windows.
Nous exploitons les 4 boutons situes sur le devant de la manette.

L1
L2
R1
R2

La frquence de rafrachissement du joystick est d'environ 8kHz, ce qui autorise


une prcision des temps de rponses meilleure que la milliseconde.
Remarque : les boutons appels R1 et R2 ( R pour Right) correspondent aux boutons
numrots respectivement 6 et 8. De mme pour les boutons L1 et L2 (L pour Left)
correspondant aux numros 5 et 7.

7.2.2 La librairie winmm de Microsoft


Le fichier Winmm.lib est une bibliothque 32 bits qui prend en charge des services
multimdia. Elle permet la gestion de la vido, du son et dans notre cas l'utilisation d'un
joypad HID.

7.2.3 Implmentation en language C


Grce exemple d'utilisation de joystick usb en langage C++ sur le forum Codes
Sources C/C++), nous avons adapt le code suivant pour rcuprer les valeurs du
joystick.
Ici un exemple de rcupration de la touche R1 .
#define JS_R1 8
JOYINFO _joy_info;
memset(Tab_etat_joy, 0, 14); /*initialise 14 buffer a la valeur 0*/
/*joygetpos rcupre l'etat du joypad*/
if (joyGetPos(JOYSTICKID1, &_joy_info) == JOYERR_NOERROR)
{
if (_joy_info.wButtons & 0x20)
tab[JS_R1] = 1; /*la valeur du bit 0x20 correspond l'tat du
bouton R1 */
}

24
8 Stockage des informations

8.1 Cration d'une base de donnes Sujet


Afin de mmoriser les diffrentes expriences ralises par les sujets, une base de
donnes a t mise en place.

8.1.1 Modle entit-association

Sujet Essai

1-N 1-N

Passe Est compose

1-1 1-N

1-N 1-N
Consultation Est constitue Experience

Explications:

Le sujet peut passer une ou plusieurs consultations.


Une consultation est donne un et un seul sujet la fois.
Une consultation est constitue d'une ou plusieurs expriences.
Une exprience peut servir pour une ou plusieurs consultations.
Une exprience est compose d'un ou plusieurs essais.
Un essai peut compos une ou plusieurs expriences.

A l'aide de ce modle, un modle relationnel en a t dduit.

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

Mdecin Pressent Observations Pathologie 1 Pathologie 2 Pathologie 3


demandeur

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.

Pour faire appel la fonction EcrireExcelConsultation, l'instruction est :


EcrireExcelConsul(date,dureemaladie,dureehospitalisation,traitemen
t,medecin,observations,observation2)
Les paramtres de la fonction correspondent aux variables associes chacune
des edit boxes de l'interface Consultation.
Exemple du fichier Excel aprs l'utilisation des interfaces :

Onglet tat Civil :

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 );

La seconde est la rcupration de cette valeur dans le fichier .m de l'explorateur d'images.


num_aleatoire = getappdata(0, 'numaleatoire')

9 Problmes rencontrs

9.1 Prise en main du GUIDE


L'outil GUIDE du logiciel Matlab n'est pas vident comprendre et mettre en
oeuvre. Certains facteurs, comme le manque de documentation, l'incompatibilit de script
(pourtant fournis par Matlab), ont ralenti l'avancement de notre projet. Nanmoins, en
accentuant nos recherches sur des forums,, nous avons pu rgler certains de nos
problmes.

9.2 Problmes matriels

Les chercheurs souhaitent pouvoir superviser l'exprience grce un double


affichage (l'cran patient et moniteur de suivit d'exprience)
Pour cela, nous avons achet deux cartes graphiques. Aprs avoir tent de mettre
les deux cartes sur le mme ordinateur, l'essai ne s'avre pas concluant. En effet,
l'ordinateur n'accepte pas le fait d'avoir deux cartes graphiques en mme temps
( affichage d'un cran bleu)

9.3 l'Absence de toolbox


La toolbox data base regroupe un ensemble d'outils d'accs aux bases de donnes,
cette toolbox est ncessaire pour l'enregistrement des rsultats . Cependant, cette toolbox
n'est pas comprise dans la suite Matlab que nous possdons.

28
10 Perspectives d'volution

Certaines amliorations peuvent tre apportes notre projet :

La gestion, l'aide des cartes graphiques,de plusieurs crans

Amlioration de l'interface de la Gestion du patient :

Cration d'un fichier texte pour chaque nouveau sujet


Amliorations de l'interface qui permet le choix des images :

Un outil permettant de changer l'ordre des images ( l'aide de flches)

A chaque clic sur le chemin de l'image, si l'utilisateur a dj rentr le delai_pre et le


delai_post , l'affichage des paramtres correspondants.

L'amlioration de la mmorisation des sujets et des consultation en intgrant la


liaison entre les deux et la cration d'une feuille consacre la configuration d'un
essai

Grer les erreurs pour amliorer la robustesse et la qualit du logiciel.

Faciliter les codes : renommer les fonctions au nom pas assez clair pour les
utilisateurs.

29
11 Conclusion

Notre travail a consist en la dcouverte de nouvelles mthodes de gestion


d'exprience du LNFP et leurs mise en place. Nous avons tudier les outils possibles et
utilisable (toolboxes matlab) pour faciliter et amliorer la gestion des expriences de
prsentation d'images.
L'interface graphique de Matlab (GUI) a permis la cration d'un assistant de
configuration d'exprience. La Psychotoolbox fournit des moyens d'affichage performants
et les rponses des sujets sont rcupres par une Interface Homme-Machine tel que le
clavier (PTB) ou la manette (par notre driver).
Afin de grer les flots d'informations lis aux expriences de recherche, nous avons
modlis et prpar l'implantation d'une base de donnes. Cependant, les fonctions
d'accs aux bases de donnes Access via un lien ODBC sous Matlab sont payantes
(toolbox Data Base). Plusieurs alternatives sont possibles notamment celle que nous
avons choisi :la gestion des informations par un fichier Excel. L'avantage de ce systme
est la lisibilit et l'accessibilit des rsultats par des non-informaticiens (absence de
requte SQL).
La collaboration avec le Laboratoire NeuroSciences fut enrichissante travers la
rdaction du cahier des charges avec des chercheurs d'un autre domaine.
A ce jour, nous n'avons pu soumettre notre prototype au Dr PINS et dfinir
ensemble les volutions apporter.

30
12 Bibliographie
PsychoToolbox -Medical School of Harvard-
http://www.psychtoolbox.org

Projet 2005 2006 : Perception 3D

Cours de Mr Bonnet sur l'affichage des images sous Matlab.

Site du Laboratoire de Neurosciences Fonctionnelles et Pathologies


http://lnfp.dr18.cnrs.fr

Forum des dveloppeurs plus particulirement le forum consacr au GUIDE


http://www.developpez.net/forums

Google code search

Codes source c/c++

Matlab Product support


http://www.mathworks.com/support/tech-notes/1600/1605.html#linking_multiple

Cours de cration de fichiers mex executables sous matlab (Michel Bercovier - Olivier
Ricou )http://www.ricou.eu.org/matlab/cours3/index.html

Alan Robinson page


http://csclab.ucsd.edu/~alan/vision/matlab_code/

31
13 Annexes

13.1 Programmes lis au GUI

13.1.1 Patients
Patients.m

function varargout = patients(varargin)


% PATIENTS M-file for patients.fig
% Begin initialization code - DO NOT EDIT

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

% End initialization code - DO NOT EDIT

% --- Executes just before patients is made visible.


function patients_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to patients (see VARARGIN)

% Choose default command line output for patients


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

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;

% UIWAIT makes patients wait for user response (see UIRESUME)


% uiwait(handles.fig1);

% --- 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)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes during object creation, after setting all properties.


function nom_CreateFcn(hObject, eventdata, handles)
% hObject handle to nom (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function nom_Callback(hObject, eventdata, handles)


% hObject handle to nom (see GCBO)
% 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

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function prenom_Callback(hObject, eventdata, handles)


% hObject handle to prenom (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 prenom as text


% str2double(get(hObject,'String')) returns contents of prenom as a
double

% --- Executes during object creation, after setting all properties.


function datenaiss_CreateFcn(hObject, eventdata, handles)
% hObject handle to numeroaleatoire (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function datenaiss_Callback(hObject, eventdata, handles)


% hObject handle to numeroaleatoire (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 numeroaleatoire as text

34
% str2double(get(hObject,'String')) returns contents of numeroaleatoire
as a double

% --- Executes during object creation, after setting all properties.


% --- Executes on button press in suivant.
function suivant_Callback(hObject, eventdata, handles)
% hObject handle to suivant (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
nom = get(handles.nom,'String');%pas oublier de modifier le parametre tag !!!
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');
if isempty(nom)
errordlg('Veuillez entrer un Nom','Erreur de saisie');
else
if isempty(prenom)
errordlg('Veuillez entrer un Prenom','Erreur de saisie');
else
nom_raccourci=substring(nom,0,2);
prenom_raccourci=substring(prenom,0,2);
alea=round(rand(1)*10000);
num=round(rand(1)*10000);
num_consultation=strcat(nom_raccourci,prenom_raccourci,num2str(alea));
handles.num_consultation =num_consultation ;
handles.num =num ;
setappdata(0, 'num',num );
setappdata(0, 'numaleatoire',num_consultation );
EcrireExcel(num,nom,prenom,datenaiss,Adresse,Ville,CodePostal,Tel,Email)
run Consultation;
end
end

% --- Executes during object creation, after setting all properties.


function Adresse_CreateFcn(hObject, eventdata, handles)
% hObject handle to Adresse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.

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

% --- Executes during object creation, after setting all properties.


function Ville_CreateFcn(hObject, eventdata, handles)
% hObject handle to Ville (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Ville_Callback(hObject, eventdata, handles)


% hObject handle to Ville (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 Ville as text
% str2double(get(hObject,'String')) returns contents of Ville as a
double

% --- Executes during object creation, after setting all properties.


function CodePostal_CreateFcn(hObject, eventdata, handles)
% hObject handle to CodePostal (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc

36
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function CodePostal_Callback(hObject, eventdata, handles)


% hObject handle to CodePostal (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 CodePostal as text
% str2double(get(hObject,'String')) returns contents of CodePostal as a
double

% --- Executes during object creation, after setting all properties.


function Tel_CreateFcn(hObject, eventdata, handles)
% hObject handle to Tel (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function Tel_Callback(hObject, eventdata, handles)
% hObject handle to Tel (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 Tel as text


% str2double(get(hObject,'String')) returns contents of Tel as a double
% --- Executes during object creation, after setting all properties.
function Email_CreateFcn(hObject, eventdata, handles)
% hObject handle to Email (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function Email_Callback(hObject, eventdata, handles)

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

function numero_Callback(hObject, eventdata, handles)


% hObject handle to numero (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 numero as text


% str2double(get(hObject,'String')) returns contents of numero as a
double

% --- Executes during object creation, after setting all properties.


function numero_CreateFcn(hObject, eventdata, handles)
% hObject handle to numero (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

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

% --- Executes just before Consultation is made visible.


function Consultation_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Consultation (see VARARGIN)
% Choose default command line output for Consultation
handles.output = hObject;

% Update handles structure


guidata(hObject, handles);
iconeCNRS = imread('\images.jpeg');
axes(handles.axes5)
image(iconeCNRS)
axis off;
iconeUSTL= imread('\imagesustl.jpeg');
axes(handles.axes4)
image(iconeUSTL)
axis off;

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)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes during object creation, after setting all properties.


function date_CreateFcn(hObject, eventdata, handles)
% hObject handle to date (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function date_Callback(hObject, eventdata, handles)


% hObject handle to date (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 date as text
% str2double(get(hObject,'String')) returns contents of date as a double

% --- Executes during object creation, after setting all properties.


function dureemaladie_CreateFcn(hObject, eventdata, handles)
% hObject handle to dureemaladie (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.

41
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function dureemaladie_Callback(hObject, eventdata, handles)


% hObject handle to dureemaladie (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 dureemaladie as text


% str2double(get(hObject,'String')) returns contents of dureemaladie as
a double

% --- Executes during object creation, after setting all properties.


function dureehospitalisation_CreateFcn(hObject, eventdata, handles)
% hObject handle to dureehospitalisation (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function dureehospitalisation_Callback(hObject, eventdata, handles)


% hObject handle to dureehospitalisation (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 dureehospitalisation as text


% str2double(get(hObject,'String')) returns contents of
dureehospitalisation as a double

% --- Executes during object creation, after setting all properties.


function traitement_CreateFcn(hObject, eventdata, handles)
% hObject handle to traitement (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.

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)

% Hints: get(hObject,'String') returns contents of traitement as text


% str2double(get(hObject,'String')) returns contents of traitement as a
double

% --- Executes during object creation, after setting all properties.


function medecin_CreateFcn(hObject, eventdata, handles)
% hObject handle to medecin (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function medecin_Callback(hObject, eventdata, handles)


% hObject handle to medecin (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 medecin as text


% str2double(get(hObject,'String')) returns contents of medecin as a
double

% --- Executes during object creation, after setting all properties.


function observations_CreateFcn(hObject, eventdata, handles)
% hObject handle to observations (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.

43
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function observations_Callback(hObject, eventdata, handles)


% hObject handle to observations (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 observations as text


% str2double(get(hObject,'String')) returns contents of observations as
a double

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
date = get(handles.date,'String');
dureemaladie= get(handles.dureemaladie,'String');
dureehospitalisation= get(handles.dureehospitalisation,'String');
traitement = get(handles.traitement,'String');
medecin = get(handles.medecin ,'String');
observations= get(handles.observations,'String');
observation2= get(handles.observation2,'String');
num=getappdata(0, 'num')
num_consultation = getappdata(0, 'numaleatoire')
EcrireExcelConsul(num_consultation,date,dureemaladie,dureehospitalisation,trait
ement,medecin,observations,observation2,num)
run proj

% --- Executes on button press in precedent.


function precedent_Callback(hObject, eventdata, handles)
% hObject handle to precedent (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
run patients

function observation2_Callback(hObject, eventdata, handles)


% hObject handle to observation2 (see GCBO)

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

% --- Executes during object creation, after setting all properties.


function observation2_CreateFcn(hObject, eventdata, handles)
% hObject handle to observation2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

Consultation.fig

45
46
13.1.3 Explorateur d'images

Proj.m

function varargout = proj(varargin)


% PROJ M-file for proj.fig
% Begin initialization code - DO NOT EDIT
clc;
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @proj_OpeningFcn, ...
'gui_OutputFcn', @proj_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

% --- Executes just before proj is made visible.


function proj_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to proj (see VARARGIN)
% Choose default command line output for proj
handles.output = hObject;

% Update handles structure


guidata(hObject, handles);
iconeCNRS = imread('\images.jpeg');
axes(handles.axes8)
image(iconeCNRS)
axis off;

47
iconeUSTL= imread('\imagesustl.jpeg');
axes(handles.axes10)
image(iconeUSTL)
axis off;
iconeneuro= imread('\neuro.jpg');
axes(handles.axes9)
image(iconeneuro)
axis off;

% UIWAIT makes proj wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% --- 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)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in chercher.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to chercher (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Recupration du chemin de l'image
[file,path] = uigetfile('*.*');

%Chargement de l'image et affichage


iref = imread(sprintf('%s',path,file));
axes(handles.axes3)
imshow(iref);
axis off;
%Affichage dans la listbox
ChaineCourante=get(handles.listbox2,'String');
NouvelleValeur=sprintf('%s',path,file);
ChaineCourante{end+1}=NouvelleValeur;
set(handles.listbox2,'String',ChaineCourante);

function listbox2_CreateFcn(hObject, eventdata, handles)


% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

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

% --- Executes on selection change in listbox2.


function listbox2_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

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

function supprimer_Callback(hObject, eventdata, handles)


% hObject handle to chercher (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

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)

% --- Executes during object creation, after setting all properties.


function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

% --- Executes during object creation, after setting all properties.


function delai_pre_CreateFcn(hObject, eventdata, handles)
% hObject handle to delai_pre (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

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

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function delai_post_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 on button press in precedent.
function precedent_Callback(hObject, eventdata, handles)
% hObject handle to precedent (see GCBO)
% % eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
run Consultation

% --- Executes on button press in Experience_Joypad.


function Experience_Joypad_Callback(hObject, eventdata, handles)
% hObject handle to Experience_Joypad (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Recupere une variable de l'interface patients
%handles=guidata(handles.figurepatient);
%Numeroaleatoire=handles.num

51
num_aleatoire = getappdata(0, 'numaleatoire')

% --- Executes on button press in Experience_clavier.


function Experience_clavier_Callback(hObject, eventdata, handles)
% hObject handle to Experience_clavier (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

num_aleatoire = getappdata(0, 'numaleatoire')


Proj.fig

13.2 Programmes li la Psychtoolbox

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

% test sur: matlab 6.5, PTB, WinXP

%Dbut du script:

clear('stim');
clear('buffer');
clear('timePerImage');

% Lecture des images a afficher a partir du fichier de parametres


[files, delay_pre, delay_stim, delay_post]= textread(filename, '%s %u %u
%u','delimiter', ';' ); % Le sparateur de champ utilis est ;

for index = 1:length(files) % cration d'une structure / tableau pour stocker


les parametres de chaques essais
stim(index).name = files{index}; % nom de l'image
stim(index).img = imread(files{index}); % chargement de l'image
stim(index).delay_pre = delay_pre(index)/1000; % convert delay_pre to second
stim(index).delay_stim = delay_stim(index)/1000;
stim(index).delay_post = delay_post(index)/1000;
end

%Ici , Il est possible de changer la resolution d'afichage pour amliorer


%les performances de la carte d'affichage
% !reschange -width=800 -height=600 -depth=32 %appel l'executable window
reschange

screen('closeall'); % ferme les fenetres ouverte


[window, screenRect] = screen(0, 'OpenWindow', [0 0 0],[],32); % cree une
fenetre plein ecran

HideCursor; % cache la souris

screen(window, 'DrawText','Chargement des images ...', 100,100,127); %affichage


du text

%mise en buffer de la mire


M=imread('mire.jpg');
buffer(length(stim)+1)=screen(window,'OpenOffscreenWindow', [0 0 0]); %le
buffer est une fonction gerer pas la dll buffer
screen(buffer(length(stim)+1), 'PutImage', M); % elle
permet de pointer sur une image charger en memoire
% On
rserve ici les deux premiere cases pour les ecrans de mire et vide

53
%mise en buffer d'une fenetre noire
buffer(length(stim)+2)=screen(window,'OpenOffscreenWindow', [0 0 0]);

for i=1:length(stim) % chargement en mmoire video des images


% Le chargement des images doit se faire aprs l'appel de Openwindow
buffer(i)=screen(window,'OpenOffscreenWindow', [0 0 0]);
screen(buffer(i), 'PutImage', stim(i).img);
stim(i).img = [];
% on libre la l'image charger sous matlab, car elle maintenant stock
% en VRAM (mmoire video)
% le buffer i contient un pointer/handle vers l'image en memoire video
end

screen(window, 'DrawText','Images charges appuyer sur une touche pour


dbuter l experience', 200,300,127);

GetChar;
[keyDown,oldTimeStamp,keyCode]=KbCheck % initialisation des variables
screen(window, 'WaitBlanking');
priority(2); % change la priorit de matlab , amliore les performances

%_____________________LANCEMENT DES ESSAIS______________________

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

%possibilit d'agir sur les rsultat:


%if (char(touche)=='q'), break; % quit if user presses 'q'
%end
%
timePerKeypress(index) = GetSecs - startAt;
end

%________FIN DES ESSAIS, SAUVEGARDE DES RESULTATS____________

priority(0); % retour a une priorit normale


screen('closeall'); % nettoyage des fenetres et de la memoire

%retour a la resolution d'origine si besoin


%!reschange -width=1280 -height=1024 -depth=32

if nargin > 1 % si la fonction est appell avec deux argument , alor on


enregistre les resultat dans le fivhier csv au nom du deuxieme argument
fid = fopen(sprintf('resultats.%s.csv', subject), 'w');
fprintf(fid, 'nom_image, delay_pre, delay_post, touche press, correct,
delais de reponse\n');
for index=1:length(files)
fprintf(fid, '%s, %u,%u , %s, %s ,%s\r\n', ...
char(stim(index).name),char( stim(index).delay_pre), ...
char(stim(index).delay_post), char(stim(index).pressedKey),
stim(index).correct,stim(index).delay_reponse);
end
fclose(fid);
end
timePerImage
timePerKeypress

55

You might also like