PDI+VC · Ejercicio de Programación

EP03_04 — 📊 Equalización de Histograma (L bits)

3.12.4 EP03_04 📊 Equalización de Histograma (L bits)

En imágenes de satélite de teleobservación, la variación de iluminación a lo largo del día produce imágenes de bajo contraste. La equalización de histograma se aplica automáticamente en satélites como el Landsat para redistribuir los tonos, revelando detalles de vegetación, relieve y zonas urbanas invisibles en la imagen original.

Ver en la Figura 3.29 una simulación de este EP.

3.12.4.1 📋 Directrices de Implementación

  1. Dimensiones: Leer los enteros \(L\) (líneas), \(C\) (columnas) y \(B\) (número de bits, con \(L_{\max} = 2^B\)).
  2. Datos: Leer la matriz de píxeles \(f\) con valores en \([0, 2^B - 1]\).
  3. Histograma: Calcular \(h[k]\) = número de píxeles con intensidad \(k\), para \(k = 0 \ldots 2^B-1\).
  4. Probabilidad: \(p[k] = h[k] / (L \cdot C)\).
  5. CDF: \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\); función de distribución acumulada.
  6. LUT: \(\text{lut}[k] = \text{round}\left(\text{cdf}[k] \cdot (2^B - 1)\right)\); Look-Up Table (tabla de consulta).
  7. Aplicación: \(g[i,j] = \text{lut}[f[i,j]]\).
  8. Salida: Mostrar la matriz equalizada \(L \times C\).

3.12.4.2 📌 Restricciones Computacionales

  • Redondeo: Usar redondeo matemático (round) en la LUT.
  • Bits: El número de niveles es \(2^B\) (ej.: \(B=3 \Rightarrow 8\) niveles, \(B=8 \Rightarrow 256\) niveles).
  • CDF acumulada: \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\), con \(\text{cdf}[2^B-1] = 1.0\).

3.12.4.3 🧠 Fundamentación Teórica

Etapa Operación Fórmula
1 Histograma \(h[k] \leftarrow\) nº píxeles con intensidad \(k\)
2 Probabilidad \(p[k] = h[k] / (L \cdot C)\)
3 CDF \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\)
4 LUT \(\text{lut}[Look-Up Table (tabla de consulta)k] = \text{round}(\text{cdf}[k] \cdot (2^B-1))\)
5 Aplicación \(g[i,j] = \text{lut}[f[i,j]]\)

3.12.4.4 📦 Especificación de Entrada y Salida (VPL)

Entrada:

  • Línea 1: Entero \(L\).
  • Línea 2: Entero \(C\).
  • Línea 3: Entero \(B\) (número de bits).
  • Líneas siguientes: Elementos enteros de la matriz.

Salida:

  • Matriz equalizada en \(L\) líneas y \(C\) columnas.

3.12.4.5 📌 Ejemplos

Entrada Salida Observación
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
Ejemplo 3 bits del capítulo
1
4
3
0 0 7 7
0 0 7 7 Histograma bimodal extremo
📊 Simulador EP03_04: Ecualización de Histograma lut[k] = round(cdf[k] · (L − 1))

Elija la profundidad de bits (B) y genere imágenes para analizar la dispersión dinámica del histograma y la tabla de remapeo (LUT) en tiempo real.

3 bits → 8 niveles
1 bit (2 niveles) 4 bits (16 niveles) 8 bits (256 niveles)
Entrada Original
Resultado Ecualizado
Histograma Original
Histograma Ecualizado
LUT (Tabla de Remapeo k → v)
lut[k] = round(cdf[k] · 7) | B=3, niveles=8
Figura 3.29: Simulador EP03_04: Ecualización de Histograma (Niveles L = 2^B)
%%writefile EP03_04.py
# Código Python
Overwriting EP03_04.py
TestSuite("EP03_04.py").run()
✔️ EP03_04.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP03_04.cases

🔍 Probando Python: EP03_04.py
⚠️ EP03_04.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.