TNI+VO · Exercice de Programmation

EP03_04 — 📊 Égalisation d’histogramme (L bits)

3.12.4 EP03_04 📊 Égalisation d’histogramme (L bits)

Dans les images satellites de télédétection, la variation de l’éclairage au cours de la journée produit des images à faible contraste. L’égalisation d’histogramme est appliquée automatiquement sur des satellites comme Landsat pour redistribuer les tons, révélant des détails de végétation, de relief et de zones urbaines invisibles dans l’image originale.

Voir dans Figure 3.29 une simulation de cet EP.

3.12.4.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes), \(C\) (colonnes) et \(B\) (nombre de bits, avec \(L_{\max} = 2^B\)).
  2. Données : Lire la matrice de pixels \(f\) avec des valeurs dans \([0, 2^B - 1]\).
  3. Histogramme : Calculer \(h[k]\) = nombre de pixels avec l’intensité \(k\), pour \(k = 0 \ldots 2^B-1\).
  4. Probabilité : \(p[k] = h[k] / (L \cdot C)\).
  5. CDF : \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\) ; fonction de distribution cumulée.
  6. LUT : \(\text{lut}[k] = \text{round}\left(\text{cdf}[k] \cdot (2^B - 1)\right)\) ; Look-Up Table (table de consultation).
  7. Application : \(g[i,j] = \text{lut}[f[i,j]]\).
  8. Sortie : Afficher la matrice égalisée \(L \times C\).

3.12.4.2 📌 Contraintes computationnelles

  • Arrondi : Utiliser l’arrondi mathématique (round) dans la LUT.
  • Bits : Le nombre de niveaux est \(2^B\) (ex. : \(B=3 \Rightarrow 8\) niveaux, \(B=8 \Rightarrow 256\) niveaux).
  • CDF cumulée : \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\), avec \(\text{cdf}[2^B-1] = 1.0\).

3.12.4.3 🧠 Fondement théorique

Étape Opération Formule
1 Histogramme \(h[k] \leftarrow\) nombre de pixels avec l’intensité \(k\)
2 Probabilité \(p[k] = h[k] / (L \cdot C)\)
3 CDF \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\)
4 LUT \(\text{lut}[k] = \text{round}(\text{cdf}[k] \cdot (2^B-1))\)
5 Application \(g[i,j] = \text{lut}[f[i,j]]\)

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

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Entier \(B\) (nombre de bits).
  • Lignes suivantes : Éléments entiers de la matrice.

Sortie :

  • Matrice égalisée en \(L\) lignes et \(C\) colonnes.

3.12.4.5 📌 Exemples

Entrée Sortie Observation
5
5
3
3 4 2 3 4
4 3 3 4 3
2 3 4 3 2
3 4 3 2 3
4 3 2 3 4
5 7 1 5 7
7 5 5 7 5
1 5 7 5 1
5 7 5 1 5
7 5 1 5 7
Exemple 3 bits du chapitre
1
4
3
0 0 7 7
0 0 7 7 Histogramme bimodal extrême
📊 Simulateur EP03_04 : Égalisation d'histogramme lut[k] = round(cdf[k] · (L − 1))

Choisissez la profondeur de bits (B) et générez des images pour analyser l'étalement dynamique de l'histogramme et la table de remappage (LUT) en temps réel.

3 bits → 8 niveaux
1 bit (2 niveaux) 4 bits (16 niveaux) 8 bits (256 niveaux)
Entrée originale
Résultat égalisé
Histogramme original
Histogramme égalisé
LUT (Table de remappage k → v)
lut[k] = round(cdf[k] · 7) | B=3, niveaux=8
Figure 3.29: Simulateur EP03_04 : Égalisation d’histogramme (Niveaux L = 2^B)
%%writefile EP03_04.py
# Code Python
Overwriting EP03_04.py
TestSuite("EP03_04.py").run()
✔️ EP03_04.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP03_04.cases

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