TP1: Coloration de l'Empire Russe

Approche à une seule échelle

Dans cette partie j'ai mis en place un algorithme permettant de decouper l'image initiale en 3 afin d'avoir les trois canaux différents.
Puis par la suite mon programme permet de tester des déplacements sur les deux axes compris entre -15 et 15 pixels.

Le résultat donné par l'algorithme sur les 9 images jpg obligatoire est le suivant:

Sur les images de plus grande taille comme les tifs faisant partie des 18 obligatoires, la methode à une échelle ne fonctionne pas bien car un decalage de [-15;15] pixels n'est pas suffisant.
Il faudrait un décalage beaucoup plus grand mais la durée de traitement serait beaucoup trop grande.

Voici le résultat du programme à une échelle avec un décalage de [-15;15] sur une image tif:

La solution pour allier efficacité et rapidité est donc d'appliquer une méthode á échelle multiple c.a.d. de construire une pyramide d'image en divisant la taille par 2 et d'ainsi appliquer la methode à une échelle de facon recursive.

Approche à échelles multiples

Méthode: Sachant que la méthode à une seule échelle fonctionnait bien pour des images en jpg d'un taille d'environ 400 par 400 pixels, j'ai décidé de générer mon espace des échelles de telle sorte que l'image de taille la plus faible soit inférieure à 400 par 400

Voici le résultat de la méthode multi échelles sur les 18 images obligatoire:

Voici le résultat de l'algorithme multi échelles sur les 10 images au choix:

Mettez-vous dans la peau de Prokudin-Gorskii!

Dans cette partie, j'ai pris en photo 3 scènes différentes avec 3 photos á chaque fois afin de pouvoir extraire les trois canaux RGB.

Mon script tp1_prep_mypictures.py premet d'isoler le canal rouge de la première image, le vert de la deuxieme, le bleu de la troisième afin de génèrer les images suivantes.

Une fois les trois images préparées, il me reste qu'a relancer mon script de la méthode multi échelle. Le résultat est le suivant:

Lors de la reconstruction de ces photos, nous pouvons remarquer quelquechose d'interressant. En effet, la première photo contient une montre comptant les millisecondes, ainsi entre les trois photos prises pour chaques canaux, l'aiguille a bougée, ainsi, elle n'est pas au même endroit sur le canal rouge, que sur le canal vert et bleu. On obtient ainsi en zoomant le résultat suivant:

Crédits supplémentaires

Découpage des bordures

Pour le decoupage des bords, jai effectué sur chaque canal une recherche de bords en calculant la moyenne de la ligne ou de la colonne suivant le bord concerné et en supprimant celle-ci si la valeur et soit supérieure à 0.8 soit inférieure à 0.2 car en effet, nous constatons que les bords sont soit blanc soit noir. cf tp1_bords.py
Voici le résultat

Méthode avec gradient

Pour cette méthode j'ai repris la méthode de multi échelle en faisant les calculs sur le gradient de l'image des canaux. Le gradient étant calculé par convolution avec le noyau suivant:

Cette image vient du site http://xmcvs.free.fr/astroart/Chapitre4.pdf

Voici comment j'ai implémenté la fonction gradient en pyhton

Le résultat de la méthode d'alignement avec le gradient de l'image est le suivant