TNI+VO · Exercice de Programmation

EP03_10 — ✨ Unsharp Masking (USM)

3.12.10 EP03_10 ✨ Unsharp Masking (USM)

Dans les systèmes de numérisation de documents historiques et d’œuvres d’art, la netteté des images est essentielle pour la lecture de textes manuscrits et de détails ornementaux. L’Unsharp Masking (USM) est l’algorithme de rehaussement de netteté standard utilisé dans les scanners professionnels et les logiciels tels qu’Adobe Photoshop, contrôlé par le paramètre \(k\) qui détermine l’intensité du rehaussement.

Voir dans Figure 3.35 une simulation de cet EP.

3.12.10.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
  2. Paramètre : Lire la valeur réelle \(k\) (intensité du rehaussement, \(k \ge 0\)).
  3. Données : Lire la matrice de pixels \(f\).
  4. Lissage : Calculer \(\bar{f}\) avec un filtre de moyenne \(3\times3\) (uniquement les pixels internes ; les bords sont conservés) :

\[\bar{f}(i,j) = \frac{1}{9} \sum_{s=-1}^{1} \sum_{t=-1}^{1} f(i+s, j+t)\]

  1. Masque haute fréquence : \(m(i,j) = f(i,j) - \bar{f}(i,j)\).
  2. Rehaussement USM : Pour chaque pixel interne :

\[g(i,j) = \text{clip}\left(\text{round}\left(f(i,j) + k \cdot m(i,j)\right)\right)\]

  1. Bord : \(g(i,j) = f(i,j)\) (copie directe).
  2. Sortie : Afficher la matrice rehaussée \(L \times C\).

3.12.10.2 📌 Contraintes computationnelles

  • Arrondi : Appliquer round avant le clipping.
  • Saturation : \(\text{clip}(x) = \max(0, \min(255, x))\).
  • Opérations en float : Calculer \(\bar{f}\) et \(m\) en virgule flottante avant d’arrondir le résultat final.
  • \(k = 0\) : Pas de rehaussement — la sortie est identique à l’entrée (sauf pour les bords).

3.12.10.3 🧠 Fondement théorique

Étape Opération Description
1 \(\bar{f} = f * \frac{1}{9}\mathbf{1}_{3\times3}\) Lissage (basses fréquences)
2 \(m = f - \bar{f}\) Masque (hautes fréquences)
3 \(g = \text{clip}(\text{round}(f + k \cdot m))\) Rehaussement pondéré

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

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Réel \(k\).
  • Lignes suivantes : Éléments de la matrice originale.

Sortie :

  • Matrice rehaussée \(L \times C\).

3.12.10.5 📌 Exemples

Entrée Sortie Observation
3
3
0.0
100 100 100
100 100 100
100 100 100
100 100 100
100 100 100
100 100 100
k=0 : pas de rehaussement
3
3
1.0
50 50 50
50 200 50
50 50 50
50 50 50
50 255 50
50 50 50
k=1 : pixel central rehaussé et saturé
✨ Simulateur EP03_10 : Unsharp Masking (USM) g = f + k · m

Réglez le facteur de gain k, observez le pipeline complet de rehaussement (floutage, masque haute fréquence) et survolez le résultat.

Facteur de gain k : k = 1.0
① Image originale f Matrice 5×5 pixels
② Flouté f̄ Moyenne 3 × 3
③ Masque m m = f − f̄ (hautes fréquences)
④ Résultat g = f + 1.0·m Survolez pour inspecter
Légende :
Voisinage 3×3
Pixel central
Bord (copié)
Masque positif/négatif
Survolez un pixel interne du résultat pour tracer le pipeline complet.
Figure 3.35: Simulateur EP03_10 : Unsharp Masking (USM)
%%writefile EP03_10.py
# Code Python
Overwriting EP03_10.py
TestSuite("EP03_10.py").run()
✔️ EP03_10.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP03_10.cases

🔍 Test de Python : EP03_10.py
⚠️ EP03_10.py : fichier vide (moins de 3 lignes). Tests ignorés.