Td corrigé Projet individuel - ENSTA ParisTech pdf

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 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))