TP2: On s'amuse en fréquences

HW2: Fun with frequencies

Partie 0: Réchauffement (10%, 5% pour les gradués)

Dans ce travail, vous aurez à implanter différents algorithmes. Ces algorithmes ont tous comme thème la manipulation d'images dans le domaine des fréquences. En guise de réchauffement, sélectionnez deux images de votre choix et accentuez leurs détails en utilisant la technique de l'accentuation («sharpening»).

Dans ce TP, nous vous recommandons d'utiliser des fonctions pour filtrer les images, comme imfilter en Matlab ou (skimage.filters.gaussian, scipy.ndimage.gaussian_filter) en Python. Votre code sera ainsi beaucoup plus simple que si vous utilisiez

Part 0: Warmup (10%, 5% for the grads)

For this homework, you will implement different algorithms. These algorithms have image manipulation in the frequency domain as a common thread. As a warmup, pick two images of your choice; sharpen them using the unsharp masking technique shown in class.

In this homework, we recommend you use image filtering functions such as imfilter in Matlab or (skimage.filters.gaussian, scipy.ndimage.gaussian_filter) in Python.

Partie 1: Images hybrides (30%, 25% pour les gradués)

Survol

Le but de cette section est de créer des images hybrides en utilisant l'approche décrite dans cet article de SIGGRAPH 2006 écrit par Oliva, Torralba et Schyns. Les images hybrides sont des images statiques dont l'interprétation dépend de la distance entre l'image et l'observateur. Dans une image, l'information à haute fréquence tend à être plus perceptible de près, tandis que seulement le signal à basse-fréquence peut être perceptible de loin. En mélangeant le contenu à hautes fréquences d'une image avec le contenu à basses fréquences d'une autre, vous pouvez obtenir une image dont l'interprétation varie selon la distance d'observation!

Détails

Utilisez ce code (Matlab/Python) pour débuter. Le code ne fait que lire deux images et les aligne par la suite. L'alignement est important puisque celui-ci affecte le groupement perceptuel (voir l'article).

  1. Tout d'abord, débutez avec les deux images incluses avec le code pour tester vos algorithmes. Lorsque vous serez en mesure d'obtenir des résultats similaires à celui illustré ci-haut, vous pourrez tester votre code sur d'autres images. Vous pouvez utiliser des images en niveaux de gris.
  2. L'approche consiste à filtrer une image avec un filtre passe-bas, filtrer une autre image avec un filtre passe-haut, et ensuite additionner le résultat des filtres (ou en calculer la moyenne). Pour le filtre passe-bas, Oliva et al. suggèrent l'utilisation d'un filtre 2D gaussien standard. Pour le filtre passe-haut, ils suggèrent l'utilisation d'un filtre à impulsion moins le filtre gaussien (ce qui peut être calculé en soustrayant l'image filtrée avec le filtre gaussien de l'image originale). La fréquence de coupure de chaque filtre mentionnée dans l'article doit être choisie à la main, par essai et erreur. Expérimentez!
  3. Sélectionnez votre résultat préféré, et identifiez-le dans votre rapport. Illustrez le procédé sur votre résultat préféré en utilisant une analyse fréquentielle. Affichez l'amplitude logarithmique de la transformée de Fourier des deux images initiales, des deux images filtrées, et de l'image hybride. Dans Matlab, vous pouvez afficher la transformée de Fourier 2D avec: imagesc(log(abs(fftshift(fft2(gray_image))))) et en python: plt.imshow(np.log(np.abs(np.fft.fftshift(np.fft.fft2(gray_image)))))

Crédits supplémentaires

Livrables

Pour cette section, incluez les résultats suivants dans votre rapport:

Part 1: Hybrid Images (30%, 25% for grads)

Overview

The goal of this part of the assignment is to create hybrid images using the approach described in the SIGGRAPH 2006 paper by Oliva, Torralba, and Schyns. Hybrid images are static images that change in interpretation as a function of the viewing distance. The basic idea is that high frequency tends to dominate perception when it is available, but, at a distance, only the low frequency (smooth) part of the signal can be seen. By blending the high frequency portion of one image with the low-frequency portion of another, you get a hybrid image that leads to different interpretations at different distances.

Details

