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:
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