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