Visión por Ordenador: Fundamentos del Procesado de Imágenes, Segmentación y Detección de Bordes
Visión por Ordenador (T1)
Visión por Ordenador: campo de la ciencia de la computación que utiliza algoritmos de IA y ML para procesar imágenes y vídeos digitales. Objetivo: dotar a los ordenadores de la capacidad de comprender e interpretar el mundo visual. Comienza con imágenes o vídeos como entrada, que luego se preprocesan para mejorar la calidad de los datos. Le sigue la extracción de características, que implica obtener información significativa de las imágenes o vídeos. Finalmente, las características extraídas se utilizan para entrenar los algoritmos de visión por ordenador.
Algoritmos de bajo y alto nivel
Algoritmos de bajo nivel: se centran en analizar los píxeles de una imagen para detectar formas y patrones básicos, como líneas y curvas.
Algoritmos de alto nivel: se utilizan para identificar objetos o reconocer estructuras complejas.
PID: Parámetros de Imagen Digital
- Exposición: cantidad de luz captada. La sobreexposición o subexposición implica pérdida de detalle.
- Contraste: diferencia entre zonas claras y oscuras.
- Balance de blancos:
- Automático (AWB): la cámara analiza la escena y estima la temperatura de color para aplicar la corrección automática. Funciona bien en la mayoría de las situaciones.
- Manual: el usuario indica a la cámara un objeto blanco o gris en la escena. La cámara mide la luz que incide sobre ese objeto y la utiliza como referencia para neutralizar los colores de la foto. Este método es el más preciso.
- Nitidez
Procesamiento, Filtros y Preprocesado (T2)
Filtro
Filtro: operación matemática que transforma una imagen modificando los valores de sus píxeles según los de sus vecinos. Recalcula el píxel con una regla basada en su entorno.
Ecualización
Ecualización: forma de contrastar una imagen. Es una especie de normalización de la imagen para distribuir su luminosidad a lo largo del dominio disponible (por ejemplo, 0 a 255 en escala de grises).
Suavizado
Suavizado: técnica de preprocesamiento que consiste en eliminar ruido y variaciones bruscas de intensidad en una imagen, haciendo que los valores de los píxeles se parezcan más a los de sus vecinos (media ponderada). Objetivo: que sea más fácil detectar bordes reales, segmentar o aplicar operaciones morfológicas.
OJO: Si el centro del kernel se coloca sobre un píxel en el borde o esquina de la imagen, el kernel se «sale» de la matriz de la imagen, ya que no tiene suficientes vecinos para completar la operación de convolución. Solución (Padding): agrandar la imagen de entrada añadiendo una capa (o más) de píxeles alrededor, creando los vecinos artificiales que el kernel necesita para operar en los bordes.
Filtrado Gaussiano
El filtrado gaussiano equilibra la reducción de ruido y la preservación de bordes; la sigma determina la dispersión del filtro. Este kernel se convoluciona con la imagen para producir una versión suavizada. Muy eficaz antes de la detección de bordes, reduce los falsos positivos debidos al ruido de alta frecuencia.
Umbralización y Máscaras
Umbralización: técnica que busca clasificar cada píxel de la imagen en una de dos clases: Clase 1 → Objeto (región de interés) y Clase 0 → Fondo (región no relevante). Así, convierte una imagen continua en una binaria.
Máscara: imagen auxiliar (normalizada) que indica qué píxeles se deben procesar o considerar en una operación. Permiten aislar zonas de interés.
OTSU: método automático para determinar el umbral óptimo que separa fondo y primer plano.
Salidas y Métricas (ED)
SALIDAS ED: compara la salida del algoritmo con una referencia (ground-truth).
- FN (Falso Negativo): cuando un borde es detectado por el humano pero no por el algoritmo.
- FP (Falso Positivo): cuando el algoritmo detecta un borde que no existe en la referencia humana.
- Precisión: tasa de bordes seleccionados por el algoritmo que se corresponden con los humanos (ground-truth). Si es baja, el algoritmo detecta muchos bordes y la mayoría son ruido o FP.
- Sensibilidad: tasa de bordes detectados por el humano que son detectados por el algoritmo.
- Medida F: combinación de precisión y sensibilidad.
Morfología Matemática
Morfología matemática: se basa en la teoría de conjuntos y la teoría de retículos. Objetivo: simplificar las estructuras de la imagen, eliminar el ruido y aislar elementos de interés.
- Dilatación: expande el conjunto de píxeles de cierto “objeto” visual. Un píxel de salida es «blanco» si el elemento estructurante, cuando se centra en ese píxel, se solapa al menos un poco con un píxel blanco de la imagen de entrada. Efecto: agranda los objetos, rellena pequeños huecos y une objetos cercanos.
- Erosión: reduce el conjunto de píxeles de primer plano. Un píxel de salida es «blanco» sólo si el elemento estructurante está completamente contenido dentro de la región blanca de la imagen de entrada. Efecto: encoge los objetos, elimina el ruido pequeño (píxeles aislados) y desconecta objetos unidos por puentes delgados.
- Opening y Closing: combinaciones de erosión y dilatación para eliminar ruido o cerrar huecos.
Segmentación de Imagen
Segmentación de imagen: separación de una imagen en objetos o regiones con significado. Partición de su dominio en regiones disjuntas y exhaustivas. Propiedades: irrelevancia mutua, exhaustividad y conectividad interna.
Watershed
Watershed: interpretación topográfica: la intensidad se considera altura; zonas oscuras son valles y zonas brillantes son crestas. La segmentación se obtiene «inundando» la imagen desde los valles. NO se aplica a I_{i,j} directamente, sino a un mapa de gradiente para que los bordes sean crestas.
Pasos principales:
- Ordenar píxeles de menor a mayor (por altura/gradiente).
- Marcadores:
- SIN marcadores: cada mínimo local genera una cuenca → sobresegmentación.
- CON marcadores: interno: cada uno corresponde a una cuenca distinta; externo: define el fondo.
- Inundación: para cada nivel de altura (h) del gradiente se añaden los píxeles (i,j) cuyo valor G_{i,j} = h. Para cada uno de ellos:
- Si ninguno de sus vecinos ya pertenece a una cuenca: se crea una nueva cuenca.
- Si pertenece a una sola cuenca: ese píxel se asigna a dicha cuenca.
- Si pertenece a más de una cuenca: ese píxel se marca como línea de watershed (cresta) y se deja sin asignar (o se asigna con un label especial).
Resultado: conjunto de regiones segmentadas (cuencas).
Markers: método automático que usa la transformada de distancia para encontrar los centros de los objetos y usarlos como marcadores para la segmentación.
K-Means
K-means: se basa en la similitud de características (color, intensidad) para agrupar píxeles. Requiere trabajar con vectores, no con imágenes (matrices): hay que vectorizar o reestructurar la imagen.
Superpíxeles
Superpíxeles: grupos de píxeles adyacentes que comparten características de color o intensidad similares. Su uso reduce drásticamente el número de unidades de procesamiento, lo que acelera los algoritmos posteriores de procesamiento de imágenes y de segmentación de alto nivel.
SLIC
SLIC (Simple Linear Iterative Clustering): algoritmo de agrupamiento de píxeles diseñado específicamente para la segmentación de imágenes. Objetivo: dividir una imagen en regiones visualmente coherentes llamadas superpíxeles. Es una adaptación del K-means, pero opera en un espacio de características de 5 dimensiones (L, a, b, x, y). Utiliza una métrica de distancia modificada para asegurar que los clústeres resultantes sean compactos y continuos espacialmente. Resuelve la falta de coherencia espacial que tiene el K-means estándar en el procesamiento de imágenes.
Implementación Watershed (ejemplo)
distance = ndi.distance_transform_edt(image) # distancia euclidiana
coords = peak_local_max(distance, footprint=np.ones((3, 3)), labels=image)
mask = np.zeros(distance.shape, dtype=bool) # matriz booleana del tamaño de la imagen, inicializada a False (0)
mask[tuple(coords.T)] = True
markers, _ = ndi.label(mask) # conecta los píxeles adyacentes etiquetados como True en la mask y asigna una etiqueta numérica única
labels = watershed(-distance, markers, mask=image)Conceptos y Problemas (T3)
Clasificación píxel a píxel
Pixel a pixel:
- Falta de contexto global: el clasificador no puede ver el objeto completo ni su entorno. Solución (Enfoque de Objeto): clasificar la forma del objeto, no solo el color de un píxel.
- Ruido y variación de color: este enfoque es muy sensible al ruido de adquisición. Solución: descriptores invariantes de forma y textura (por ejemplo, Hu, GLCM) son más robustos.
- Costo computacional: clasificar una imagen de 1000 × 1000 requiere hacer un millón de predicciones. K-means o SVM sobre estas características no escala bien si se hace píxel por píxel. El principal problema es la maldición de la dimensionalidad: lento y requiere muchos datos de entrenamiento.
Clasificar por píxeles es muy sensible a variaciones que no afectan la identidad del objeto, como la traslación: un pequeño desplazamiento cambia radicalmente el vector de entrada. Solución (Extracción de características): en lugar de usar N píxeles, buscamos k descriptores (k << N) que sean informativos, discriminativos y robustos.
Descriptores
La extracción transforma la imagen en un vector numérico compacto y significativo:
- Descriptores de forma y geometría: cuantifican la silueta, el contorno y la estructura geométrica del objeto. La identidad del objeto depende de su forma.
- Momentos de imagen: describen la forma de una región binaria.
- Momentos centrales: aseguran invariancia a traslación.
- Momentos de Hu: siete combinaciones no lineales e invariantes de momentos centrales normalizados, que forman un vector de características de forma.
- Descriptores de textura y contenido local: cuantifican la variación de intensidad y color dentro del objeto segmentado. La identidad del objeto se define por su superficie.
- GLCM: la matriz de co-ocurrencia P(k, l) almacena la frecuencia con la que aparece un par de píxeles con valores de intensidad separados por un vector de desplazamiento. Permite calcular medidas como contraste y homogeneidad.
Problemas de características manuales
Problemas: sesgo humano, escala fija (si el fenómeno es más pequeño se diluye; si es mayor no lo capta). Desacoplamiento: la extracción no se optimiza con el clasificador; es un cuello de botella clásico. Las características no están optimizadas para la frontera de decisión final.
Redes Convolucionales (CNNs)
CNNs: aprenden automáticamente las características óptimas de los datos y se enfocan en propiedades específicas. Son jerárquicas, abarcan desde bordes simples (capas iniciales) hasta representaciones complejas (capas finales). Todo se entrena de forma conjunta. Si el error final es alto, el gradiente se propaga hacia atrás y modifica los filtros de las capas iniciales. Las características se adaptan explícitamente a la tarea.
Transfer Learning
Transfer learning: no se necesita entrenar una CNN desde cero. Se toma una CNN ya entrenada con millones de imágenes para una tarea general de clasificación. Se elimina la capa final de clasificación y se utiliza la capa anterior (la capa de vector de características) como extractor de características. El vector de salida de esta capa es un embedding de alta dimensión que ya contiene representaciones semánticas del objeto.
Detección de Bordes (T1, sección final)
Detección de bordes: clasificar píxeles en «relevantes» o no. Función binaria e() asociada a un algoritmo de detección de bordes.
- Acondicionamiento: smoothing, etc.
- Feature extraction: extraer diferencias lumínicas entre cada píxel y sus vecinos. Se extraen k características; cada una de ellas está asociada a la medición del cambio de intensidad en una dirección particular.
- Agregación: se agrega la información de las diferentes características generadas en la fase de extracción: magnitud y dirección.
- Escalado: cada píxel (i, j) es declarado borde o no de acuerdo a un umbral: > α → «borde», ≤ α → «no borde».
- Adelgazamiento: cuando haya varios píxeles contiguos que experimentan grandes cambios en la luminosidad de la imagen, es necesario elegir sólo uno de ellos como representante del cambio; es decir, hay que adelgazar la respuesta.
Canny
Canny: primer detector de bordes completo. Buen comportamiento en localización (ángulo), unicidad (adelgazamiento) y detección (doble umbral = hysteresis). Usa filtro gaussiano. Cuanto mayor sea el sigma (σ) y el tamaño del kernel, mayor será el suavizado y menor el ruido, pero se podría perder más detalle.
