PDI+VC · Ejercicio de Programación

EP04_05 — 🧹 Apertura Morfológica (Eliminación de Ruido)

4.20.5 EP04_05 🧹 Apertura Morfológica (Eliminación de Ruido)

Las imágenes capturadas por sensores de bajo costo, como los de drones agrícolas, suelen venir salpicadas de pequeños puntos de ruido — píxeles aislados que no representan nada real. Aplicar erosión seguida de dilatación con el mismo elemento estructurante produce la apertura: esta “limpia” puntos y protuberancias finas, pero devuelve al objeto principal prácticamente su tamaño original. Es la combinación clásica utilizada en preprocesamiento de imágenes de satélite antes de cualquier conteo de área plantada. Ver en Figura 4.34 una simulación de este EP.

4.20.5.1 📋 Directrices de Implementación

  1. Dimensiones de la imagen: Leer los enteros \(L\) (filas) y \(C\) (columnas) de \(f\).
  2. Dimensiones de \(B\): Leer los enteros \(L_B\) (filas) y \(C_B\) (columnas) del elemento estructurante.
  3. Elemento estructurante: Leer la matriz \(B\) con valores \(0\) o \(1\), fila a fila.
  4. Datos: Leer la matriz binaria \(f\) (valores \(0\) o \(1\)), fila a fila.
  5. Erosión: Calcular \(e = f \ominus B\), usando exactamente el algoritmo del EP04_04 (sin reflejar \(B\), sin padding).
  6. Dilatación: Calcular \(g = e \oplus B\), usando exactamente el algoritmo del EP04_03 (reflejando \(B\), sin padding) — pero ahora aplicado sobre \(e\), no sobre \(f\).
  7. Salida: Mostrar la matriz resultante \(g\) (la apertura de \(f\) por \(B\)) con dimensiones \(L \times C\).

4.20.5.2 📌 Restricciones Computacionales

  • Orden fijo: Es siempre erosión primero, luego dilatación — el orden inverso define otro operador (cierre, del próximo EP).
  • Mismo \(B\): El elemento estructurante utilizado en la erosión y en la dilatación debe ser idéntico.
  • Sin padding en ninguna de las dos etapas.

4.20.5.3 🧠 Fundamentación Teórica

Concepto Significado Impacto Visual
Antiextensividad \(g \subseteq f\) siempre La apertura nunca crea un píxel nuevo, solo elimina
Idempotencia \(\text{apertura}(\text{apertura}(f)) = \text{apertura}(f)\) Aplicar de nuevo no cambia nada más
Puntos aislados Menores que \(B\) Son completamente eliminados
Núcleo del objeto Mayor que \(B\) Se recupera casi intacto mediante la dilatación final

4.20.5.4 📦 Especificación de Entrada y Salida (VPL)

Entrada:

  • Línea 1: Entero \(L\).
  • Línea 2: Entero \(C\).
  • Línea 3: Entero \(L_B\).
  • Línea 4: Entero \(C_B\).
  • Siguientes \(L_B\) líneas: elementos enteros (\(0\) o \(1\)) de la matriz \(B\).
  • Siguientes \(L\) líneas: elementos enteros (\(0\) o \(1\)) de la matriz \(f\).

Salida:

  • Matriz resultante en \(L\) filas y \(C\) columnas, valores \(0\) o \(1\).

4.20.5.5 📌 Ejemplos

Entrada Salida Observación
7
7
3
3
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0 0
0 1 0 0 0 1 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 1 0
0 0 0 0 0 0 0
0 1 0 0 0 0 1
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Los puntos aislados y la protuberancia fina desaparecen; el cuadrado central sobrevive
🧹 Simulador EP04_05: Apertura Morfológica g = (f ⊖ B) ⊕ B

Haz clic en las celdas de f original para encender o apagar píxeles (¡crea tu propio ruido de fondo!) y ajusta el tamaño del elemento estructurante B.


3×3
f Original (Clicable)
e = f ⊖ B (Erosión)
g = e ⊕ B (Apertura)
Figura 4.34: Simulador EP04_05: Apertura Morfológica (g = (f ⊖ B) ⊕ B)
%%writefile EP04_05.py
# Código Python
Overwriting EP04_05.py
TestSuite("EP04_05.py").run()
✔️ EP04_05.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP04_05.cases

🔍 Probando Python: EP04_05.py
⚠️ EP04_05.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.