EDI+VA · Esercizio di Programmazione

EP03_04 — 📊 Equalizzazione dell’istogramma (L bit)

3.12.4 EP03_04 📊 Equalizzazione dell’istogramma (L bit)

Nelle immagini satellitari di telerilevamento, la variazione dell’illuminazione durante il giorno produce immagini a basso contrasto. L’equalizzazione dell’istogramma viene applicata automaticamente su satelliti come il Landsat per redistribuire i toni, rivelando dettagli di vegetazione, rilievo e aree urbane invisibili nell’immagine originale.

Vedere in Figura 3.29 una simulazione di questo EP.

3.12.4.1 📋 Linee guida di implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe), \(C\) (colonne) e \(B\) (numero di bit, con \(L_{\max} = 2^B\)).
  2. Dati: Leggere la matrice di pixel \(f\) con valori in \([0, 2^B - 1]\).
  3. Istogramma: Calcolare \(h[k]\) = numero di pixel con intensità \(k\), per \(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]\); funzione di distribuzione cumulativa.
  6. LUT: \(\text{lut}[k] = \text{round}\left(\text{cdf}[k] \cdot (2^B - 1)\right)\); Look-Up Table (tabella di consultazione).
  7. Applicazione: \(g[i,j] = \text{lut}[f[i,j]]\).
  8. Uscita: Visualizzare la matrice equalizzata \(L \times C\).

3.12.4.2 📌 Vincoli computazionali

  • Arrotondamento: Usare l’arrotondamento matematico (round) nella LUT.
  • Bit: Il numero di livelli è \(2^B\) (es.: \(B=3 \Rightarrow 8\) livelli, \(B=8 \Rightarrow 256\) livelli).
  • CDF cumulativa: \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\), con \(\text{cdf}[2^B-1] = 1.0\).

3.12.4.3 🧠 Fondamenti teorici

Fase Operazione Formula
1 Istogramma \(h[k] \leftarrow\) n. pixel con 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 Applicazione \(g[i,j] = \text{lut}[f[i,j]]\)

3.12.4.4 📦 Specifica di input e output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Riga 3: Intero \(B\) (numero di bit).
  • Righe successive: Elementi interi della matrice.

Output:

  • Matrice equalizzata in \(L\) righe e \(C\) colonne.

3.12.4.5 📌 Esempi

Input Output Osservazione
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
Esempio a 3 bit del capitolo
1
4
3
0 0 7 7
0 0 7 7 Istogramma bimodale estremo
📊 Simulatore EP03_04: Equalizzazione dell'istogramma lut[k] = round(cdf[k] · (L − 1))

Scegli la profondità di bit (B) e genera immagini per analizzare la distribuzione dinamica dell'istogramma e la tabella di rimappatura (LUT) in tempo reale.

3 bit → 8 livelli
1 bit (2 livelli) 4 bit (16 livelli) 8 bit (256 livelli)
Input originale
Risultato equalizzato
Istogramma originale
Istogramma equalizzato
LUT (tabella di rimappatura k → v)
lut[k] = round(cdf[k] · 7) | B=3, livelli=8
Figura 3.29: Simulatore EP03_04: Equalizzazione dell’istogramma (Livelli L = 2^B)
%%writefile EP03_04.py
# Codice Python
Overwriting EP03_04.py
TestSuite("EP03_04.py").run()
✔️ EP03_04.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP03_04.cases

🔍 Test di Python: EP03_04.py
⚠️ EP03_04.py: file vuoto (meno di 3 righe). Test saltati.