Informatique Matlab
Transcription
Informatique Matlab
Informatique Matlab Travaux dirigés Feuille 1 : Programmation Orientée Objet 1. Création du squelette de la classe Une classe est un programme écrit dans un chier 'nom_de_la_classe.m' permettant de créer des objets contenant un ensemble de variables et de fonctions s'appliquant sur ses variables. On commence par dénir la structure de notre classe 'Images' qui permettra de maniupler des images 'proprement'. On indique ainsi quelles sont les variables et fonctions qui vont constituer notre classe. Il faudra par la suite écrire le contenu des fonctions (pour l'instant on ne met que leur nom). Écrire dans un chier 'Images.m' les lignes suivantes qui vont dénir la structure de la classe 'Images' : classdef Images < handle properties X=[] ; Y=[] ; C=[] ; cmap={'jet','hot','cool','hsv'} ; Icmap=1 ; ncolor=255 ; end methods function Load(h) end function Show(h) end function Decimate(h,n) end function ReColor(h,n) end function Rotate(h,phi) end function Live(h) end end end 2. %Définit le nom de la classe %Liste des variables %Matrice contenant la position 'x' de chaque point de l'image %Matrice contenant la position 'y' de chaque point de l'image %Matrice contenant l'image %Liste des colormap qu'on souhaite utiliser %Numéro de la colormap utilisé en ce moment %Nombre de couleurs qu'on souhaite afficher % Servira à charger l'image avec imread % Servira à afficher l'image % Pour décimer l'image (la pixeliser) % Pour changer le nb de couleur % Rotation de l'image % Pour manipuler l'image en live Comme se servir de la classe? Pour se servir de la classe, dans la console aller dans le répertoire ou vous avez sauvegardé le chier 'Images.m' puis taper : x=Images ; A l'aide des fonctions whos, properties, methods, lister les variables et fonctions contenues dans x. On peut également voir le contenu de x en tapant 'x.' puis tabulation dans la console. Pour appeler les fonctions de la classe taper par exemple : h.Load % Appelle la fonction load du fichier Images.m. Toutefois les fonctions ne contenant rien, pour l'instant elles ne servent rien. Il ne nous reste plus qu'à les écrire ! 3. Écriture de la fonction load permettant de lire l'image Dans le chier 'Images.m' nous allons maintenant compléter la fonction load. la fonction ressemblera à (à vous de compléter) : function Load(h) h.C = imread('Daemon.jpg') h.X = ... h.Y= ... ... end % Lit l'image et la stocke dans la variable C de la classe. % On définit h.X et h.Y de manière à pouvoir % afficher l'image avec pcolor(h.X,h.Y,h.C) À présent si vous tapez dans la console : x=Images ; x.Load ; imagesc(x.C) pcolor(h.X, h.Y, h.C) ; shading('interp') ; Vous devriez réussir à acher l'image. 4. % % % % Initialise l'image Charge l'image Affiche l'image idem Écriture de la fonction Show() permettant d'acher l'image On écrit à présent la fonction Show() toujours dans Images.m qui va permettre d'acher l'image comme on le souhaite. La fonction ressemblera donc à (les ... indiquent que vous devez compléter) : function Show(h) comm% Servira à acher l'image pcolor(...) ; % Affiche l'image ; shading('flat') ; cmap=[h.cmaph.Icmap,'(',num2str(h.ncolor),')'] colormap(...) ; title(...) ; end % % % % Affiche les couleurs cmap='jet(64)', si h.Icmap=1 et h.ncolor=64 choisi la bonne colormap Mettre un titre du type 'Daemon NBCOULEUR' Ainsi si vous tapez dans la console : x=Images ; x.Load ; x.Show L'image doit s'acher avec le bon titre. Si vous tapez : x.ncolor=2 ; x.Icmap=3 ; h.Show() L'image doit s'acher avec 2 couleurs et avec la 3ème colormap dénit dans h.cmap c'est à dire 'cool'. 5. Écriture de la fonction Décimate() Vous pouvez à présent écrire la fonction décimate : function Decimate(h,n) h.C=... ; h.X=... ; h.Y=... ; end % Ne garde qu'un point sur n de la matrice h.C Ainsi en tapant : x=Images ; x.Load ; x.Decimate(8) ; x.Show l'image va s'acher pixelisée. 6. Écriture de la fonction ReColor() Cette fonction a pour but de ne garder que 'n' couleurs : function ReColor(h,n) h.ncolor=... ; colormap(...) ; end Ainsi en tapant : x=Images ; x.Load ; x.ReColor(2) ; x.Show l'image va s'acher avec 2 couleurs. 7. Écriture de la fonction Rotate() Cette fonction va permettre de faire une rotation de l'image. S'inspirer du TD précédent. function Rotate(h,phi) ... end Tester que votre fonction marche correctement depuis la console : x=Images ; x.Load ; x.Rotate(h,45) ; x.Show doit acher l'image tournée de 45 degrés. 8. Fonction Live permettant de manipuler l'image en temps réel La fonction getkey permet de savoir sur quelle touche l'utilisateur appuie. Plus précisement cette fonction renvoit un chire indiquant sur quelle touche l'utilisateur a appuyé. Commencez par tester getkey depuis la console pour comprendre comment cela fonctionne. La fonction Live ressemblera à : function Live(h) quit=false while quit==false c=getkey ; if c==30 ; h.Decimate(2) h.Show ; end if isnan(c) quit==true end end Cette variable définit si on souhaite Tant qu'on ne souhaite pas quitter on Lit sur quelle touche l'utilisateur a Si on appuie sur la touche 30 (flèche quitter ou non le mode live reste dans la boucle appuyé du haut) si l'utilisateur a appuyer sur une touche du type ctrl, alt, tab On quitte le mode live Compléter la fonction pour pouvoir : (a) Tourner l'image à droite en appuyant sur la touche de votre choix. (b) Tourner l'image à gauche. (c) Changer le nombre de couleur. (d) Changer la colormap (e) Changer la décimation. (f) Relire l'image (g) Zoomer (h) Tout ce que vous voulez