TP6 Projet Final: Manipulation d'image avec les gradients

Le but de ce projet est faire des manipulations sur des images à l'aide du domaine des gradients. Ces manipulations seront aussi appliquées sur des vidéos. Tout le projet est basé sur l'article «GradientShop: A Gradient-Domain Optimization Framework for Image and Video Filtering» de chercheurs de l'université de Washington. Les deux algos implémentés dans mon projet sont le «Saliency Sharpen Filter» et le «Stylize» pour le NDR «non-photorealistic rendering».

Les gradients

Rappelons-nous brièvement ce que sont les gradients et comment ils fonctionnent, ces notions remontent quand même au cours 4. Un gradient est essentiellement un dérivé dans une direction des pixels d'une image. Les images étant en 2D on a besoin de deux dérivés (dans deux directions différentes) pour ne pas perdre les informations d'origine d'une image. Puisque l'on travaille dans un domaine fini (la taille de l'image), on peut effectuer la convolution avec un filtre, ce qui est plus rapide à calculer.

Reconstruction à partir des gradients

Reconstruire l'image à partir des gradients revient à trouver une valeure pour chaque pixel à partir des gradients en x et y. Un gradient étant une dérivé on ne peut pas retrouver la valeur de départ, on doit donc appliqué une correction sur l'image une fois reconstruite.

Une grande difficulté dans la reconstruction est qu'une fois des modifications appliquées sur les gradients il n'est pas possible de trouver une solution parfaite pour chaque pixel. Il faut aussi penser que les erreurs se propagent sur toute les pixels suivants. Voici un exemple simplifié de cette situation:

La solution que j'ai utilisée dans le projet utilise une regression par poisson, ce qui est considéré comme une très bonne méthode pour reconstruire les gradients. Mais mon implémentation n'étant pas parfaite des artéfacts apparaissent dans les images près des bordures. La gestion des NAN, INF+ et INF- produit aussi des pixels qui semblent surexposés et noirs.

Une bonne aproximation pour le pixel en rouge serait 'x + 4'.

Saliency Sharpen Filter

La fonction de rendu plus net donnée dans l'article donne des résultats plus naturels à l'oeil humain. Elle évite de rajouter inutilement du bruit dans l'image et favorise les basses fréquences. Elle est beaucoup plus naturelle qu'un filtre bilatéral sans avoir une implémentation trop compliquée.

Non-Photorealistic Rendering

La fonction de style donné dans l'article donne des images de style BD, elle uniformise les gradients à basses fréquences et conserve les hautes.

Résultats vidéos

©Jean-Daniel Pearson