We are providing you with (Matlab/Python) starter code that can be used to load two images and align them. The alignment is important because it affects the perceptual grouping (read the paper for details).

  1. First, start by using the images included with the code to test your algorithms. When you're able to obtain results similar to the ones shown above, you can then test your code on other images. You can use grayscale images.
  2. You will need to write code to low-pass filter one image, high-pass filter the second image, and add (or average) the two images. For a low-pass filter, Oliva et al. suggest using a standard 2D Gaussian filter. For a high-pass filter, they suggest using the impulse filter minus the Gaussian filter (which can be computed by subtracting the Gaussian-filtered image from the original). The cutoff-frequency of each filter should be chosen manually with some experimentation.
  3. Select your favorite result and identify it in your report. For this favorite result of yours, illustrate the process through frequency analysis. Show the log magnitude of the Fourier transform of the two input images, the filtered images, and the hybrid image. In Matlab, you can compute and display the 2D Fourier transform with: imagesc(log(abs(fftshift(fft2(gray_image))))) and in Python you can use plt.imshow(np.log(np.abs(np.fft.fftshift(np.fft.fft2(gray_image)))))

Bells & Whistles (Extra Points)

Deliverables

For this section, include the following results in your report:

Partie 2: Piles gaussienne et laplacienne (30%, 25% pour les gradués)

Pile gaussienne pour l'image hybride « Einstein-Marilyn »

Survol

Dans cette section, vous devez implanter des piles gaussiennes et laplaciennes; celles-ci sont comme les pyramides, mais sans le sous-échantillonnage (redimensionnement). Ensuite, vous utiliserez ces piles pour analyser des images, ainsi que vos résultats de la première partie.

