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.