Colorización de imágenes con UNet: consistencia cromática en fotografías de diferentes épocas

Colorización inteligente de fotografías en blanco y negro mediante arquitectura UNet

La colorización automática de imágenes monocromáticas ha evolucionado considerablemente gracias al aprendizaje profundo. Una herramienta basada en la arquitectura UNet destaca por su capacidad para mantener coherencia cromática entre fotografías de un mismo escenario tomadas en distintas décadas, algo que los métodos manuales difícilmente logran.

Resultados en fotografías individuales

Al procesar una fotografía urbana de los años 70, el sistema identificó correctamente cada elemento: la prenda del peatón recibió un tono marrón oscuro con variaciones en los pliegues, el vehículo fue coloreado en verde botella con ruedas metálicas, y los muros de ladrillo mostraron un rojo apagado realista. El cielo adoptó un azul grisáceo coherente con un día nublado, mientras que las ramas secas se tiñeron de marrón oscuro. Los detalles en venatnas y reflejos demostraron que el modelo no aplica colores planos sino que considera propiedades materiales.

Consistencia entre múltiples épocas

El verdadero potencial se evidencia al procesar tres fotografías del mismo banco de un parque, tomadas en 1960, 1980 y 2020:

Elemento Años 60 Años 80 2020 Coherencia
Banco de madera Marrón envejecido Marrón desgastado Marrón renovado Tonalidad base idéntica
Arboleda Verde primaveral Verde intenso Amarillo otoñal Respeto por la estación
Lago Azul brillante Azul grisáceo Azul profundo Variación climática lógica
Camino Gris claro Gris claro Gris claro Idéntico

La vestimenta de cada época recibió colores acordes a las tendencias de cada década: vestidos estampados en los 60, camisetas azules en los 80 y prendas oscuras en la actualidad. Esto confirma que el modelo combina reconocimiento de objetos con contexto histórico.

Escenarios complejos

En una imagen de mercado concurrido, el sistema diferenció tonos de piel según edad y iluminación, distinguió materiales textiles (algodón mate vs. seda brillante), y asignó colores realistas a productos frescos. La coherencia general se mantuvo sin que ningún tono destacara de forma antinatural.

Fundamentos técnicos de UNet

La arquitectura UNet consta de tres componentes fundamentales:

  • Codificador (contracción): Reduce la resolución espacial mediante convoluciones y pooling, extrayendo características semánticas de alto nivel. Aquí el modelo comprende qué elementos componen la escena.
  • Decodificador (expansión): Reconstruye la resolución mediante convoluciones traspuestas, asignando cromía a cada región detectada.
  • Conexiones residuales (skip connections): Enlazan capadas correspondientes entre codificador y decodificador, preservando información espacial fina que evita que los colores se desplacen a zonas incorrectas.

Mecanismo de coherencia cromática

El modelo no memoriza asociaciones fijas de color, sino que aprende relaciones multidimensionales:

  • Correspondencia material-pigmento: madera → marrón, metal → gris, vegetación → verde
  • Contexto escénico: entornos naturales vs. urbanos vs. interiores
  • Influencia temporal: preferencias cromáticas según década
  • Interacción luminica: saturación según condiciones de iluminación

Al analizar una nueva imagen, el sistema evalúa objetos, materiales, contexto escénico, época aproximada y condiciones lumínicas, seleccionando la paleta más probable. Para un mismo escenario, la coincidencia en estos parámetros produce resultados cromáticos consistentes.

Ejecución local

El procesamiento se realiza completamente en la máquina del usuario, garantizando privacidad sobre datos personales. Con una GPU RTX 3060, una imagen de 1024×768 se procesa en aproximadamente 2-3 segundos. Al no depender de servicios externos, permite modificar parámetros internos y automatizar flujos de trabajo.

Configuración y uso

La interfaz web se construye con Streamlit. Para instalar y ejecutar:

# Clonar repositorio e instalar requerimientos
pip install modelscope streamlit torch torchvision opencv-python-headless Pillow

# Lanzar la aplicación web
python -m streamlit run app.py --server.port 8501

La interfaz presenta un panel lateral para cargar imágenes (JPG, JPEG, PNG), un área central con vista comparativa original vs. colorizada, y controles para iniciar el procesamiento y descargar resultados.

Procesamiento por lotes

Para colorizar un directorio completo de imágenes, se puede implementar un script personalizado:

import pathlib
import cv2
import numpy as np
from typing import Optional

class BatchColorizer:
    def __init__(self, src_dir: str, dst_dir: str):
        self.source = pathlib.Path(src_dir)
        self.destination = pathlib.Path(dst_dir)
        self.destination.mkdir(parents=True, exist_ok=True)
        self.extensions = {".jpg", ".jpeg", ".png"}
    
    def _is_valid_image(self, filepath: pathlib.Path) -> bool:
        return filepath.suffix.lower() in self.extensions
    
    def process_all(self, colorize_fn):
        results = {"success": 0, "failed": 0}
        
        for img_file in self.source.iterdir():
            if not self._is_valid_image(img_file):
                continue
                
            try:
                bgr_array = cv2.imread(str(img_file))
                if bgr_array is None:
                    raise ValueError(f"No se pudo leer: {img_file.name}")
                
                colorized = colorize_fn(bgr_array)
                output_name = f"color_{img_file.stem}{img_file.suffix}"
                cv2.imwrite(str(self.destination / output_name), colorized)
                results["success"] += 1
                
            except Exception as err:
                print(f"Error procesando {img_file.name}: {err}")
                results["failed"] += 1
                
        return results

# Uso:
# colorizer = BatchColorizer("./fotos_bw", "./fotos_color")
# stats = colorizer.process_all(mi_funcion_colorizacion)
# print(f"Completadas: {stats}")

Recomendaciones prácticas

Calidad de origen: Las fotografías con buena resolución y contraste producen mejores resultados. Para imágenes deterioradas, conviene realizar restauración previa (eliminación de rayones, corrección de exposición) antes de la colorización. Se recomienda escanear a 300 DPI como mínimo.

Escenas complejas: Cuando una imagen contiene numerosos elementos y algunos reciben colores no deseados, se puede recortar la zona problemática, procesarla independientemente y reintegrarla mediante edición manual.

Ajustes posteriores: Los resultados generados admiten refinamiento en software de edición: aumentar saturación para mayor vivacidad, modificar temperatura de color para tonos cálidos o fríos, o aplicar filtros sepia para efecto vintage.

Limitaciones

El sistema funciona óptimamente con fotografías de resolución media-alta, iluminación moderada y objetos convencionales. Las situaciones que pueden generar resultados subóptimos incluyen: imágenes muy borrosas, iluminación extrema, objetos de colores inusuales que el modelo puede asignar según patrones comunes, y contenido abstracto o surrealista.

Es fundamental recordar que la colorización por IA representa una estimación probabilística, no una reproducción histórica exacta. Para investigación académica o documental, los resultados deben complementarse con verificación documental.

Aplicaciones

Archivo familiar: Transformación de fotografías ancestrales en color, creación de álbumes cronológicos coherentes y recreación visual de entornos pasados para nuevas generaciones.

Creación artística: Fotógrafos pueden capturar en blanco y negro para preservar control de luz y composición, luego aplicar colorización para obtener versiones cromáticas. Permite experimentación con diferentes paletas sobre un mismo negativo.

Investigación y docencia: Aumento de datos para entrenamiento de otros modelos visuales, visualización histórica en estudios de patrimonio, y material didáctico para cursos de historia del arte y tecnología.

Etiquetas: UNet Image Colorization Deep Learning Computer Vision Streamlit

Publicado el 6-30 22:08