Détails

  1. Implantez une pile gaussienne et une pile laplacienne. La différence entre une pile et une pyramide est la façon dont les images sont conservées; à chaque niveau d'une pyramide, l'image est sous-échantillonnée, et donc les résultats deviennent de plus en plus petits. Dans une pile, les images ne sont pas sous-échantillonnées: les résultats ont donc la même taille à chaque niveau et peuvent être conservés dans une matrice 3D (si l'image originale est en tons de gris). Puisque l'image n'est pas redimensionnée, il faut utiliser un filtre gaussien de plus en plus large à chaque niveau. Une bonne habitude à prendre est de doubler le sigma à chaque niveau de la pile (e.g. sigma = 2,4,8,16...), et de toujours générer les images de la pile à partir de l'image originale. De cette façon, nous obtiendrons une pile similaire à une pyramide qui aurait été sous-échantillonnée de la moitié de sa taille à chaque niveau.
  2. Appliquez vos piles gaussienne et laplacienne à des images intéressantes contenant des informations à plusieurs résolutions comme la peinture « Lincoln et Gala » de Salvador Dali. Affichez vos piles calculées à partir de ces images pour découvrir la structure à chaque résolution.
  3. Illustrez le processus de création d'image hybride que vous avez implanté à la partie 1 en appliquant vos piles gaussienne et laplacienne et en les affichant pour votre résultat préféré. Ce résultat devrait être similaire à la figure 7 dans l'article de Oliva et al.

Crédits supplémentaires

Livrables

Pour cette section, incluez les résultats suivants dans votre rapport:

Part 2: Gaussian and Laplacian Stacks (30%, 25% for the grads)

Gaussian stack for the "Einstein-Marilyn" hybrid image

Overview

In this part you will implement Gaussian and Laplacian stacks, which are kind of like pyramids but without the downsampling. Then you will use these to analyze some images, and your results from part 1.

Details

  1. Implement a Gaussian and a Laplacian stack. The different between a stack and a pyramid is that in each level of the pyramid the image is downsampled, so that the result gets smaller and smaller. In a stack the images are never downsampled so the results are all the same dimension as the original image, and can all be saved in one 3D matrix (if the original image was a grayscale image). Note that there is one subtlety here: since we are not downsampling the image, we must use a larger and larger sigma for the Gaussian filtering at each level. A good rule of thumb is to double the sigma at each level of the pyramid (e.g. sigma = 2,4,8,16...), and to always use the resulting Gaussian filter on the original image. In this way we will get a stack that behaves similarly to a pyramid that was downsampled to half its size at each level.
  2. Apply your Gaussian and Laplacian stacks to interesting images that contain structure in multiple resolution such as paintings like the Salvador Dali painting of Lincoln and Gala. Display your stacks computed from these images to discover the structure at each resolution.
  3. Illustrate the process you took to create your hybrid images in part 1 by applying your Gaussian and Laplacian stacks and displaying them for your favorite result. This should look similar to Figure 7 in the Oliva et al. paper.

Bells & Whistles (Extra Points)

Deliverables

For this section, include the following results in your report:

Partie 3: Mélange multirésolution (30%, 25% pour les gradués)

Survol

Le but de cette partie du travail est de mélanger harmonieusement deux images en utilisant la technique de mélange multirésolution décrite dans cet article de 1983 par Burt et Adelson. Une spline d'image est un joint lisse liant deux images ensemble en les déformant légèrement. Le mélange multirésolution calcule un joint entre les deux images indépendamment à chacune des bandes de fréquence de l'image ce qui résulte en un joint beaucoup plus lisse.

Détails

  1. Tout d'abord, utilisez les deux images d'exemple fournies (pomme et orange) et générez une « pommange » tel qu'illustrée ci-haut. Pour ces images, un joint vertical au milieu de l'image suffira.
  2. Implantez la technique proposée par l'article qui utilise vos piles gaussienne et laplacienne de la partie 2 dans le but de mélanger les images ensemble. Puisque vous utilisez des piles au lieu de pyramides comme dans l'article, l'algorithme décrit à la page 226 ne fonctionne pas tout à fait. Si vous l'essayez, vous allez vous retrouver avec un joint très défini entre la pomme et l'orange puisque l'utilisation d'une pyramide adoucit le joint, ce qui n'est pas le cas de la pile. Pour pallier à ce problème, vous devriez toujours utiliser un masque comme l'algorithme à la page 230 le propose; n'oubliez pas de créer une pile gaussienne pour le masque lui-même en plus de vos deux images d'entrée. Le filtrage gaussien du masque dans la pile devrait adoucir la transition entre les deux images. Pour le joint vertical ou horizontal, votre masque devrait simplement être une image binaire (0 ou 1) de la même taille que les images originales.
  3. Maintenant que votre code fonctionne et que vous parvenez à vous fabriquer une « pommange », sélectionnez des images de votre choix pour les mélanger en utilisant un masque irrégulier, comme montré à la figure 8 de l'article.
  4. Illustrez le procédé en appliquant votre pile laplacienne et en l'affichant pour votre résultat préféré ainsi que l'image d'entrée avec masque qui l'a créé. Cela devrait ressembler à la figure 10 de l'article.

Crédits supplémentaires

Livrables

Pour cette section, incluez les résultats suivants dans votre rapport:

Part 3: Multiresolution Blending (30%, 25% for the grads)

Overview

The goal of this part of the assignment is to blend two images seamlessly using a multi resolution blending as described in the 1983 paper by Burt and Adelson. An image spline is a smooth seam joining two image together by gently distorting them. Multiresolution blending computes a gentle seam between the two images seperately at each band of image frequencies, resulting in a much smoother seam.

Details

  1. First, use the example images provided (apple and orange) to generate the "orple" as seen above. In this case, a vertical seam is sufficient.
  2. Then you will need to implement the approach proposed in the paper and use your Gaussian and Laplacian stacks from part 2 in order to blend the images together. Since we are using stacks instead of pyramids like in the paper, the algorithm described on page 226 will not work as-is. If you try it out, you will find that you end up with a very clear seam between the apple and the orange since in the pyramid case the downsampling/blurring/upsampling hoopla ends up blurring the abrupt seam proposed in this algorithm. Instead, you should always use a mask as is proposed in the algorithm on page 230, and remember to create a Gaussian pyramid for your mask image as well as for the two input images. The Gaussian blurring of the mask in the pyramid will smooth out the transition between the two images. For the vertical or horizontal seam, your mask will simply be a step function of the same size as the original images.
  3. Now that your code works and that you've made yourself an "orple", select images of your choice to blend together with an irregular mask, as is demonstrated in figure 8 in the paper.
  4. Illustrate the process by applying your Laplacian stack and displaying it for your favorite result and the masked input images that created it. This should look similar to Figure 10 in the paper.

Bells & Whistles (Extra Points)

Deliverables

For this section, include the following results in your report:

Remise

Pour la remise de votre travail, créez un fichier tp2.zip qui contient:

Nous vous conseillons fortement d'identifier clairement les principales « portes d'entrée » de votre code (ex: main_sharpening.m, main_hybride.m, etc.). Cela permettra à votre correcteur de s'y retrouver plus facilement!

Finalement, veuillez téléverser votre fichier tp2.zip sur le portail des cours avant la date limite. 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 lui-même, posez vos questions sur Piazza!

Attention! La taille limite permise sur le portail des cours est de 250MB.

Handing in procedure

For this homework, you must create a tp2.zip file. In this file you'll put:

Finally, you should upload this file (tp2.zip) on the "portail des cours" before the deadline. The late submission policy described in the course plan will be applied. For any question regarding the submission process or the project as such, ask your questions on Piazza!

Beware! File size limit on the "portail" is 250MB.

Liens

Links

Remerciements

Merci à Alyosha Efros d'avoir créé le TP original ayant servi d'inspiration pour celui-ci!

Thanks

Many thanks to Alyosha Efros for the original version of this assignment!

Retour à la page web du cours.

Back to the class webpage.