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.
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
- Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
- Données : Lire la matrice \(f\).
- 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)]\]
- Magnitude : \(|\nabla f(i,j)| = \text{clip}(\text{round}(\sqrt{G_x^2 + G_y^2}))\).
- Bordure : Les pixels de bordure reçoivent une magnitude de 0.
- Sortie : Afficher la magnitude \(L \times C\).
3.12.8.2 📌 Contraintes computationnelles
- Arrondi : Appliquer
roundavant 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²)
Noyaux de Sobel :
−1
0
+1
−2
0
+2
−1
0
+1
−1
−2
−1
0
0
0
+1
+2
+1
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.
%%writefile EP03_08.py
# Code PythonOverwriting 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.