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

EP03_08 — 🧭 Gradiente de Sobel: Gx e Gy

3.12.8 EP03_08 🧭 Gradiente de Sobel: Gx e Gy

Em robôs exploradores de Marte (como o Perseverance), a detecção de obstáculos é realizada em tempo real por câmeras estereoscópicas. O operador de Sobel calcula o gradiente direcional da cena e é utilizado no algoritmo de detecção de bordas para identificar rochas, fissuras e desníveis do terreno que possam comprometer a navegação.

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

3.12.8.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas).
  2. Dados: Ler a matriz \(f\).
  3. Gx e Gy: Para cada pixel interno \((i,j)\) com \(1 \le i < L-1\), \(1 \le j < C-1\):

\[G_x(i,j) = [f(i-1,j+1) + 2f(i,j+1) + f(i+1,j+1)] - [f(i-1,j-1) + 2f(i,j-1) + f(i+1,j-1)]\]

\[G_y(i,j) = [f(i+1,j-1) + 2f(i+1,j) + f(i+1,j+1)] - [f(i-1,j-1) + 2f(i-1,j) + f(i-1,j+1)]\]

  1. Magnitude: \(|\nabla f(i,j)| = \text{clip}(\text{round}(\sqrt{G_x^2 + G_y^2}))\).
  2. Borda: Pixels de borda recebem magnitude 0.
  3. Saída: Exibir a magnitude \(L \times C\).

3.12.8.2 📌 Restrições Computacionais

  • Arredondamento: Aplicar round antes de converter para inteiro.
  • Saturação: \(\text{clip}(x) = \max(0, \min(255, x))\).
  • Raiz quadrada: Usar \(\sqrt{G_x^2 + G_y^2}\) (não a aproximação \(|G_x| + |G_y|\)).

3.12.8.3 🧠 Fundamentação Teórica

Operador Detecta Coeficientes diagonais
\(G_x\) Bordas verticais \(\pm 1\)
\(G_y\) Bordas horizontais \(\pm 1\)
\(|\nabla f|\) Todas as bordas Combinado

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

Entrada:

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

Saída:

  • Magnitude do gradiente, matriz \(L \times C\).

3.12.8.5 📌 Exemplos

Entrada Saída Observação
3
3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
Imagem nula: gradiente zero
3
3
0 0 255
0 0 255
0 0 255
0 0 0
0 255 0
0 0 0
Borda vertical central: Gx alto
🧭 Simulador EP03_08: Gradiente de Sobel (Gx e Gy) |∇f| = √(Gx² + Gy²)

Analise a decomposição horizontal (Gx) e vertical (Gy) do operador de Sobel e passe o mouse sobre os pixels da magnitude para inspecionar a vizinhança 3×3.

Kernels de Sobel:
−1
0
+1
−2
0
+2
−1
0
+1
Gx
−1
−2
−1
0
0
0
+1
+2
+1
Gy
Imagem Original f Matriz 5×5 pixels
Magnitude |∇f| √(Gx² + Gy²)
Gx — Gradiente Horizontal Azul = Negativo · Branco = Zero · Azul Vivo = Positivo
Gy — Gradiente Vertical Âmbar = Negativo · Branco = Zero · Âmbar Vivo = Positivo
Legenda:
Vizinhança 3×3 Inspecionada
Pixel Central
Borda (Forçada a 0)
Passe o mouse sobre um pixel interno da magnitude para ver a decomposição Gx e Gy.
Figura 3.33: Simulador EP03_08: Gradiente de Sobel (Gx e Gy)
%%writefile EP03_08.py
# Código Python
Writing EP03_08.py
TestSuite("EP03_08.py").run()
✔️ EP03_08.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP03_08.cases

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