Date limite: 16 février 2014 à 23h55
Due Date: 23h55 on February 16, 2014
Un des problèmes qui a reçu beaucoup d'attention ces dernières années en recherche est celui du redimensionnement automatique d'images: comment faire pour redimensionner une image sans toutefois perdre son contenu? Un des articles les plus importants sur ce sujet a été publié récemment à SIGGRAPH et s'intitule Seam Carving for Content-Aware Image Resizing par Shai Avidan et Ariel Shamir. Dans ce travail, vous allez implémenter l'algorithme de base présenté dans cet article. Vous concevrez un programme qui pourra rétrécir une image dans une dimension donnée (horizontalement ou verticalement) en retirant une à une les colonnes (ou les lignes) de l'image contenant le moins d'information.
One of the recent papers at SIGGRAPH that made news was Seam Carving for Content-Aware Image Resizing by Shai Avidan and Ariel Shamir. In this assignment, you'll be implementing the basic algorithm presented therein. To wit, you'll be designing a program which can shrink an image (either horizontally or vertically) to a given dimension.
Voici un lien vers une vidéo qui présente une courte description de l'algorithme et montre des résultats intéressants. Votre algorithme va rétrécir la taille de vos images comme suit:
Sentez-vous libre d'utiliser les fonctions d'énergie de l'article (ou d'en utiliser une autre de votre choix). Définir une bonne fonction d'énergie est essentiel pour obtenir de bons résultats.
For a brief overview of the algorithm and some inspiring results, check out the video. Your algorithm will shrink images as follows:
Feel free to use any energy function in the paper (or cook up something on your own). Defining a good energy function seems to be the key to achieving good results.
Un joint horizontal est un chemin reliant un côté de l'image à l'autre en sélectionnant exactement un seul pixel pour chaque colonne. (Un joint vertical est semblable, mais celui-ci relie le haut et le bas de l'image, et contient un seul pixel par rangée.) Trouver le joint avec le moins d'importance peut être fait de façon efficace avec la programmation dynamique. Pour plus de détails, référez-vous à l'article original.
Votre code final devra pouvoir, étant donnée une image d'entrée, produire une image de sortie rétrécie d'un nombre donné de pixels, soit en largeur ou en hauteur (pas nécessairement les deux à la fois). Pour ce faire, il est beaucoup plus simple d'écrire votre code pour une seule dimension, puis transposer l'image pour la rétrécir dans l'autre dimension.
A horizontal seam is a connected path from one side of the image to the other that chooses exactly one pixel from each column. (A vertical seam is the same, but from top to bottom and with rows.) Finding the lowest-importance seam is a simple dynamic programming exercise. This is pretty well explained in the article of Avidan and Shamir.
Your final code should be able to, given an input image, produce an output image shrunk by a given number of pixels either in width or in height (but not both at once!). A simple way to achieve this goal is to write your code to shrink only in one dimension and then create a wrapper function that transposes the image to shrink in the other dimension.
Remarquez comment le contenu de l'image est conservé et que la grande section (plutôt inutile et déprimante) d'asphalte est retirée.
Notice how the content in the image is preserved, and the large, boring, area of asphalt is removed.
Lorsque vous poussez l'algorithme à ses limites, des artefacts -- comme des distorsions de formes et des angles cubistes étranges -- vont apparaître dans l'image. Peaufinez votre code pour atténuer ces effets et tentez de comprendre sur quels types d'images ces effets se produisent. Généralement, des scènes hautement structurées et les images contenant des visages vont en souffrir, alors que les scènes d'objets texturés sur de simples arrière-plans devraient mieux fonctionner.
As you push the algorithm to its limits, artifacts -- such as shape distortions and odd cubist angles -- will begin to crop up. A lot of time on this project will be spent tweaking your code to mitigate these effects, as well as searching for pictures which don't exhibit them. Generally, highly-structured scenes and human faces will suffer, while scenes with textured objects on simple backgrounds will work better.
Approfondissez vos connaissances (et augmentez votre note) en essayant d'implémenter les idées suivantes:
Try one of these ideas to increase your understanding on this subject (and increase your score):
Comme pour le travail précédent, celui-ci sera remis dans un format page Web. Rappel: le site Web n'a pas besoin d'être esthétiquement agréable; ne faites que décrire ce que vous avez fait.
Plus précisément, la page devrait contenir:
As in the previous homework, this one will be handed in a webpage format. Remember: the aesthetics of the website will not be evaluated, but it is important that the information be presented clearly.
More precisely, the webpage should:
Pour la remise de votre travail, créez un fichier tp2.zip
qui contient
tp2/web
. Vos images doivent être dans un dossier tp2/web/images
.tp2/code
. De préférence, ne pas inclure les images que vous avez utilisées pour produire vos
résultats dans ce dossier dans le but de ne pas alourdir le fichier.For this homework, you must create a tp2.zip
file. In this file you'll put:
tp2/web
. Your images for this web page should be inside a folder named tp2/web/images
.tp2/code
.
Please do not include the images you have used to produce your results inside this folder.Attention! La taille limite permise sur Pixel est de 50MB. Assurez-vous que la taille du fichier tp2.zip
n'excède pas 50MB.
Careful! The maximum allowed file size on Pixel is 50MB. Please ensure that your tp2.zip
file does not exceed 50MB!
Finalement, veuillez téléverser votre fichier tp2.zip
sur pixel (http://pixel.fsg.ulaval.ca) avant la date limite. Bien entendu, la politique des retards mentionnée dans le plan de cours sera appliquée. Pour toutes questions concernant la procédure de remise ou le travail en tant que tel, envoyez vos questions à l'adresse courriel du cours.
Finally, you should upload the file tp2.zip
on Pixel (http://pixel.fsg.ulaval.ca) before the deadline. Naturally, the late submission policy in the course plan will be applied. For any question regarding the submission process or the homework as such, send your question to the course's email address.
Ce travail est évalué sur 100 points. La répartition des points va comme suit:
This assignment is evaluated on 100 points, as follows:
Merci à Alyosha Efros d'avoir créé le TP original qui a servi d'inspiration pour celui-ci!
Many thanks to Alyosha Efros for creating the assignment which inspired this one!