espace

Maîtrise d'informatique - Module 18
Traitement du signal - Travaux pratiques



Séance 3 :

  • 1. Introduction.
  • 2. Intégration de vos programmes dans Khoros.
  • 3. Filtrage.

  • 1. Introduction.

    Dans la séance précédente de travaux pratiques, vous avez réalisé trois programmes :

    Dorénavant, vous ne travaillerez plus que sur des images de taille 256 x 256 (N = 256 et P = 8) : le programme tfr1D ne vous sera donc plus utile.

    2. Intégration de vos précédents programmes dans Khoros.

    Vous allez constituer dans Khoros une chaîne complète de traitement TFR / TFR-1 faisant appel aux programmes tfr2D et convert_tfr2D.

    2.1. Description de la chaîne de traitement.

    En entrée de la chaîne, on trouvera un fichier image au format brut (que nous désignerons ici par fichier1.brt). En parcourant la chaîne :

    D'autre part :

    2.2. Marche à suivre.

    Suivez la procédure d'intégration d'opérateurs déjà vue lors de la deuxième séance de travaux pratiques de traitement d'images :

    D'autre part, les mystères de Khoros étant parfois insondables, il est vivement recommandé (si vous voulez que votre chaîne de traitement fonctionne) :

    Si vous éprouvez des difficultés à réaliser cette chaîne de traitement, cliquez sur le canot de sauvetage ci-dessous :

    2.3. Tests de validation.

    Dans le répertoire /home/mod18g0/TS/tests, vous trouverez les fichiers tp02test01.brt et tp02test02.brt, déjà utilisés lors des tests de validation de la deuxième séance de travaux pratiques. Prenez le fichier tp02test01.brt en entrée de la chaîne de traitement, et vérifiez visuellement :

    Lorsque ces tests auront été réalisés avec succès, vous pourrez passer à la partie "filtrage" de ce TP.

    3. Filtrage.

    Il a été vu en cours que le filtrage est une application importante de la transformation de Fourier. C'est cette application que vous allez tester maintenant, grâce au programme tfr2D que vous avez déjà écrit, testé et intégré à Khoros. Au préalable, vous allez rechercher la position de l'origine dans le plan de Fourier.

    3.1. Recherche de la position de l'origine dans le plan de Fourier.

    Lorsqu'on traite des images, c'est-à-dire des signaux 2D, une première difficulté consiste à déterminer l'origine dans le plan de Fourier, c'est-à-dire le pixel du spectre qui correspond à wx = 0 et wy= 0. Cela est fondamental, puisqu'on désire annuler les valeurs du spectre correspondant à certaines valeurs bien définies de wx et wy dans le plan de Fourier. Pour ce faire, le moyen le plus simple consiste à choisir une image uniforme, où tous les pixels ont un niveau de gris égal à 255. On sait que la transformée de Fourier d'un tel signal est un pic (ou une impulsion) de Dirac bidimensionnel centré en wx = 0 et wy = 0. Donc, en détectant le pixel (i0,j0) correspondant à ce pic, on peut localiser l'origine dans le plan de Fourier.

    Une deuxième difficulté, qui est liée à la première, consiste à déterminer la zone du plan correspondant aux "hautes fréquences" ou aux "basses fréquences". Si l'origine du plan de Fourier se trouve au milieu de l'image du spectre, alors les "basses fréquences" correspondent à une zone proche de cette origine, de taille plus ou moins grande. Si cette zone est un carré de côté 2a, centré sur l'origine, les pixels (i,j) de l'image du spectre correspondant à ce carré sont tels que :

    En revanche, si l'origine du plan de Fourier se trouve décentrée (par exemple sur un coin de l'image du spectre), alors le carré précédemment défini déborde de l'image. Dans ce cas, il convient de remplacer les inégalités précédentes par :

    d(u,v) est une distance définie par :

    N x N étant la taille de l'image. La zone correspondante sera donc du type suivant, si l'origine du plan de Fourier se trouve sur un des coins de l'image :

    Passons maintenant à la programmation de trois filtrages de types différents : passe-bas, passe-haut et passe-bande.

    3.2. Le programme filtre2D.

    1- Dans le répertoire /home/mod18g0/TS/tests, vous trouverez les fichiers tp03test01.brt et tp03test02.brt. Le fichier tp03test01.brt contient une image uniforme, où tous les pixels ont un niveau de gris égal à 255, et tp03test02.brt contient la transformée de Fourier de ce signal bidimensionnel (plus exactement, le module de la transformée). Ecrivez un programme permettant de déterminer l'origine du plan de Fourier, comme cela est indiqué dans le paragraphe précédent. Vous pouvez par exemple réutiliser la fonction lire_modules (cf. TP2, 3.2.2) :

    Le programme recevra en paramètre le nom d'un fichier .brt (en l'occurrence, tp03test02.brt) et écrira sur la sortie standard un couple (i0,j0) de valeurs tel que, parmi les N x N complexes pointés par s, s[i0][j0] soit un complexe de module maximum (en fait, de partie réelle maximale).

    2- Ecrivez la fonction :

    qui à tout couple (u,v) d'entiers, associe min{|u-v-N|,|u-v|,|u-v+N|}.

    3- Ecrivez la fonction :

    Soit i et j deux entiers compris entre 0 et N-1. Si dist(i,i0)>= rayon ou dist(j,j0)>= rayon (autrement dit, si (i,j) est en dehors d'une zone "carrée" centrée en (i0,j0) et de côté 2xrayon), alors s_out[i][j] prend la valeur 0.0. Sinon, s_out[i][j] prend la valeur s_in[i][j].

    4- Ecrivez la fonction :

    Soit i et j deux entiers compris entre 0 et N-1. Si dist(i,i0)< rayon et dist(j,j0)< rayon (autrement dit, si (i,j) est dans une zone "carrée" centrée en (i0,j0) et de côté 2xrayon), alors s_out[i][j] prend la valeur 0.0. Sinon, s_out[i][j] prend la valeur s_in[i][j].

    5- Ecrivez le programme filtre2D. Ce programme accepte quatre paramètres :

    3.3. Intégration de ce programme dans Khoros.

    Nous allons maintenant reprendre et compléter la chaîne de traitement définie plus haut (paragraphe 2). En parcourant la nouvelle chaîne (une couleur différente signale les modifications apportées) :

    D'autre part :

    3.4. Test et expérimentation.

    1- Dans le répertoire /home/mod18g0/TS/tests, vous trouverez les fichiers tp03test11.brt, tp03test12.brt, tp03test14.brt et tp03test15.brt. Prenez le fichier tp03test11.brt en entrée de la chaîne de traitement. Pour le filtrage, choisissez rayon_min égal à 50 et rayon_max égal à 256 (filtrage passe-haut). Vérifiez visuellement :

    2- Modifiez les valeurs de rayon_min et rayon_max et observez les effets du filtrage.


    Ces pages ont été réalisées par Jean-Denis Durou et Pascal Matsakis.
    Pour tout commentaire, envoyer un mail à durou@irit.fr.