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

EP03_10 — ✨ Unsharp Masking (USM)

3.12.10 EP03_10 ✨ Unsharp Masking (USM)

Em sistemas de digitalização de documentos históricos e obras de arte, a nitidez das imagens é fundamental para leitura de textos manuscritos e detalhes ornamentais. O Unsharp Masking (USM) é o algoritmo de realce de nitidez padrão utilizado em scanners profissionais e softwares como Adobe Photoshop, controlado pelo parâmetro \(k\) que determina a intensidade do realce.

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

3.12.10.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas).
  2. Parâmetro: Ler o valor real \(k\) (intensidade do realce, \(k \ge 0\)).
  3. Dados: Ler a matriz de pixels \(f\).
  4. Suavização: Calcular \(\bar{f}\) com filtro de média \(3\times3\) (apenas pixels internos; bordas mantidas):

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

  1. Máscara de alta frequência: \(m(i,j) = f(i,j) - \bar{f}(i,j)\).
  2. Realce USM: Para cada pixel interno:

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

  1. Borda: \(g(i,j) = f(i,j)\) (cópia direta).
  2. Saída: Exibir a matriz realçada \(L \times C\).

3.12.10.2 📌 Restrições Computacionais

  • Arredondamento: Aplicar round antes do clipping.
  • Saturação: \(\text{clip}(x) = \max(0, \min(255, x))\).
  • Operações em float: Calcular \(\bar{f}\) e \(m\) em ponto flutuante antes de arredondar o resultado final.
  • \(k = 0\): Sem realce — a saída é idêntica à entrada (exceto pelas bordas).

3.12.10.3 🧠 Fundamentação Teórica

Etapa Operação Descrição
1 \(\bar{f} = f * \frac{1}{9}\mathbf{1}_{3\times3}\) Suavização (baixas frequências)
2 \(m = f - \bar{f}\) Máscara (altas frequências)
3 \(g = \text{clip}(\text{round}(f + k \cdot m))\) Realce ponderado

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

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linha 3: Real \(k\).
  • Linhas seguintes: Elementos da matriz original.

Saída:

  • Matriz realçada \(L \times C\).

3.12.10.5 📌 Exemplos

Entrada Saída Observação
3
3
0.0
100 100 100
100 100 100
100 100 100
100 100 100
100 100 100
100 100 100
k=0: sem realce
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 realçado e saturado
✨ Simulador EP03_10: Unsharp Masking (USM) g = f + k · m

Ajuste o fator de ganho k, observe o pipeline completo de realce (desfocagem, máscara de alta frequência) e passe o mouse sobre o resultado.

Fator de ganho k: k = 1.0
① Imagem Original f Matriz 5×5 pixels
② Desfocado f̄ Média 3 × 3
③ Máscara m m = f − f̄ (Altas Frequências)
④ Resultado g = f + 1.0·m Passe o mouse para inspecionar
Legenda:
Vizinhança 3×3
Pixel Central
Borda (Copiada)
Máscara Positiva/Negativa
Passe o mouse sobre um píxel interno do resultado para rastrear o pipeline completo.
Figura 3.35: Simulador EP03_10: Unsharp Masking (USM)
%%writefile EP03_10.py
# Código Python
Writing EP03_10.py
TestSuite("EP03_10.py").run()
✔️ EP03_10.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP03_10.cases

🔍 Testando Python: EP03_10.py
⚠️ EP03_10.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.