Analice la descomposición horizontal (Gx) y vertical (Gy) del operador de Sobel y pase el mouse sobre los píxeles de la magnitud para inspeccionar la vecindad 3×3.
3.12.8 EP03_08 🧭 Gradiente de Sobel: Gx y Gy
En robots exploradores de Marte (como el Perseverance), la detección de obstáculos se realiza en tiempo real mediante cámaras estereoscópicas. El operador de Sobel calcula el gradiente direccional de la escena y se utiliza en el algoritmo de detección de bordes para identificar rocas, fisuras y desniveles del terreno que puedan comprometer la navegación.
Ver en Figura 3.33 una simulación de este EP.
3.12.8.1 📋 Directrices de Implementación
- Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas).
- Datos: Leer la matriz \(f\).
- Gx y Gy: Para cada píxel 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)]\]
- Magnitud: \(|\nabla f(i,j)| = \text{clip}(\text{round}(\sqrt{G_x^2 + G_y^2}))\).
- Borde: Los píxeles de borde reciben magnitud 0.
- Salida: Mostrar la magnitud \(L \times C\).
3.12.8.2 📌 Restricciones Computacionales
- Redondeo: Aplicar
roundantes de convertir a entero. - Saturación: \(\text{clip}(x) = \max(0, \min(255, x))\).
- Raíz cuadrada: Usar \(\sqrt{G_x^2 + G_y^2}\) (no la aproximación \(|G_x| + |G_y|\)).
3.12.8.3 🧠 Fundamentación Teórica
| Operador | Detecta | Coeficientes diagonales |
|---|---|---|
| \(G_x\) | Bordes verticales | \(\pm 1\) |
| \(G_y\) | Bordes horizontales | \(\pm 1\) |
| \(|\nabla f|\) | Todos los bordes | Combinado |
3.12.8.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: Entero \(L\).
- Línea 2: Entero \(C\).
- Líneas siguientes: Elementos de la matriz.
Salida:
- Magnitud del gradiente, matriz \(L \times C\).
3.12.8.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 3 3 0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 0 |
Imagen nula: gradiente cero |
| 3 3 0 0 255 0 0 255 0 0 255 |
0 0 0 0 255 0 0 0 0 |
Borde vertical central: Gx alto |
🧭 Simulador EP03_08: Gradiente de Sobel (Gx y Gy)
|∇f| = √(Gx² + Gy²)
Kernels de Sobel:
−1
0
+1
−2
0
+2
−1
0
+1
−1
−2
−1
0
0
0
+1
+2
+1
Imagen Original f
Matriz 5×5 píxeles
Magnitud |∇f|
√(Gx² + Gy²)
Gx — Gradiente Horizontal
Azul = Negativo · Blanco = Cero · Azul Vivo = Positivo
Gy — Gradiente Vertical
Ámbar = Negativo · Blanco = Cero · Ámbar Vivo = Positivo
Leyenda:
Vecindad 3×3 Inspeccionada
Píxel Central
Borde (Forzado a 0)
Pase el mouse sobre un píxel interno de la magnitud para ver la descomposición Gx y Gy.
%%writefile EP03_08.cpp
// your solutionOverwriting EP03_08.cpp
TestSuite("EP03_08.cpp").run()✔️ EP03_08.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP03_08.cases
🔍 Probando C++: EP03_08.cpp
⚠️ EP03_08.cpp: archivo vacío (menos de 3 líneas). Pruebas omitidas.