A Qt-based application to restore images with various inpainting methods.
This is also a reservoir for image inpainting algorithms in C++ (for personal amusement).
Original | Inpainted |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The application is fully packed inside a Docker container, check these instructions to get started.
The app has been tested on the following platforms:
- Pop!_OS 22.04 LTS with Qt 6.8.1, Qt Creator 15.0.0 and GCC 11.4.0.
The app consists of a self-explanatory GUI and it contains a useful Help file. The following table explains the functionality for the GUI icons:
Algorithm | Description | Link / Reference |
---|---|---|
BurgersViscousImageInpainting | Implements the inpainting algorithm based on the viscous Burgers' equation | Burgers Equation |
CahnHilliardImageInpainting | Implements the inpainting algorithm based on the Cahn-Hilliard equation | Cahn-Hilliard Equation |
MaxwellHeavisideImageInpainting | Implements the inpainting algorithm based on the Maxwell-Heaviside equations | Maxwell-Heaviside Theory |
NavierStokesImageInpainting | Executes the image inpainting algorithm from OpenCV based on Navier-Stokes equations | OpenCV Navier-Stokes |
TeleaImageInpainting | Executes the TELEA algorithm from OpenCV | Telea Inpainting |
CriminisiImageInpainting | Implements Criminisi inpainting, based on cheind | Criminisi |
FastDigitalImageInpainting | Implements Fast Digital Image Inpainting, based on this | Paper |
LaplacianImageInpainting | Implements Laplacian Digital Image Inpainting, based on this | Paper |
HarmonicImageInpainting | Heat (Harmonic) Equation Image Inpainting | Carola-Bibiane Schönlieb |
... | ... | ... |
- Mejorar lo de esconder y mostrar las labels. Por ejemplo, unir en un solo el label de mensaje temporal y tipo de imagen.
- Crear GIF de funcionamiento para el README
- Meter estadísticas de PSNR, MSE y SSIM tras hacer el inpainting
- Explicaciones de app e iconos en README. Enlazar el README en hipervínculo desde el About de la aplicación
- Explicaciones someras con ejemplo visuales de qué algoritmo va mejor para qué caso
- Gran problema: cuando se cambia grosor del lápiz, que no afecte al dibujo anterior, o sea, guardar el histórico de tuplas paths-grosor, no solo path.
- No aparece al brush style por defecto en docker, al cambiar el estilo del lápiz, por qué.
- Distribuir la imagen docker de la aplicación en Docker Registry o subirla el .tar a algún lado
- Release the app in AppImage format
- Implementar los algoritmos comentados en este README
- Diseñar un botón de "parar algoritmo" para abortar el procesamiento de CalculationThread
- Añadir el parámetro drawWhites al tipo de ruido; no sé qué problema daba el validador con tipo booleano.
- Inspired by GuidedDenoising