PDI+VC · Ejercicio de Programación

EP06_06 — 🔴 Mapa de Varianza Local para Detección de Textura

6.14.6 EP06_06 🔴 Mapa de Varianza Local para Detección de Textura

Una fábrica de tejidos necesita inspeccionar rollos de tela en tiempo real, sin disponer de una imagen de referencia — cada rollo presenta pequeñas variaciones naturales. En esta situación, la estrategia presentada en el capítulo consiste en analizar la homogeneidad local de la textura: las regiones uniformes presentan baja varianza de intensidad en pequeñas vecindades, mientras que rasguños, manchas y fallas de fabricación producen aumentos locales de dicha varianza.

En este ejercicio, implementará el núcleo de ese método, calculando la varianza local en una ventana deslizante y generando una máscara binaria que identifica las regiones cuya varianza supera un umbral.

6.14.6.1 📋 Directrices de Implementación

  1. Dimensiones y parámetros: Leer los enteros \(L\), \(C\), \(k\) (tamaño de la ventana, siempre impar) y \(T\) (umbral de varianza).

  2. Imagen: Leer los \(L \times C\) valores enteros de la matriz de textura (intensidades entre 0 y 255).

  3. Tratamiento de bordes: Cuando la ventana sobrepase los límites de la imagen, utilizar replicación de borde, es decir, repetir el valor del píxel válido más cercano.

  4. Media local: Para cada posición \((i,j)\), calcular \[ \mu(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{ventana}} \text{textura}(p,q). \]

  5. Varianza local: Calcular la varianza poblacional de la ventana, \[ \sigma^2(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{ventana}} \left(\text{textura}(p,q)-\mu(i,j)\right)^2, \] o, de forma equivalente, \[ \sigma^2(i,j)=\overline{x^2}-\mu(i,j)^2, \] donde \(\overline{x^2}\) representa la media de los cuadrados de las intensidades.

  6. Redondeo: Redondear la varianza al entero más cercano (round half away from zero, con np.floor(res_norm + 0.5)).

  7. Umbralización: Definir \(\text{máscara}(i,j)=1\) si la varianza redondeada es estrictamente mayor que \(T\); de lo contrario, definir \(\text{máscara}(i,j)=0\).

  8. Salida: Imprimir la máscara binaria resultante.

6.14.6.2 📌 Restricciones Computacionales

  • Replicación de borde: utilizar el valor del píxel válido más cercano siempre que la ventana sobrepase los límites de la imagen.
  • Varianza poblacional: utilizar denominador \(k^2\), nunca \(k^2-1\).
  • Comparación estricta: la máscara debe calcularse utilizando la condición \(\sigma^2_{\text{redondeada}}>T\).
  • Ventana impar: el valor de \(k\) es siempre impar, garantizando un píxel central.

6.14.6.3 🧠 Fundamentación Teórica

Situación Varianza local Interpretación
Región uniforme Baja Intensidades similares en la vecindad.
Región que contiene un defecto Alta La presencia de intensidades distintas aumenta la dispersión de los valores.
Ventana pequeña Mayor sensibilidad a detalles y ruido Detecta alteraciones localizadas.
Ventana grande Respuesta más suave Evidencia defectos mayores, pero reduce la precisión de su localización.

La varianza local mide la dispersión de las intensidades en una vecindad. Las regiones homogéneas presentan baja varianza, mientras que las alteraciones en la textura aumentan esta medida, permitiendo identificar posibles defectos mediante una simple umbralización.

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

Entrada:

  • Línea 1: Entero \(L\).
  • Línea 2: Entero \(C\).
  • Línea 3: Entero \(k\) (impar).
  • Línea 4: Entero \(T\).
  • Siguientes \(L\) líneas: elementos enteros de la matriz de textura.

Salida:

  • Máscara binaria (valores 0 o 1), con \(L\) filas y \(C\) columnas.

6.14.6.5 📌 Ejemplos

Entrada Salida Observación
3
3
3
50
10 10 10
10 10 10
10 90 10
0 0 0
1 1 1
1 1 1
El defecto aumenta la varianza en todas las ventanas que lo contienen.
2
2
3
5
100 100
100 100
0 0
0 0
La textura es uniforme; la varianza es nula en toda la imagen.
🎮 Simulador EP06_06: Variância Local (Detección de Textura) σ² = médía(x²) − médía(x)²
Ajuste el valor del defecto y el umbral T; observe cómo la ventana 3×3 propaga la detección por la vecindad.
Textura (3×3)
Máscara de Defecto
–
Figura 6.26: Simulador EP06_06: Mapa de Variância Local para Detecção de Textura
%%writefile EP06_06.py
# Código Python
Overwriting EP06_06.py
TestSuite("EP06_06.py").run()
✔️ EP06_06.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP06_06.cases

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