03 / Final degree project · 2024
NostalgIA
Restoring damaged historical photographs
A full experimentation pipeline that simulates grayscale, tears and scratches on CelebA images, compares GAN and U-Net approaches, and documents why U-Net became the final restoration architecture. Graded 10/10 at ETSISI, Universidad Politécnica de Madrid.
- Python
- U-Net / GAN
- TensorFlow / Keras
- OpenCV
- CelebA
- Context
- Final degree project — ETSISI, UPM · June 2024
- Grade
- 10/10 · Advisor: Alberto Díaz Álvarez
- Dataset
- CelebA — ~210,000 face images
Restorations
3 visuals



How it works
Approach
Simulate the damage
Real damaged/undamaged photo pairs don't exist at scale, so grayscale, tears (Perlin noise, two thresholds) and scratches (Perlin + Canny) are synthesized on clean CelebA images.
Try the GAN first
A generator reconstructed damaged images against a discriminator. Promising on colorization, but it struggled with tears and scratches even after tuning.
Ship the U-Net
The damaged image goes in, the repaired image comes out. U-Net met the project goals and became the final architecture, documented end to end in the report.
See the proof
behind the case.