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

EP04_08 — 🌋 Gradiente Morfológico, Top-hat e Black-hat

4.9.8 EP04_08 🌋 Gradiente Morfológico, Top-hat e Black-hat

Em inspeção automática de placas de circuito, três perguntas aparecem o tempo todo: onde estão as bordas dos componentes? Quais detalhes claros e pequenos (como pontos de solda) se destacam do fundo? Quais reentrâncias escuras (como fissuras) o fundo esconde? Um único par erosão/dilatação responde às três: o gradiente morfológico evidencia contornos, o top-hat revela picos estreitos, e o black-hat revela vales estreitos — três ferramentas, uma só vizinhança. Ver na Figura 4.37 uma simulação deste EP.

4.9.8.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 \(f\) (a imagem original, em tons de cinza), linha a linha.
  5. Operadores de base: Calcular, exatamente como nos EPs 04_03 a 04_06:
    • \(d = f \oplus B\) (dilatação),
    • \(e = f \ominus B\) (erosão),
    • \(\text{abertura} = e \oplus B\),
    • \(\text{fechamento} = d \ominus B\).
  6. Gradiente morfológico: \(\text{grad}(y,x) = d(y,x) - e(y,x)\).
  7. Top-hat: \(\text{tophat}(y,x) = f(y,x) - \text{abertura}(y,x)\).
  8. Black-hat: \(\text{blackhat}(y,x) = \text{fechamento}(y,x) - f(y,x)\).
  9. Saída: Exibir, nesta ordem, as três matrizes completas: gradiente, top-hat, black-hat.

4.9.8.2 📌 Restrições Computacionais

  • Sem padding em nenhuma etapa intermediária — dilatação, erosão, abertura e fechamento seguem as mesmas regras de vizinhança dos EPs anteriores.
  • Não há clipping: as três saídas podem conter qualquer valor inteiro (o gradiente é sempre \(\geq 0\), mas top-hat e black-hat também).
  • Reaproveitamento: \(d\) e \(e\) devem ser calculados uma única vez e reaproveitados para montar abertura, fechamento e gradiente.

4.9.8.3 🧠 Fundamentação Teórica

Operador Fórmula O que revela
Gradiente \(d - e\) Bordas: zero em regiões planas, alto nas transições
Top-hat \(f - \text{abertura}(f)\) Elementos claros e finos, menores que \(B\)
Black-hat \(\text{fechamento}(f) - f\) Elementos escuros e finos, menores que \(B\)

4.9.8.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 da matriz \(f\).

Saída:

  • Matriz gradiente em \(L\) linhas e \(C\) colunas.
  • Matriz top-hat em \(L\) linhas e \(C\) colunas.
  • Matriz black-hat em \(L\) linhas e \(C\) colunas.

4.9.8.5 📌 Exemplos

Entrada Saída Observação
9
9
3
3
1 1 1
1 1 1
1 1 1
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 80 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 2 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
(gradiente: halo \(3\times3=70\) em torno de \((2,2)\) e halo \(3\times3=8\) em torno de \((6,6)\), resto \(0\))
(top-hat: único \(70\) em \((2,2)\), resto \(0\))
(black-hat: único \(8\) em \((6,6)\), resto \(0\))
Pico isolado vira top-hat; vale isolado vira black-hat; ambos aparecem no gradiente
🌋 Simulador EP04_08: Gradiente / Top-hat / Black-hat 3 operadores, 1 vizinhança

Adicione picos ou vales na matriz f e observe o comportamento simultâneo dos operadores de gradiente, top-hat e black-hat.

f (Entrada)
Gradiente
Top-hat
Black-hat
Figura 4.37: Simulador EP04_08: Gradiente Morfológico, Top-hat e Black-hat
%%writefile EP04_08.cpp
// sua solução
Overwriting EP04_08.cpp
TestSuite("EP04_08.cpp").run()
✔️ EP04_08.cases já existe em casos/
📋 4 caso(s) carregado(s) de casos/EP04_08.cases

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