Projet individuel : - Ensta
Cours : Equations Différentielles Partielles en Traitement d'Images ... Ce projet
contient trois exercices, avec une difficulté croissante. Le premier, très basique, ...
Part of the document
Projet individuel :
Cours : Equations Différentielles Partielles en Traitement d'Images
Module : Vision D9-2
Intervenant : Petr Dokladal
L'objectif de ce projet est d'approfondir 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
l'ordre 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 l'exécution de
l'algorithme.
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 d'arrêt, les données visualisées ou modifiées dans le workspace de
Matlab, puis l'exé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 à l'aide d'opé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 l'intégration ?
Q1/2 Quelle est la différence entre des conditions initiales lisses et non
lisses ?
Q1/3 Quelle est l'influence de la taille du pas d'intégration ?
Conseils : D'autres commandes Matlab vous seront utiles. Pour toute
commande est possible d'utiliser l'aide 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) D'abord déboguer l'algorithme 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 à l'inté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))