TNI+VO · Exercice de Programmation

EP05_01 — 🟢 Filtre Passe-Bas Idéal par Distance dans le Spectre

5.13.1 EP05_01 🟢 Filtre Passe-Bas Idéal par Distance dans le Spectre

Dans un scanner de documents anciens, le capteur capte le papier froissé et la texture des fibres en même temps que le texte — un bruit haute fréquence qui « pollue » le spectre sur les bords. Le technicien de maintenance n’a pas accès à l’image originale, seulement au spectre de magnitude déjà calculé par le logiciel du scanner. Son travail est simple et chirurgical : ne conserver que le cercle central des basses fréquences (la structure globale du document) et effacer tout ce qui se trouve hors du rayon \(D_0\), éliminant la texture fine sans même avoir à toucher à l’image spatiale.

C’est le filtre passe-bas idéal (LPFI) : l’opération spectrale la plus directe du chapitre, mais aussi celle qui révèle le mieux l’anatomie d’un spectre centré.

5.13.1.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes) du spectre de magnitude — déjà fourni centré (équivalent à la sortie de np.fft.fftshift).
  2. Fréquence de coupure : Lire l’entier \(D_0\).
  3. Données : Lire les valeurs entières de la matrice de magnitude, ligne par ligne.
  4. Centre du spectre : Calculer \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  5. Distance : Pour chaque position \((u,v)\), calculer \[ D(u,v) = \sqrt{(u-c_y)^2 + (v-c_x)^2} \]
  6. Masque idéal : Appliquer \[ H(u,v) = \begin{cases} 1, & D(u,v) \le D_0 \\ 0, & D(u,v) > D_0 \end{cases} \]
  7. Filtrage : La valeur de sortie est \(\text{mag}'(u,v) = \text{mag}(u,v) \cdot H(u,v)\).
  8. Sortie : Afficher la matrice filtrée avec les dimensions \(L \times C\).

5.13.1.2 📌 Contraintes computationnelles

  • Comparaison non stricte : le critère utilise \(D(u,v) \le D_0\) (la frontière appartient au filtre, c’est-à-dire qu’elle est conservée).
  • Type : toutes les valeurs d’entrée et de sortie sont des entiers ; la distance est calculée en virgule flottante uniquement en interne.
  • Pas d’arrondi de magnitude : comme l’entrée est déjà entière et que le masque est binaire (0 ou 1), la sortie n’a jamais besoin d’arrondi.

5.13.1.3 🧠 Fondement théorique

Région Distance au centre Effet du filtre
Centre (\(D \le D_0\)) Basses fréquences Préservées — structure globale conservée
Bords (\(D > D_0\)) Hautes fréquences Mises à zéro — texture et bruit supprimés
\(D_0\) petit — L’image reconstruite serait très floue
\(D_0\) grand — Peu de filtrage ; presque toute l’énergie est préservée

5.13.1.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Entier \(D_0\).
  • Lignes suivantes : Éléments entiers de la matrice de magnitude (centrée).

Sortie :

  • Matrice filtrée en \(L\) lignes et \(C\) colonnes, séparés par des espaces.

5.13.1.5 📌 Exemples

Entrée Sortie Observation
3
3
1
10 20 30
40 50 60
70 80 90
0 20 0
40 50 60
0 80 0
Centre \((1,1)\). Les coins ont \(D=\sqrt{2}\approx1.41 > 1\), donc ils sont mis à zéro ; les voisins orthogonaux ont \(D=1 \le 1\) et sont conservés.
1
3
0
5 9 7
0 9 0 \(L=1, C=3\) : centre en \((0,1)\). Seule la position centrale elle-même (\(D=0\)) survit à \(D_0=0\).
🎮 Simulateur EP05_01 : Filtre Passe-Bas Idéal H = (D ≤ D₀) ? 1 : 0
Ajustez D₀ et observez quelles positions du spectre 5×5 survivent au filtre.
Spectre Original (Magnitude)
Résultat Filtré
–
Figure 5.32: Simulateur EP05_01 : Filtre passe-bas idéal dans le spectre
%%writefile EP05_01.cpp
// your solution
Overwriting EP05_01.cpp
TestSuite("EP05_01.cpp").run()
✔️ EP05_01.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP05_01.cases

🔍 Test de C++ : EP05_01.cpp
⚠️ EP05_01.cpp : fichier vide (moins de 3 lignes). Tests ignorés.