TP2 Découpage d'images
Par Pier-Luc Auger

Évolution de l'algorithme

Au départ, j'ai testé un algorithme bidon qui enleverait le point avec l'énergie la plus faible. On voit sur le premier gif que ça tire dans tous les sens et qu'il aurait été impossible de redimensionner une image de cette manière. Mon amélioration première fut fort simple: trouver le point de moindre énergie sur la première ligne et se frayer un chemin contienu de moindre énergie jusqu'en bas de l'image. Déjà, j'obtenu quelque chose d'intéressant. Mon implémentation finale est plus intéressante, l'algorithme parcours la fonction d'énergie au complet une seule fois et calcul le poids pour atteindre les pixels du bas à partir du haut de l'image. En faisant ce traitement, l'algorithme conserve ce poids, mais aussi le chemin utilisé pour obtenir ce poids minimisé.

Approche sans chemin.

Approche premier choix glouton.

Approche programmation dynamique

Algorithme final

L'algorithme utilise une fonction d'énergie basée sur le calcul de la dérivée partielle en x et en y sur l'image. Cela permet de détecter les zones importantes de l'image qu'il faudrait préserver lors du redimensionnement. Voici un exemple imagée de cette fonction d'énergie.

Crédits supplémentaires

J'ai implémenté une fonctionnalité qui permet de choisir une zone d'intérêt dans l'image pour éviter que cette zone ne soit touchée par le redimensionnement. Pour ce y arriver, j'ai utilisé la commande roipoly() qui permet à l'utilisateur de choisir une zone dans l'image. Ensuite, on marque dans la fonction d'énergie tous les pixels contenus dans cette zone comme ayant une énergie maximale. On décourage donc l'algorithme de minimisation de passer par ces pixels, qu'on veut préserver. En image, on voit bien dans la fonction d'énergie les pixels qui on été choisis comme étant d'intérêt. Dans l'exemple, on voit bien qu'on est en mesure de préserver les dimensions du batîment. Or, on verra dans d'autres exemples plus loin que cette fonctionnalité à tout de même des limitations.

Définition de la zone d'intérêt.

Application de la zone d'intérêt à la fonction d'énergie.

40% redimensionnement sans zone d'intérêt

40% redimensionnement avec zone d'intérêt



J'ai aussi développé des fonctions Matlab qui permettent d'enregistrer dans un .gif tout le traitement fait par l'algorithme. Sans avoir d'impact sur le résultat final obtenu lors du redimensionnement, c'est intéressant de consulter ces images .gif pour voir comment travaille l'algorithme. Étant donné le fort poids de ces fichiers, je n'ai pu inclure que quelque exemples. (Petit défaut: la superposition des images qui forme le gif laisse une trainé sur le côté de l'image. Ce serait à corriger.)

Algorithme dynamique sans zone d'intérêt définie

Algorithme dynamique avec zone d'intérêt définie

Algorithme dynamique sans zone d'intérêt définie

Résultats

Photos suggérées

Pour cette section, j'ai utilisé mon algorithme sans sélectionner de zone d'intérêt dans les images. On voit que le redimensionnement est bon pour toutes les images sauf Max in Windsor pour le redimensionnement à 20%. En effet, il y a déjà des incohérences dans l'affichage de la voiture et cela s'empirera à 40% et 60% de redimensionnement. Pour les autres images, ça tient la route à 40%, sauf peut-être pour Yo Couch ou on déforme le troitoire au loin. À 60%, toutes les images souffrent d'une perte dans les proportions de l'image par rapport à l'original. Tower paraît étrange, idem pour House de McCann. Le trotoir de Yo Couch est étourdissant un brin, et que dire des artefacts dans Max in Windsor!

Redimensionnement en largeur

Pour arriver à travailler sur la largeur des images, j'ai tout simplement utilisé imrotate() pour effectuer une rotation de l'image en entrée, et avant la sortie. Cela a éviter d'implanter d'autres traitement. Quant aux résultats obtenus, on voit bien qu'il y a aussi apparitions d'artefacts lors de redimensionnements trop importants. Par contre, on voit que pour Tower, il y a beaucoup de joint qui ont pu être retirer sans atteindre la cohérence de l'image.

Photos prises sur internet

Dans cette section, j'ai utilisé mon algorithme avec la sélection d'une zone d'intérêt. On voit bien que la sélection d'une région d'intérêt a quand même une limite. On voit qu'on contraignant l'algorithme à éviter certains pixels, on réduit les possibilités de chemin de basse énergie. La photo avec les billes et celle montrant une structure le montre bien, puisqu'on perd l'essence originale de l'image. Même l'image Tower est difficilement traitée si le masque est trop grand. En effet, on voit bien sur la gauche de l'image qu'on perd du réalisme dans les nuages et le ciel.
Image originale
Image originale
Image originale
Masque utilisé
Masque utilisé
Masque utilisé
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 60%
Image redimensionnée en largeur de 60%
Image redimensionnée en largeur de 60%

Photos prises sur internet (suite)

Image originale
Image originale
Image originale
Masque utilisé
Masque utilisé
Masque utilisé
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 20%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 40%
Image redimensionnée en largeur de 60%
Image redimensionnée en largeur de 60%
Image redimensionnée en largeur de 60%

Photos personnelles