Le but de ce travail est de redimensionner une image sans toutefois perdre son contenu. Une approche plus intéressante est déjà bien proposée par Shai Avidan et Ariel Shamir qui s'intitule "Seam Carving for Content-Aware Image Resizing". Plus des détails peuvent être trouvés dans l'article et donc dans ce travail pratique, on va implémenter l'algorithme de base présenté.
L'idée de cette approche est de déterminer tout d'abord l'importance de chaque pixel en utilisant une fonction d'énergie, ce qui soit le gradient, l'entropie, segmentation ou bien l'Histogramme de Gradient (HOG) dans un pixel.
Une fois la fonction d'énergie de chaque pixel est bien déterminée, on passe en suite à chercher un jont, qui est un chemin reliant un côté de l'image à l'autre en sélectionnant un seul pixel pour chaque linge (colonne), avec le moins d'importance selon une dimension d'image (horizontallement ou verticallement). L'image sera découpée en retirant ce joint.
La fonction d'énergie a été obtenue (principalement) par le gradient de chaque pixel. Elle peuve est trouvée dans 'RGBenerg.m'. À fin de trouver le joint optimal vertical, on départ de traverser l'image à partir de la deuxième ligne jusqu'à la dernière ligne en calculant l'énergie cumulative pour chaque pixel, en comparant ses trois côtés en haut(pour les bords, seulement deux côtés en haut), comme ci-joint :
Voici les résultats obtenus:
Malheureusement, il y a des mauvais résultats avec le même code. Mais cela est assez bizzare :
Et son déplacement et les valeurs minimumes sont :
On a vu ici que le premier résultat est le meilleur. À cause qu'on a juste essayé la fonction d'énergie avec le gradient d'image, donc les autre types des fonctions d'énergie pourrient marcher mieux. Et le probème semble que l'algorithme a seulment trouvé les joints optimals dans la partie droite d'image. Ceci peut être le lirement des images ou matrices commece de droite à gauche, dans le cas où il y a des plusieurs valeurs minimumes de coût (0), le programme ne connaitre que les partie droites. Evidamment il faudrais améliorer le programme, les autre types de fonction d'énergie seraient bien réalisés.
Ce projet nous permet de bien comprendre la notion de redimensionner les images sans perdre des information. L'idée de "Seam Carving for Content-Aware Image Resizing" est génial, mais des détails de réalisation n'est pas évident. À partir des résultats, le renforcement de compétence de programmer reste à bien améliorer.