Projet individuel - ENSTA ParisTech
Projet individuel : Cours : Equations Différentielles Partielles en Traitement d'
Images ... de l'algorithme. Le corrigé sera disponible après la remise des
rapports.
part of the document
Projet individuel :
Cours : Equations Différentielles Partielles en Traitement dImages
Module : Vision D9-2
Intervenant : Petr Dokladal
Lobjectif de ce projet est dapprofondir la compréhension de la matière par la mise en pratique informatique des mécanismes de base acquis pendant le cours théorique. Ce projet contient trois exercices, avec une difficulté croissante. Le premier, très basique, sert également à comprendre la logique du logiciel Matlab. Il est conseillé de suivre ces exercices dans lordre indiqué. Avec lénoncé des exercices est fournie la solution (sous forme orale) ainsi que quelques fractions de code en Matlab (pour faciliter la prise en main).
Evaluation : Les élèves sont autorisés à travailler soit en binôme soit individuellement. Le projet sera évalué en fonction du rapport fourni. Doit faire partie intégrale du rapport : le code, les réponses aux questions posées, des images illustratives générées lors de lexécution de lalgorithme.
Le corrigé sera disponible après la remise des rapports.
Exercice 1 :
Enoncé : Réaliser sous Matlab léquation aux dérivées partielles ux + ut = 0. Utiliser a) conditions initiales lisses et b) non-lisses.
Objectifs : Prise en main de Matlab. Travail sur un signal 1-D.
Solution : Réaliser un script Matlab (menu File New m-file). Les scripts .m sont des programmes interprétés. Leur exécution peut être interrompue sur un point darrêt, les données visualisées ou modifiées dans le workspace de Matlab, puis lexécution peut reprendre à nouveau.
Initialiser u0 par : a) une sinusoïde et b) fonction Heavyside, sur un vecteur de 1000 échantillons :
x=1:1000;
u=sin(x/10);
Visualiser le signal
Figure(1); clf; % ouvre une fenêtre graphique ; efface la
plot(x,u); title(conditions initiales);
Intégrer :
Réaliser ux = du/dx. Utiliser les dérivées latérales, puis la dérivée centrale. Implémenter à laide dopérations vectorielles (ne pas utiliser des boucles de type for, while, etc. qui sont beaucoup trop longes). up = [ux ux(end)]; % translation du signal
um = [ux(1) ux]; % pour calculer les dérivées
uxm = u - um; % derivées latérales
uxp = up - u;
Ne pas oublier de traiter correctement les bords.
Intégrer un+1 = un uxn for t = 1:1000, u = u-ux*dt; end;
Q1/1 Quel phénomène observe-t-on lors de lintégration ?
Q1/2 Quelle est la différence entre des conditions initiales lisses et non lisses ?
Q1/3 Quelle est linfluence de la taille du pas dintégration ?
Conseils : Dautres commandes Matlab vous seront utiles. Pour toute commande est possible dutiliser laide de Matlab. Par exemple help plot.
Utilisez la commande pause, ou le mode debug de Matlab pour exécuter et intégrer pas à pas.
Visualisation : figure ; plot ; hold on/off ;
Boucles: cf. standard C
Lecture/écriture des fichiers: fscanf, imread, movie
Effacer la mémoire: clear /all/classes
Exercice 2 :
Enoncé : Réaliser sous Matlab un flux à vitesse constante : réaliser une érosion/dilatation par un disc, carré et losange. Utiliser le schéma de discrétisation upwind (face au vent).
Objectifs : réaliser un flux simple sur un signal bidimensionnel.
Solution :
1) Dabord déboguer lalgorithme sur des données réduites. Créer une matrice de taille 40 par 40, contenant un point isolé (ou un cercle) au centre. Les valeurs à lintérieur du cercle sont à 1, et 0 ailleurs pour tester les dilatations et inversement pour les érosions.
N = 40;
u = zeros(N, N);
[x, y] = meshgrid (1:N, 1:N);
u(find(sqrt((x-N/2).*(x-N/2) + (y-N/2).*(y-N/2))