Aporte Principal - Semana 2: Uso de filtros en el tratamiento de imágenes

Autor: Alexander Oviedo Fadul | Grupo 10

¡Hola a todos, profesor Félix y compañeros de curso! En representación de mi equipo de trabajo (Grupo 10), conformado por María Fernanda, Neheman Samir, William Andrés, Yesith y mi persona, procedo a realizar el aporte principal.

A decir verdad, cuando inicié con el desarrollo del Ecosistema MARDUK para la Rama Judicial, no dimensionaba lo verdaderamente complejo que resulta el procesamiento visual primario para una máquina. Solemos pensar que la Inteligencia Artificial hace "magia" al identificar un objeto, pero la realidad matemática detrás de esa magia recae directamente en el procesamiento de señales bidimensionales.

1. Relevancia del procesamiento de imágenes

La relevancia del procesamiento de imágenes radica en que es el traductor fundamental entre el mundo analógico (continuo y caótico) y el modelo de decisión de la máquina (discreto y estructurado). Como bien anotaba el profesor Gutiérrez en clase, al final estamos lidiando con frecuencias y matrices numéricas. Sin un procesamiento previo (como reducción de ruido o realce de contrastes), cualquier modelo de visión por computador, por más sofisticado que sea, fracasaría al ser alimentado con datos basura o saturados. Es el equivalente a intentar leer un documento legal con las gafas empañadas; no importa cuánto derecho sepas, si no ves bien la letra, la interpretación será errónea.

2. Justificación de los filtros y Clasificador Hipotético

Para ilustrar la pertinencia de los filtros, me apoyaré en un caso real de mi portafolio: el SIRFAJ (Sistema Inteligente de Reconocimiento Facial para Audiencias Judiciales). Durante su implementación preliminar, recuerdo que el modelo fallaba estrepitosamente identificando a los participantes de la audiencia cuando la iluminación de la sala era deficiente; confundía las sombras de los estrados con los contornos de los rostros. Esto podría estar equivocado si lo analizamos solo desde la arquitectura de la red neuronal, pero el verdadero problema era la entrada de los datos.

Para mitigar esto, utilizamos filtros convolucionales para la extracción de características primarias antes de pasar la imagen al modelo profundo:

Secuencia 1 - Aplicación Técnica (Tamaño de Kernel: 3x3)
A continuación, adjunto la secuencia de los 5 filtros aplicados a nuestra imagen de prueba utilizando un Kernel matemático de 3x3. Como se puede observar, este tamaño de ventana pequeña logra capturar detalles finos, aunque es más susceptible al ruido que kernels más amplios.

[NOTA: Insertar aquí la captura de pantalla de los resultados de la carpeta 'resultados_k3']

El modelo funcionó. Pero no como esperábamos inicialmente. Tuvimos que calibrar meticulosamente el tamaño del Kernel (variable que mis compañeros del Grupo 10, como Neheman, William, María Fernanda y Yesith abordarán en sus respectivas secuencias) para equilibrar la pérdida de información en los bordes frente al nivel de detalle extraído.

Dejo también el extracto del código Python (usando la librería OpenCV) con el que automaticé la extracción matemática para esta prueba:

# Extracto de generación del Filtro Laplaciano (Detección de Bordes) para SIRFAJ
import cv2
import numpy as np

k = 3 # Tamaño del Kernel
gray_img = cv2.imread('imagen_audiencia.jpg', cv2.IMREAD_GRAYSCALE)

# Detección de Bordes (Laplaciano aproximado)
kernel_edges = -np.ones((k, k), np.float32)
kernel_edges[k//2, k//2] = (k * k) - 1

res_edges = cv2.filter2D(gray_img, -1, kernel_edges)
cv2.imwrite("borde_extraido.jpg", res_edges)
Referencias Bibliográficas: