TP1 : Colorisation de l'Empire Russe

TP1 : Colorisation de l'Empire Russe

Par Claudia laramée


Description du projet

Le but de ce projet est d'implémenter un algorithme qui, selon trois images indépendantes de trois canaux de couleurs, produit une image couleur en sortie. Différentes techniques seront utilisées pour permettre de trouver l'alignement optimal des trois images dans un temps raisonnable. Par la suite, ces techniques seront testées sur des images de différents formats en de différentes tailles tirées de la collection de Sergei Mikhailovich Prokudin-Gorskii. Finalement, les techniques seront testées sur une série de trois images dont les trois canaux de couleurs ont été extraits.


Résultats de l'algorithme à une échelle

Pour cette partie, j'ai écrit un algorithme très simple qui effectue une recherche exhaustive sur un intervalle de [-15:15] pixels, tel que suggéré dans l'énoncé du travail. Cet algorithme est constitué de deux boucles imbriquées qui calculent les déplacements nécessaires, en x et en y, afin d'obtenir obtenir un alignement optimal des trois canaux de couleur. Pour ce faire, il suffit de minimiser la somme des différences aux carrés entre les deux images que l'on veut aligner.

Cette technique est efficace pour de petites images, mais le calcul de l'alignement devient rapidement long et inefficace lorsqu'on utilise l'algorithme pour aligner de grosses images.


00106v.jpg
Vert : x = 4 ; y = 0
Rouge : x = 9 ; y = -1
00757v.jpg
Vert : x = 0 ; y = 0
Rouge : x = 5 ; y = 1
00888v.jpg
Vert : x = 6 ; y = 0
Rouge : x = 10 ; y = -1
00889v.jpg
Vert : x = 1 ; y = -1
Rouge : x = 5 ; y = -1
00907v.jpg
Vert : x = 0 ; y = -1
Rouge : x = 5 ; y = -1
00911v.jpg
Vert : x = 2 ; y = -1
Rouge : x = 5 ; y = -1
01031v.jpg
Vert : x = 1 ; y = 1
Rouge : x = 4 ; y = 1
01657v.jpg
Vert : x = 6 ; y = -1
Rouge : x = 12 ; y = -2
01880v.jpg
Vert : x = 6 ; y = 2
Rouge : x = 13 y = 3

Résultats de l'algorithme à échelles multiples

Pour cette partie, j'ai développé un algorithme qui se base sur le principe d'une pyramide d'images afin de réduire le temps de recherche des déplacements. Je me suis inspirée des explications et des résultats présentés dans la page d'un étudiant de la session dernière (voir la section "Sources" au bas de la page). Cette approche est beaucoup plus rapide que celle à une seule échelle puisque le fait de diminuer la taille de l'image permet de trouver plus rapidement l'alignement optimal sur l'image de petite taille. Lorsque celui-ci est trouvé, il ne suffit que de remonter la pyramide d'images et de multiplier la translation calculée par 2. Par contre, en multipliant la taille de l'image par 2, la translation peut aussi avoir changé de 2 pixels. Il faut donc recalculer la somme des différences aux carrés pour s'assurer du meilleur alignement possible. Cependant, il n'est pas nécessaire de tester toutes les possibilités, un intervalle de [-3,3] suffit à couvrir les changements qui ont pu être occasionnés par le redimensionnement de l'image.


00029u.tif
Vert : x = 71 ; y = -11
Rouge : x = 75 ; y = -25
00087y.tif
Vert : x = 54 ; y = 0
Rouge : x = 102 ; y = 1
00128u.tif
Vert : x = 36 ; y = 2
Rouge : x = 85 ; y = 3
00458u.tif
Vert : x = 25 ; y = -12
Rouge : x = 75 ; y = -2
00737u.tif
Vert : x = 55 ; y = -3
Rouge : x = 63 ; y = -2
00822u.tif
Vert : x = 69 ; y = -2
Rouge : x = 69 ; y = -25
00892u.tif
Vert : x = -25 ; y = -15
Rouge : x = 69 ; y = -25
01043u.tif
Vert : x = -25 ; y = 3
Rouge : x = 55 ; y = 19
01047u.tif
Vert : x = 33 ; y = 4
Rouge : x = 61 y = 14

Résultats sur d'autres images de la collection Prokudin-Gorskii


00001v.jpg
Vert : x = 4 ; y = 1
Rouge : x = 8 ; y = 0
00258v.jpg
Vert : x = 3 ; y = -1
Rouge : x = 8 ; y = -2
01903v.jpg
Vert : x = 2 ; y = 1
Rouge : x = 8 y = 1
01864v.jpg
Vert : x = 10 ; y = 1
Rouge : x = 12 ; y = 3
01855v.jpg
Vert : x = 6 ; y = 1
Rouge : x = 13 ; y = 1
01902u.tif
Vert : x = 25 ; y = -29
Rouge : x = 69 ; y = -53
01769u.tif
Vert : x = 69 ; y = -9
Rouge : x = 69 ; y = -20
01622u.tif
Vert : x = 29 ; y = -15
Rouge : x = 69 y = -25
01496u.tif
Vert : x = 53 ; y = 13
Rouge : x = 69 ; y = 17
01521u.tif
Vert : x = 69 ; y = 4
Rouge : x = 69 ; y = -5

Résultats de mes propres photos


Photo 1
Photo 2
Photo 3
Photo 1 - Canal rouge
Photo 2 - Canal vert
Photo 3 - Canal bleu
Vert : x = -21 ; y = -45
Rouge : x = 69 ; y = -37
Photo 1
Photo 2
Photo 3
Photo 1 - Canal rouge
Photo 2 - Canal vert
Photo 3 - Canal bleu
Vert : x = -69 ; y = 16
Rouge : x = 61 ; y = 69
Photo 1
Photo 2
Photo 3
Photo 1 - Canal rouge
Photo 2 - Canal vert
Photo 3 - Canal bleu
Vert : x = -69 ; y = -2
Rouge : x = -21 ; y = -53

Analyse des résultats obtenus

Je constate que l'alignement basé sur la somme des différences aux carrés est plus efficace sur des images de petite taille (.jpg). Son utilisation à une seule échelle sur des images de plus grande taille est beaucoup trop longue et ne donne pas de bons résultats. L'approche à échelles multiples peut permettre de remédier à la lenteur de l'approche à une seule échelle, mais elle n'améliore que de peu le résultat de l'alignement final.


Sources

Je me suis basée sur l'ébauche de code Matlab ainsi que sur l'ébauche de page web fournie dans l'énoncé du travail.

Je me suis également inspirée des explications présentées dans la page des résultats d'un étudiant de la session dernière lors de la conception des fonctions "reduction" et "bestAlignPyramid".