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

EP04_06 — 🧩 Fechamento Morfológico (Preenchimento de Falhas)

4.9.6 EP04_06 🧩 Fechamento Morfológico (Preenchimento de Falhas)

Em digitalização de impressões digitais, sulcos da pele às vezes ficam interrompidos por sujeira ou ressecamento, criando pequenas falhas na curva contínua que deveria existir. O fechamento — dilatação seguida de erosão com o mesmo elemento estruturante — é o operador dual da abertura: ele preenche buracos pequenos e reentrâncias estreitas, sem alterar significativamente o contorno externo do objeto. É a etapa padrão antes de extrair o esqueleto de uma impressão digital. Ver na Figura 4.35 uma simulação deste EP.

4.9.6.1 📋 Diretrizes de Implementação

  1. Dimensões da imagem: Ler os inteiros \(L\) (linhas) e \(C\) (colunas) de \(f\).
  2. Dimensões de \(B\): Ler os inteiros \(L_B\) (linhas) e \(C_B\) (colunas) do elemento estruturante.
  3. Elemento estruturante: Ler a matriz \(B\) com valores \(0\) ou \(1\), linha a linha.
  4. Dados: Ler a matriz binária \(f\) (valores \(0\) ou \(1\)), linha a linha.
  5. Dilatação: Calcular \(d = f \oplus B\), usando exatamente o algoritmo do EP04_03 (refletindo \(B\), sem padding).
  6. Erosão: Calcular \(g = d \ominus B\), usando exatamente o algoritmo do EP04_04 (sem refletir \(B\), sem padding) — agora aplicado sobre \(d\), não sobre \(f\).
  7. Saída: Exibir a matriz resultante \(g\) (o fechamento de \(f\) por \(B\)) com dimensões \(L \times C\).

4.9.6.2 📌 Restrições Computacionais

  • Ordem fixa: É sempre dilatação primeiro, depois erosão — a ordem inversa é a abertura do EP04_05.
  • Mesmo \(B\): O elemento estruturante usado na dilatação e na erosão deve ser idêntico.
  • Sem padding em nenhuma das duas etapas.

4.9.6.3 🧠 Fundamentação Teórica

Conceito Significado Impacto Visual
Extensividade \(g \supseteq f\) sempre O fechamento nunca remove pixel, só adiciona
Idempotência \(\text{fecha}(\text{fecha}(f)) = \text{fecha}(f)\) Aplicar de novo não muda mais nada
Buracos pequenos Menores que \(B\) São completamente preenchidos
Dualidade \(\text{fecha}(f) = \overline{\text{abre}(\bar f)}\) É a abertura aplicada ao “negativo” da imagem

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

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linha 3: Inteiro \(L_B\).
  • Linha 4: Inteiro \(C_B\).
  • Próximas \(L_B\) linhas: elementos inteiros (\(0\) ou \(1\)) da matriz \(B\).
  • Próximas \(L\) linhas: elementos inteiros (\(0\) ou \(1\)) da matriz \(f\).

Saída:

  • Matriz resultante em \(L\) linhas e \(C\) colunas, valores \(0\) ou \(1\).

4.9.6.5 📌 Exemplos

Entrada Saída Observação
8
8
3
3
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 0 1 1 0 0
0 0 1 1 0 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
Os dois buracos internos não-adjacentes são totalmente preenchidos
🧩 Simulador EP04_06: Fechamento Morfológico g = (f ⊕ B) ⊖ B

Clique nas células de f original para acender ou apagar pixels (preencha buracos internos!) e ajuste o tamanho do elemento estruturante B.


3×3
f Original (Clicável)
d = f ⊕ B (Dilatação)
g = d ⊖ B (Fechamento)
Figura 4.35: Simulador EP04_06: Fechamento Morfológico (g = (f ⊕ B) ⊖ B)
%%writefile EP04_06.py
# Código Python
Writing EP04_06.py
TestSuite("EP04_06.py").run()
✔️ EP04_06.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP04_06.cases

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