EDI+VA · Esercizio di Programmazione

EP03_08 — 🧭 Gradiente di Sobel: Gx e Gy

3.12.8 EP03_08 🧭 Gradiente di Sobel: Gx e Gy

Nei robot esploratori di Marte (come il Perseverance), il rilevamento degli ostacoli viene eseguito in tempo reale da telecamere stereoscopiche. L’operatore di Sobel calcola il gradiente direzionale della scena e viene utilizzato nell’algoritmo di rilevamento dei bordi per identificare rocce, crepe e dislivelli del terreno che potrebbero compromettere la navigazione.

Vedi in Figura 3.33 una simulazione di questo EP.

3.12.8.1 📋 Linee guida di implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne).
  2. Dati: Leggere la matrice \(f\).
  3. Gx e Gy: Per ogni pixel interno \((i,j)\) con \(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. Magnitudo: \(|\nabla f(i,j)| = \text{clip}(\text{round}(\sqrt{G_x^2 + G_y^2}))\).
  2. Bordo: I pixel di bordo ricevono magnitudo 0.
  3. Output: Visualizzare il magnitudo \(L \times C\).

3.12.8.2 📌 Vincoli computazionali

  • Arrotondamento: Applicare round prima di convertire in intero.
  • Saturazione: \(\text{clip}(x) = \max(0, \min(255, x))\).
  • Radice quadrata: Usare \(\sqrt{G_x^2 + G_y^2}\) (non l’approssimazione \(|G_x| + |G_y|\)).

3.12.8.3 🧠 Fondamenti teorici

Operatore Rileva Coefficienti diagonali
\(G_x\) Bordi verticali \(\pm 1\)
\(G_y\) Bordi orizzontali \(\pm 1\)
\(|\nabla f|\) Tutti i bordi Combinato

3.12.8.4 📦 Specifica di input e output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Righe successive: Elementi della matrice.

Output:

  • Magnitudo del gradiente, matrice \(L \times C\).

3.12.8.5 📌 Esempi

Input Output Osservazione
3
3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
Immagine nulla: gradiente zero
3
3
0 0 255
0 0 255
0 0 255
0 0 0
0 255 0
0 0 0
Bordo verticale centrale: Gx alto
🧭 Simulatore EP03_08: Gradiente di Sobel (Gx e Gy) |∇f| = √(Gx² + Gy²)

Analizza la scomposizione orizzontale (Gx) e verticale (Gy) dell'operatore di Sobel e passa il mouse sui pixel della magnitudine per ispezionare l'intorno 3×3.

Kernel di Sobel:
−1
0
+1
−2
0
+2
−1
0
+1
Gx
−1
−2
−1
0
0
0
+1
+2
+1
Gy
Immagine Originale f Matrice 5×5 pixel
Magnitudine |∇f| √(Gx² + Gy²)
Gx — Gradiente Orizzontale Blu = Negativo · Bianco = Zero · Blu Vivo = Positivo
Gy — Gradiente Verticale Ambra = Negativo · Bianco = Zero · Ambra Viva = Positivo
Legenda:
Intorno 3×3 Ispezionato
Pixel Centrale
Bordo (Forzato a 0)
Passa il mouse su un pixel interno della magnitudine per vedere la scomposizione Gx e Gy.
Figura 3.33: Simulatore EP03_08: Gradiente di Sobel (Gx e Gy)
%%writefile EP03_08.py
# Codice Python
Overwriting EP03_08.py
TestSuite("EP03_08.py").run()
✔️ EP03_08.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP03_08.cases

🔍 Test di Python: EP03_08.py
⚠️ EP03_08.py: file vuoto (meno di 3 righe). Test saltati.