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