PDI+VC · Exercício de Programação

EP03_04 — 📊 Equalização de Histograma (L bits)

3.12.4 EP03_04 📊 Equalização de Histograma (L bits)

Em imagens de satélite de sensoriamento remoto, a variação de iluminação ao longo do dia produz imagens de baixo contraste. A equalização de histograma é aplicada automaticamente em satélites como o Landsat para redistribuir os tons, revelando detalhes de vegetação, relevo e zonas urbanas invisíveis na imagem original.

Ver na Figura 3.29 uma simulação deste EP.

3.12.4.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas), \(C\) (colunas) e \(B\) (número de bits, com \(L_{\max} = 2^B\)).
  2. Dados: Ler a matriz de pixels \(f\) com valores em \([0, 2^B - 1]\).
  3. Histograma: Calcular \(h[k]\) = número de pixels com intensidade \(k\), para \(k = 0 \ldots 2^B-1\).
  4. Probabilidade: \(p[k] = h[k] / (L \cdot C)\).
  5. CDF: \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\); função de distribuição acumulada.
  6. LUT: \(\text{lut}[k] = \text{round}\left(\text{cdf}[k] \cdot (2^B - 1)\right)\); Look-Up Table (tabela de consulta).
  7. Aplicação: \(g[i,j] = \text{lut}[f[i,j]]\).
  8. Saída: Exibir a matriz equalizada \(L \times C\).

3.12.4.2 📌 Restrições Computacionais

  • Arredondamento: Usar arredondamento matemático (round) na LUT.
  • Bits: O número de níveis é \(2^B\) (ex.: \(B=3 \Rightarrow 8\) níveis, \(B=8 \Rightarrow 256\) níveis).
  • CDF acumulada: \(\text{cdf}[k] = \sum_{j=0}^{k} p[j]\), com \(\text{cdf}[2^B-1] = 1.0\).

3.12.4.3 🧠 Fundamentação Teórica

Etapa Operação Fórmula
1 Histograma \(h[k] \leftarrow\) nº pixels com intensidade \(k\)
2 Probabilidade \(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 (tabela de consulta)k] = \text{round}(\text{cdf}[k] \cdot (2^B-1))\)
5 Aplicação \(g[i,j] = \text{lut}[f[i,j]]\)

3.12.4.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linha 3: Inteiro \(B\) (número de bits).
  • Linhas seguintes: Elementos inteiros da matriz.

Saída:

  • Matriz equalizada em \(L\) linhas e \(C\) colunas.

3.12.4.5 📌 Exemplos

Entrada Saída Observação
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
Exemplo 3 bits do capítulo
1
4
3
0 0 7 7
0 0 7 7 Histograma bimodal extremo
📊 Simulador EP03_04: Equalização de Histograma lut[k] = round(cdf[k] · (L − 1))

Escolha a profundidade de bits (B) e gere imagens para analisar o espalhamento dinâmico do histograma e a tabela de remapeamento (LUT) em tempo real.

3 bits → 8 níveis
1 bit (2 níveis) 4 bits (16 níveis) 8 bits (256 níveis)
Entrada Original
Resultado Equalizado
Histograma Original
Histograma Equalizado
LUT (Tabela de Remapeamento k → v)
lut[k] = round(cdf[k] · 7) | B=3, níveis=8
Figura 3.29: Simulador EP03_04: Equalização de Histograma (Níveis L = 2^B)
%%writefile EP03_04.cpp
// sua solução
Overwriting EP03_04.cpp
TestSuite("EP03_04.cpp").run()
✔️ EP03_04.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP03_04.cases

🔍 Testando C++: EP03_04.cpp
⚠️ EP03_04.cpp: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.