TNI+VO · Exercice de Programmation

EP03_08 — 🧭 Gradient de Sobel : Gx et Gy

3.12.8 EP03_08 🧭 Gradient de Sobel : Gx et Gy

Dans les robots explorateurs de Mars (comme Perseverance), la détection d’obstacles est réalisée en temps réel par des caméras stéréoscopiques. L’opérateur de Sobel calcule le gradient directionnel de la scène et est utilisé dans l’algorithme de détection de contours pour identifier les roches, les fissures et les dénivelés du terrain qui pourraient compromettre la navigation.

Voir dans Figure 3.33 une simulation de cet EP.

3.12.8.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
  2. Données : Lire la matrice \(f\).
  3. Gx et Gy : Pour chaque pixel interne \((i,j)\) avec \(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. Bordure : Les pixels de bordure reçoivent une magnitude de 0.
  3. Sortie : Afficher la magnitude \(L \times C\).

3.12.8.2 📌 Contraintes computationnelles

  • Arrondi : Appliquer round avant de convertir en entier.
  • Saturation : \(\text{clip}(x) = \max(0, \min(255, x))\).
  • Racine carrée : Utiliser \(\sqrt{G_x^2 + G_y^2}\) (pas l’approximation \(|G_x| + |G_y|\)).

3.12.8.3 🧠 Fondement théorique

Opérateur Détecte Coefficients diagonaux
\(G_x\) Contours verticaux \(\pm 1\)
\(G_y\) Contours horizontaux \(\pm 1\)
\(|\nabla f|\) Tous les contours Combiné

3.12.8.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Lignes suivantes : Éléments de la matrice.

Sortie :

  • Magnitude du gradient, matrice \(L \times C\).

3.12.8.5 📌 Exemples

Entrée Sortie Observation
3
3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
Image nulle : gradient zéro
3
3
0 0 255
0 0 255
0 0 255
0 0 0
0 255 0
0 0 0
Contour vertical central : Gx élevé
🧭 Simulateur EP03_08 : Gradient de Sobel (Gx et Gy) |∇f| = √(Gx² + Gy²)

Analysez la décomposition horizontale (Gx) et verticale (Gy) de l'opérateur de Sobel et survolez les pixels de la magnitude pour inspecter le voisinage 3×3.

Noyaux de Sobel :
−1
0
+1
−2
0
+2
−1
0
+1
Gx
−1
−2
−1
0
0
0
+1
+2
+1
Gy
Image originale f Matrice 5×5 pixels
Magnitude |∇f| √(Gx² + Gy²)
Gx — Gradient horizontal Bleu = Négatif · Blanc = Zéro · Bleu vif = Positif
Gy — Gradient vertical Ambre = Négatif · Blanc = Zéro · Ambre vif = Positif
Légende :
Voisinage 3×3 inspecté
Pixel central
Bord (forcé à 0)
Survolez un pixel interne de la magnitude pour voir la décomposition Gx et Gy.
Figure 3.33: Simulateur EP03_08 : Gradient de Sobel (Gx et Gy)
%%writefile EP03_08.py
# Code Python
Overwriting EP03_08.py
TestSuite("EP03_08.py").run()
✔️ EP03_08.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP03_08.cases

🔍 Test de Python : EP03_08.py
⚠️ EP03_08.py : fichier vide (moins de 3 lignes). Tests ignorés.