Este proyecto implementa algoritmos de escalamiento de imágenes utilizando conceptos fundamentales de álgebra lineal, específicamente transformaciones lineales aplicadas al procesamiento digital de imágenes.
El proyecto consiste en una aplicación interactiva desarrollada con Streamlit que permite:
- Cargar imágenes en formatos PNG, JPG y JPEG
- Aplicar transformaciones de escalamiento usando matrices de transformación lineal
- Visualizar resultados con dos métodos de interpolación diferentes
- Analizar propiedades matemáticas de las transformaciones aplicadas
- Demostrar conceptos de álgebra lineal de forma visual e interactiva
El escalamiento de imágenes se basa en la aplicación de una matriz de transformación lineal:
M = [sx 0 ]
[0 sy]
Donde:
sx: Factor de escalamiento en el eje X (horizontal)sy: Factor de escalamiento en el eje Y (vertical)
Esta transformación cumple con las propiedades de linealidad:
T(u + v) = T(u) + T(v)T(αu) = αT(u)
Proyecto AL/
├── app_streamlit.py # Aplicación web principal
├── escalamiento.py # Clase principal con algoritmos de escalamiento
├── test_escalamiento.py # Script de pruebas y demostraciones
├── requirements.txt # Dependencias del proyecto
├── images/ # Carpeta de imágenes
│ └── imagen_prueba.png # Imagen de prueba generada automáticamente
└── README.md # Este archivo
- Python 3.7 o superior
- pip (gestor de paquetes de Python)
git clone <url-del-repositorio>
cd "Proyecto AL"pip install -r requirements.txtLas dependencias incluyen:
numpy>=1.21.0- Cálculos numéricos y matricespillow>=9.0.0- Procesamiento de imágenesmatplotlib>=3.5.0- Visualización y gráficosstreamlit>=1.12.0- Framework para la aplicación webscipy>=1.7.0- Algoritmos científicos (interpolación)
streamlit run app_streamlit.pyó tambien con
python -m streamlit run app_streamlit.py
Esto abrirá automáticamente tu navegador web en http://localhost:8501 con la interfaz interactiva.
python test_escalamiento.pyEste script ejecuta pruebas automáticas y genera visualizaciones de ejemplo.
- Cargar Imagen: Usa el botón "Sube una imagen" para cargar tu archivo
- Configurar Escalamiento:
- Ajusta el factor de escala X (0.1 - 5.0)
- Ajusta el factor de escala Y (0.1 - 5.0)
- Selecciona el método de interpolación:
- Vecino más cercano: Más rápido, resultado pixelado
- Interpolación bilineal: Mejor calidad, más suave
- Aplicar Transformación: Haz clic en "🔄 Aplicar Escalamiento"
- Explorar Resultados:
- Compara imagen original vs escalada
- Ve el análisis matemático detallado
- Visualiza la transformación geométrica
- 📈 Análisis Matemático: Muestra la matriz de transformación, determinante y propiedades
- 🎨 Visualización de Transformación: Representa gráficamente cómo se transforma un cuadrado unitario
- 📊 Métricas: Información sobre dimensiones, cambio de área y propiedades ortogonales
Clase principal EscalamientoImagen con métodos:
escalar_manual(sx, sy): Implementación manual usando vecino más cercanoescalar_interpolacion_bilineal(sx, sy): Escalamiento con interpolación suaveanalizar_propiedades(sx, sy): Análisis matemático de la transformacióndemostracion_visual(sx, sy): Visualización comparativa
Interfaz web interactiva que incluye:
- Carga de archivos de imagen
- Controles deslizantes para factores de escala
- Selección de métodos de interpolación
- Visualización en tiempo real
- Análisis matemático expandible
Script de pruebas que incluye:
- Generación automática de imagen de prueba
- Pruebas con diferentes factores de escala
- Verificación de propiedades matemáticas
- Visualización de resultados
- Ventajas: Rápido, preserva valores originales exactos
- Desventajas: Resultado pixelado, especialmente al ampliar
- Uso recomendado: Imágenes con bordes definidos, escalamiento rápido
- Ventajas: Resultado más suave, mejor calidad visual
- Desventajas: Más lento computacionalmente
- Uso recomendado: Fotografías, escalamiento de alta calidad
escalador = EscalamientoImagen('mi_imagen.jpg')
imagen_escalada = escalador.escalar_manual(2.0, 2.0) # Doble tamañoimagen_escalada = escalador.escalar_manual(3.0, 0.5) # Más ancho, menos altoimagen_escalada = escalador.escalar_interpolacion_bilineal(0.5, 0.5) # Mitad del tamaño- Transformaciones Lineales: Aplicación de matrices a vectores de posición
- Determinante: Interpretación como factor de cambio de área
- Linealidad: Verificación de las propiedades fundamentales
- Transformaciones Ortogonales: Cuando sx = sy (preserva ángulos)
- Autovalores: Los factores de escala son los autovalores de la matriz
- Memoria: Imágenes muy grandes pueden consumir mucha RAM
- Rendimiento: La interpolación bilineal es más lenta para imágenes grandes
- Calidad: El escalamiento hacia arriba puede introducir artefactos
- Formato: Solo soporta imágenes RGB y escala de grises
- Álgebra Lineal: Transformaciones matriciales
- Procesamiento Digital de Imágenes: Interpolación
- Análisis Numérico: Métodos de interpolación
- Geometría Analítica: Transformaciones en el plano
Este proyecto es de uso educativo y está disponible para fines académicos.
Desarrollado como proyecto educativo para demostrar aplicaciones prácticas de álgebra lineal en procesamiento de imágenes.