ENISE 5ième Année E.FAVIER |
Aide mémoire Matlab
1. MATLAB® ..4
1.1. L'ENVIRONNEMENT DE DEVELOPPEMENT: .. 4
1.2. LA LIBRAIRIE DES FONCTIONS MATHEMATIQUES: . 4
1.3. LE LANGAGEMATLAB® 4
1.4. L'ENVIRONNEMENT GRAPHIQUE DE DEVELOPPEMENT: .. 5
1.5. L'INTERFACE DE DEVELOPPEMENTAPPLICATIONPROGRAMINTERFACE(API) .. 5
1.6. LES BOITES A OUTILS(TOOLBOX) .. 5
2. LE BUREAU DE MATLAB® ..6
3. LE LANGAGE DE MATLAB® 8
3.1. COMMENT PROGRAMMER.. 8
3.2. LE LANGAGEMATLAB® .. 8
4. LES OPERATIONS DE BASES DE MATLAB® .17
4.1. ENVIRONNEMENT DE DEVELOPPEMENT.. 17
4.2. FONCTIONS MATHEMATIQUES.. 18
4.3. MANIPULATION DES DONNEES.. 19
4.4. TRACEE GRAPHIQUE ET VISUALISATION3D . 20
5. LA TOOLBOX TRAITEMENT D'IMAGES DE MATLAB® ..21
5.1. OUVERTURE,SAUVEGARDE ET CONVERSIONS D'IMAGES.. 21
5.2. OPERATIONS ARITHMETIQUES SUR LES IMAGES21
5.3. VALEURS DES PIXELS ETHISTOGRAMME21
5.4. SEUILLAGE DES D'IMAGES21
5.5. CONVOLUTION NUMERIQUE DES IMAGES22
5.6. OUTIL ISSU DE LA MORPHOLOGIE MATHEMATIQUE. 22
5.7. ESPACE DE COULEURS22
6. EXEMPLES ..23
6.1. TRACE DE FONCTIONS AVEC LA FONCTION PLOT.. 23
6.2. TRACE DE FONCTIONS EN COORDONNEES POLAIRES.. 23
6.3. COURBE3D 23
6.4. CYLINDRES23
6.5. VISUALISATION DE SURFACES24
6.6. LECTURE ET AFFICHAGE D'IMAGES24
6.7. CONVERSIONS D'IMAGES.. 24
6.8. OPERATIONS ARITHMETIQUES SUR LES IMAGES24
6.9. HISTOGRAMME DES IMAGES.. 25
6.10. ACCES AU PIXELS,VALEURS DES PIXELS.. 25
6.11. SEUILLAGE DES IMAGES.. 25
6.12. FILTRAGE PAR CONVOLUTION NUMERIQUE DES IMAGES26
6.13. FILTRE MEDIAN26
6.14. MORPHOLOGIE MATHEMATIQUE.. 26
MATLAB® signifie Matrix Laboratory.
La structure de données principale utilisée par Matlab est la matrice mono-dimensionnel ou multidimensionnelle.
MATLAB® constitue un excellent outil de prototypage et de test dans de très nombreuses activités scientifiques basées autour du traitement du signal ou des données.
MATLAB® intègre un langage de haut niveau dédié au calcul scientifique et technique. Ce langage permet le calcul, la visualisation, et la programmation dans un environnement facile à utiliser.
Les problèmes et les solutions sont exprimés en notation mathématique familière.
MATLAB® s'organise autour de 6 grands pôles :
1.1. L'environnement de développement :
C'est un ensemble d'outils et d' équipements qui permettent d'utiliser des fonctions et les fichiers de MATLAB. Plusieurs de ces outils possèdent une interface graphique. Cet environnement de développement comprend plusieurs fenêtre :
le bureau de travail de MATLAB : "Desktop"la fenêtre de commande : "Command Window"
La fenêtre Historique : "Command History" permettant d'avoir accès à toutes les dernières actions réalisés
L'espace de travail : "Workspace" contenant toutes les données contenues en mémoire et pouvant être si leur taille n'est pas trop grande être consultées directement
L'aide de Matlab : très élaborée
1.2. La librairie des fonctions mathématiques :
C'est une vaste collection d'outils informatiques s'étendant des fonctions élémentaires comme la somme, la multiplication, les fonctions trigonométriques, l'arithmétique complexe, à des fonctions d'algèbre linéaire ( matrice inverse, valeurs propres …), les fonctions de bessel, la transformation de Fourier ….
C'est un langage de haut niveau utilisant la structure de données matrice comme base et possédant :
Les structures de contrôle de tous les langages de haut niveau
La possibilités d'écrire des fonctions
Les entrées sorties habituelles
La programmation Orientée Objet est également possible.
Ce langage permet aussi bien de développer des petites applications de façon très rapide que de complexes programmes d'application.
1.4. L'environnement graphique de développement :
C'est le système graphique de MATLAB.
Il inclut des commandes à niveau élevé pour la visualisation de données, le traitement d'image, l'animation, et les graphiques bidimensionnels et tridimensionnels de présentation.
Il inclut également des commandes de bas niveau qui permettent d'adapter entièrement l'aspect des graphiques et autorisent la création d' interfaces utilisateur graphiques complètes pour les applications de MATLAB.
C'est une bibliothèque qui permet d'écrire les programmes en Langage C et Fortran qui communiquent avec MATLAB. Le logiciel Matlab intègre un compilateur C ( lcc ) mais permet à l'utilisateur d'utiliser le compilateur C de son choix. Il n'y a pas de compilateur ForTran intégré.
Il s'agit d'ensemble de fonctions organisées autour de différents thèmes :
Logique floue
Statistique
Réseaux de neurones
Calcul formel
Traitement d'images
Production de cartes
Ondelettes
Le calcul formel
Les deux figures ci-dessous permettent de visualiser l'environnement de Matlab
Le répertoire courant
Cet environnement est paramétrable en fonction de la volonté du l'utilisateur.
Il y a deux façons pour écrire des fonctions Matlab :
soit directement dans la fenêtre de commandes,
soit en utilisant l'éditeur de développement de Matlab (cf. Figure 3) et en sauvant les programmes dans des fichiers texte avec l'extension ".m"
Figure 3 L'éditeur de programmation Matlab
Le langage de MATLAB® est sensible à la casse ( distinction entre les majuscules et les minuscules).
Pour écrire une ligne de commentaire il suffit de la faire précéder du caractère : %
3.2.1. La déclaration des variables
La déclaration et le typage des variables n'existent pas dans le langage Matlab. Mais bien entendu, avant d'assigner une variable à une autre il faut s'assurer de la compatibilité des types. Il est toutefois possible de créer des variables globales ( global x, par exemple).
N'importe quelle opération qui assigne une valeur à une variable permet la création de la variable si nécessaire, ou recouvre sa valeur courante si elle existe déjà.
Les noms de variables de MATLAB se composent d'une lettre suivie de tout nombre de lettres, chiffres, et soulignages.
MATLAB reconnaît seulement les 31 premiers caractères des noms de variables.
Par exemple :
>> i=10 |
Permet de déclarer une variable de type entier et de l' initialiser à la valeur 10 ( elle apparaît alors dans le Workspace cf. ci-dessous)
>>x=2.3 |
Permet de déclarer une variable de type flottant et de l' initialiser à la valeur 2.3 ( elle apparaît alors dans le Workspace cf. ci-dessous)
>>m=[2 3 1 ; 4 5 2 ; 3 2 1] |
Permet de déclarer une matrice 3*3 d'entiers et de l' initialiser ( elle apparaît alors dans le Workspace cf. ci-dessous )
>>u=1+2.j |
Permet de déclarer une valeur complexe ( elle apparaît alors dans le Workspace cf. ci-dessous )
Figure 4 Workspace
Il est possible d'avoir accès aux données du workspace de façon immédiate par l'intermédiaire de celui-ci (cf. Figure 5) et de les modifier.
Figure 5 Accès aux données du Workspace
Les types de données de bases sont les suivants :
2147483647)
uint8 : entiers non signés codés sur un octet (0 à +255) uint16 : entiers non signés codés sur deux octets (0 à +65535) uint32 : entiers non signés codés sur quatre octets (0 à
4294967295)
single : flottants sur 4 octets ( non utilisable dans des opérations donc seulement utilisé pour le stockage )
double : flottants sur 8 octets
Matlab permet également l'utilisation de complexe codée en fait par un double
char : codé sur un octet
3.2.2. Les matrices dans MATLAB®
Dans MATLAB®, une matrice est un tableau de nombres de taille nxm, avec n et m des entiers naturels. Les matrices de taille 1x1 sont les grandeurs scalaires, et les matrices 1xn ou nx1 sont des vecteurs.
Saisie des matrices :
Pour saisir une matrice, plusieurs possibilités s'offrent aux programmeurs :
• Écrire une liste explicite d'éléments :
>> [1 2 3;4 5 6;7 8 9]
• Charger les matrices à partir des fichiers externes de données.
>>C = fix(10*rand(3,2))
• Produire des matrices en utilisant des fonctions intégrées.
• Créer les matrices avec ses propres fonctions dans les fichiers Matlab.
Manipulation des matrices :
Si la matrice A est créer de la manière suivante :
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
Alors, l'accès aux éléments des matrices peut se faire de façon individuelle : l'élément dans la rangée i et la colonne j de A est noté par A(i, j). Dans l'exemple précédent A(1,4) est égale à 13.
L'opérateur colonne :
L'opérateur colonne ":" permet la création de vecteur de toute pièce ou d'extraire un vecteur d'une matrice existante
>> 1:10 permet d'obtenir un vecteur contenant les entiers de 1 à 10
>>A(1:4,4) permet d'obtenir la 4ième colonne de la matrice A
L'algèbre linéaire :
MATLAB® implémente de très nombreux outils d'algèbre linéaire (cf. 4.2)
3.2.3. Les structures dans MATLAB®
Il est possible de définir des structures ( enregistrement contenant plusieurs champs fields-). L'accès aux champs se fait par l'intermédiaire de l'opérateur.
>> =12 déclaration du premier champ
>> = 'M' déclaration du second champ
>>personne renvoie les deux champs
Les structures peuvent être bien entendu combinées avec des tableaux ….
De nombreuses fonction permettent de manipuler les structures ( struct, setfield, getfield, rmfield …)
3.2.4. Les opérateurs arithmétiques
Les opérateurs de Matlab sont les suivants (dans l'ordre de priorité) :
+, -, x , / , \ , ^, ' et () pour inverser les ordres de priorité des opérations
\ : "X = A\B" est la solution de AX=B calculée par l'algorithme du pivot de Gauss dans le cas ou A est une matrice carrée.
^: pour l'élévation à la puissance
' : conjugué d'un complexe
3.2.5. L'affichage et la saisie de données
La fonction "disp" permet d'afficher du text ou une matrice, par exemple :
>> disp(' Hello World')
La fonction input permet d'afficher une chaîne de caractères et de récupérer une valeur saisie au clavier par l'opérateur, par exemple :
>> val = input('Donner une valeur')
3.2.6. Les opérateurs logiques
Les opérateurs logiques de bases sont implémentés de la façon suivante :
NON | ~ ou not(.) |
ET | & ou and(.,.) |
OU inclusif | | ou or(.,.) |
OU exclusif | xor(.,.) |
3.2.7. Les opérateurs de relations
égalité | == | ||||||||||||||||
différence | ~= | ||||||||||||||||
Inégalités strictes ,larges | < >,<=,>= L'alternativeA une branche, la syntaxe est la suivante : >> if ( CB ) inst end A deux branches, la syntaxe est la suivante : >> if ( CB ) instsv else instsf end Voici un exemple concret d'utilisation :
Le selon queL'instruction switch permet l'éxécution de certaines instructions en fonction de la valeur d'une variable ou d'une expression. Sa forme de base est
Le choix logiqueContrairement aux langages de programmation C et Pascal, Matlab implémente le choix logique (cf . cours d'algorithmie de première année). Cette mise en ouevre se fait de la façon suivante : if (CB1) instruction1 elseif (CB2) instruction2 elseif (CB3) instruction3 . . else instruction end La boucle TantQueLa boucle TantQue est implémentée de façon quasiment analogue au langage C : while ( CB) instruction end La boucle PourAvec Matlab, la boucle Pour est implémentée de la façon suivante : for cpt = debut:increment:fin instruction end Le pas de l'incrément est un paramètre du réglage de la boucle (comme dans le langage C). Voilà deux exemples d'utilisation : 1 Un exemple tout simple, la table de multiplication par 2 : for i = 0:10 disp(2*i); end; 2 Une illustration en traitement d'image, le seuillage d'une image à plusieurs valeur de seuil :
3.2.9. Les fonctions en Matlab Par l'intermédiaire des fichiers Matlab (*.m) nous avons déjà vu que l'on pouvait écrire des scripts directement réutilisables dans la fenêtre de commande. Il est également possible d'écrire des fonctions réutilisable de la même façon. Les fonctions MatLab peuvent posséder leurs propres variables locales et acceptent des arguments d'entrée. A la manière de tous les langages de haut niveau, ces fonctions commencent par une entête La syntaxe est la suivante : Remarque : L'argument renvoyé peut être bien entendu un vecteur Exemples : 1 Une fonction très simple
2 Matlab accepte les fonctions récursives (ce n'est pas forcement un bon exemple dans ce cas là :
3 Sur l'exemple suivant, on définit une fonction nommée stat renvoyant deux valeurs ( la moyenne -mean- et l'écart type -std- du vecteur x passé en argument).
n est une variable local de cette fonction pour appeler une telle fonction ( renvoyant deux valeurs sous la forme d'un tableau), il suffit,par exemple, de saisir l'instruction suivante : >>x=[ 1 5 8 7 4 9] >>[m,s]=stat(x) Pour visualiser le code d'une fonction, il suffit de saisir la commande suivante : >> type <id de la fonction> Les fonctions présentées sont regroupées en catégories par rapport au traitement effectué. Les catégories sont les suivantes : Environnement de développement Fonctions mathématiques Manipulation des données Entrées / Sorties Tracée graphique et visualisation 3D 4.1. Environnement de développementFonctions liées à la fenêtre de commande : clc : effacement de la fenêtre de commande des anciennes commandes effectuées exit : permet de quitter Matlab Fonctions d'aide : help : génère l'aide d'une commande info : fournit des informations sur la version de Matlab lookfor <mot_clé> : Recherche du mot-clé indiqué dans toutes les entrées d'aide Fonctions liées à l'espace de travail : clear : supprime toutes les variables du workspace, si une variable est passé en argument seul cette variable est supprimée who, whos : fait la liste des variables de l'espace de travail Fonctions liées à la gestion des fichiers et au système d'exploitation : dir ,ls (sous unix): fait la liste des fichiers du répertoire de travail pwd : indique le répertoire courant cd : permet de changer de répertoire mkdir : création d'un répertoire path : visualiser ou changer le chemin de recherche de répertoire de MATLAB 4.2. Fonctions mathématiquesIl s'agit ici de ne présenter que les fonctions les plus usuelles. De nombreuses autres fonctions sont implémentées dans des domaines très diverses ( transformées de Fourier, méthodes numériques linéaires et non linéaires, interpolation, géométrie algorithmique - en particulier les problèmes de maillage- …) Fonctions mathématiques de basesin, cos, tan :pour le sinus, le cosinus ou la tangente d'un angle sinh, cosh, tanh :pour le sinus hyperbolique, le cosinus hyperbolique ou la tangente hyperbolique d'un angle. asin, acos, atan :pour l' arcsinus, l' arccosinus ou l' arctangente d'un angle. log, log10, log2 : fonctions logarithmes sqrt : racine carrée real, imag : parties réelles et imaginaires d'un nombre complexe conj : conjugué d'un complexe abs : module d'un complexe (ou valeur absolu) angle : argument d'un complexe rem ,mod : quotient et reste de la division euclidienne sign : signe round, fix, floor, ceil : les différents arrondisFonctions liées aux tableaux et matrices: size : renvoie la taille d'une matrice max, min : renvoie le maximum, le minimum d'un tableau sort : trie en ordre croissant les éléments d'un tableau sum : effectue la somme des éléments d'un tableau prod : effectue le produit des éléments d'un tableau zeros : création d'un tableau de zeros ( zero(4) renvoie une matrice 4x4 de zeros , zeros(4,1) renvoie le vecteur nul de dimension 4) eye : renvoie la matrice identité rand : génération de nombre aléatoire selon un loi gaussienne ( rand(4) renvoie une matrice 4x4 générée de façon aléatoire) randn : même principe mais la génération suit une loi normale Fonctions liées à l'algèbre linéairedet : calcul du déterminant d'une matrice carrée rank : rang de la matrice passée en argument trace : trace d'une matrice ( somme de la diagonal ) inv : calcul de la matrice inverse d'une matrice carrée lu : factorisation LU d'une matrice eig : valeurs et vecteurs propres ( [V,D] = eig(A) permet de récupérer les vecteurs propre V et les valeurs propres D ) polyeig : permet de récupérer le polynôme caractéristique l'une matrice Fonctions liées à l'analyse des donnéesmean: moyenne des valeurs d'un tableau de données median : valeur médiane d'un tableau de données std : écart type d'un tableau de données corrcoef : coefficient de corrélation Fonctions liées aux polynomesroots :racine d'un polynome polyval : évaluation d'un polynome polyfit : polynome d'interpolation 4.3. Manipulation des donnéesFonctions d'entrée / sortie sur les fichiersfopen : Ouverture d'un fichier fclose : fermeture d'un fichier fread : lecture de données binaires dans un fichier ouvert fscanf : lecture de données formatées dans un fichier ouvert fprintf : écriture de données formatées dans un fichier ouvert fwrite : écriture de données binaires dans un fichier ouvert fseek : positionnement dans un fichier ouvert Fonctions à la lecture des imagesimfinfo : retourne de l'information sur une image passée en paramètres imread : lecture d'une image imwrite : écriture d'une image 4.4. Tracée graphique et visualisation 3DNous allons voir dans ce paragraphe quelques outils de tracés sous Matlab, ces outils permettent de tracer aussi bien en 2D ( courbes ) qu'en 3D (surfaces et volumes). Des exemples en fin de document devraient vous permettre de mieux comprendre … En 2Dbox : affichage d'un repère en deux dimensions plot : affichage d'une droite 2D passant par les points du vecteurs de complexes passés en paramètre, affichage d'une courbe (x,y=f(x)) (cf. exemple 6.1) polar : tracée en coordonnées polaire (cf exemples 6.2 ) En 3Dplot3 : tracé en 3D (cf. exemples 6.3) cylinder, sphere : génération d'un cylindre, de la sphère unité (cf. exemple 6.4 ) mesh, surf, waterfall: 3 visualisations de surface en 3D (cf.exemples 6.5) 5. La toolbox traitement d'images de Matlab®Ce paragraphe regroupe une grande partie des opérations étudiées dans le cours de traitement et d'analyse d'images du chemin de spécialité "Vision" de 5ième année de l'ENISE. Le lecteur est donc invité à consulter le polycopié de cours "Traitement et Analyse des images" pour découvrir la théorie de ces différents traitements. 5.1. Ouverture, sauvegarde et conversions d'imagesimfinfo : retourne de l'information sur une image passée en paramètres imread : lecture d'une image imwrite : écriture d'une image Les exemples 6.6 et 6.7 illustrent l'utilisation de ces fonctions 5.2. Opérations arithmétiques sur les imagesLes exemples de cette section se trouvent en 6.8 imadd : additionne deux images imsubstract : différence de deux images imabsdiff : effectue la différence absolue de deux images (|f(x,y)-g(x,y)|) immultply : multiplie une image par une constante ou multiplie deux images imdivide : divise une image par une constante ou divise deux images imcomplement : négatif d'une image 5.3. Valeurs des pixels et Histogrammeimhist : calcule l'histogramme d'une image (cf. exemple 6.9) histeq : effectue l'égalisation de l'histogramme impixel : renvoie la valeur du pixel d'une image improfile : renvoie le profile d'une ligne d'une image accès aux pixels : On peut modifier la valeur des pixels d'une image directement dans la matrice image ( cf. exemple 6.10 ) mean2 ,std2 : moyenne et écart type d'une image 5.4. Seuillage des d'imagesim2bw : seuillage d'une image graythresh : détermination du seuillage par maximisation de la variance interclasse Pour ces deux fonctions consultés l'exemple 6.11 5.5. Convolution numérique des imagesedges : détection de contour d'une image, plusieurs filtres sont implémentés ( sobel, prewitt, roberts, laplace, canny) imfilter : filtrage par convolution. Attentien le masque de convolution doit intégrer le division par la somme des éléments ( exemple m=[0.33 0.33 0.33 ; 0.33 0.33 0.33 ;0.33 0.33 0.33] et cf. 6.12 ) medfilt2 : implémentation du filtre médian. Rappel :il ne s'agit pasd'un filtrage par convolution numérique cf. cours. Dans l'exemple 6.13 , il est également montré comment ajouté du bruit à une image ( imnoise ). 5.6. Outil issu de la morphologie mathématique. bwmorph : opérations sur les images binaire ( bouchage de trous -1 pixel isolé-, suppression des pixels isolés,suppression des pixels interieurs- contour-, squelétisation …) cf. exemple3 de la section 6.14 imclearborder : suppression des objets qui touchent le bord, cette fonction marche aussi sur les images en niveau de gris imbothat : chapeau haut de forme 5.7. Espace de couleurshsv2rgb, rgb2hsv : conversion de hsv en rgb et vice-versa ycbcr2rgb, rgb2ycbcr : conversion de yCbCr en rgb et vice-versa rgb2ntsc, ntsc2rgb : conversion de ntsc en rgb et vice-versa 6. Exemples6.1. Tracé de fonctions avec la fonction plotx = -2*pi:.1:2*pi;y = cos(x)+sin(x);plot(x,y) 6.2. Tracé de fonctions en coordonnées polairesSans indiqué une forme de trait : t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t)) En pointillé rouge … : t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t),'--r') 6.3. Courbe 3Dt = 0:pi/50:10*pi;plot3(sin(t),cos(t),t) La même chose avec grille permettant une meilleurs visualisation : t = 0:pi/50:10*pi;plot3(sin(t),cos(t),t) grid onaxis square 6.4. CylindresCylindre de profil cosinus, ( cylinder (n) génère un cylindre de rayon n) t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(2+cos(t)); surf(X,Y,Z) axis square 6.5. Visualisation de surfaces[X,Y,Z] = peaks(30); waterfall(X,Y,Z) 6.6. Lecture et affichage d'images
6.7. Conversions d'images
6.8. Opérations arithmétiques sur les imagesAddition de deux images ( ici il s'agit de la même image pour augmenter la luminosité) % addition des imagesI=imread(''); I2=imread(''); K=imadd(I,I2); Imshow(I);figure;imshow(K); Multiplication d'une image par une constante I = imread('');J = immultiply(I,1.2);imshow(I);figure, imshow(J) Négatif d'une image im= imread('D:\DOCUMENT\COURS\Annee5\CoursVision\VISION\');imn = imcomplement(im);imshow(im),title('image iron'); figure, imshow(imn),title('négatif de l''image iron'); 6.9. Histogramme des images
6.10. Accès au pixels, valeurs des pixelsExemple de segmentation en trois classes (on peut implémenter le seuillage binaire de façon analogue) :
6.11. Seuillage des images
6.12. Filtrage par convolution numérique des images
6.13. Filtre médian imshow(I) IJfLfigure, imshow(J) igure, imshow(L) = imread(''); = imnoise(I,'salt & pepper',0.02); = medfilt2(J,[3 3]); 6.14. Morphologie mathématiqueMorphologie mathématique binaire et en niveau de gris avec "détermination manuelle" de l'élément structurant :
Morphologie mathématique binaire en utilisant la fonction strel pour calculer l'élément structurant :
Différentes utilisations de la fonction bwmorph :
|