TP1: Colorisation de l'Empire Russe

- Sur les traces de Prokudin-Gorskii -

par Olivier Duguay

GIF-4105/7105 Photographie Algorithmique, Hiver 2015

1-Objectifs du projet 2-Approche et méthode choisie 3-Résultats 4-Extras

1-Objectifs du projet

Dans le cadre de ce premier projet du cours de photographie algorithmique, il nous faut suivre les pas du photographe Sergei Produkin-Gorskii et tenter de recréer une image couleur à partir des plaques de verre numérisées de sa collection. Premièrement, il faudra trouver un moyen de couper la photo en 3 afin de séparer les différents canaux correspondant aux photos "quasi-identiques", prises avec un filtre de couleurs (RGB). De plus, il faudra développer un algorithme permettant d'aligner le plus efficacement possible ces 3 photos afin de reconstituer la meilleure image couleur. Cet algorithme devra être amélioré (dans une 2e version) afin de pouvoir traiter des images de plus grandes résolutions, et ce, plus rapidement puisque la méthode brute requiert beaucoup de temps pour des fichiers très volumineux. Également, il faudra ce mettre dans la peau du photographe et essayer les algorithmes sur nos propres photos et donc, répéter l'expérimentation de Produkin-Gorskii. Pour plus de détails, voyez l'énoncé complet ICI.

2-Approche et méthode choisie

Pour la séparation de l'image, une simple division en 3 de l'image de départ sur l'horizontale a permis d'obtenir de bons résultats. Cependant, comme les photos ne sont pas toujours de la même taille ou comportent des bordures, cela peut faire en sorte de fausser légèrement les données en incluant ces bordures ou en omettant des bonnes parties en coupant au mauvais endroit sur une photo.

Pour l'algorithme à une échelle, on utilise un fenêtrage de l'image situé au centre de celle-ci, car on fait l'hypothèse que les photographes ont tendance à centrer l'objet photographié et donc, il est plus susceptible d'y avoir quelque chose d'intéressant dans cette zone. Par intéressant, on veut dire qu'il y a plus de chance d'avoir des changements de textures, profondeur, etc ou tout élément nous permettant de bien distinguer 2 images et de pouvoir les aligner. Essayez de différencier un carré bleu provenant d'une photo d'un beau ciel bleu... Pas toujours évident. Une fois le fenêtrage fait pour les 3 images constituant les 3 canaux de couleurs rouge, bleu et vert, il suffit de prendre une image de référence qui dans notre cas est le vert, et d'y aligner les images des 2 autres couleurs. Il suffit ensuite de calculer la corrélation entre les 2 images, plus celle-ci est élevée, plus les images sont semblables. On exécutera cette corrélation pour un décalage allant de -15 à 15 pixels dans les 2 directions (x,y) en conservant la meilleure corrélation et les indices de décalage correspondants. Il suffira d'empiler les photos pour obtenir le résultat final.

Pour l'algorithme à échelles multiples, il suffit d'ajouter des appels récursifs à la méthode à une échelle dans le but de créer une pyramide d'image plus petite les unes des autres, et ce, d'un facteur de 2. On utilisera donc la méthode brute pour les images de plus petites tailles en mettant à jour le décalage et initialisant une nouvelle corrélation à chaque étape suivante. De plus, il est bien de réduire la plage de décalage possible d'un facteur à l'autre puisqu'à la dernière itération, on se retrouvera à faire la méthode brute sur une photo de grande taille, ce que l'on veut éviter afin d'accélerer le traitement du résultat final.

Pour utiliser les photos provenant d'un appareil photo standard et tenter d'imiter les exploits de Produkin-Gorskii, il faut prendre 3 photos le plus identiques possible et extraire un canal de couleur par photos. On pourra ensuite exploiter les photos avec les algorithmes décrits précédemment.

3-Résultats

Les résultats obtenus sont présentés à cette section et sont classés selon les résolutions des images.

Images de basse résolution (JPG)

Offset Rouge : x = -2, y = 6
Offset Bleu : x = -1, y = -4

Offset Rouge : x = 2, y = 3
Offset Bleu : x = -3, y = -2

Offset Rouge : x = 0, y = 6
Offset Bleu : x = 0, y = -6

Offset Rouge : x = 1, y = 3
Offset Bleu : x = 0, y = -1

Offset Rouge : x = -1, y = 3
Offset Bleu : x = 0, y = -2

Offset Rouge : x = 0, y = 12
Offset Bleu : x = 1, y = -1

Offset Rouge : x = 0, y = 2
Offset Bleu : x = -2, y = 0

Offset Rouge : x = 0, y = 5
Offset Bleu : x = -1, y = -5

Offset Rouge : x = 2, y = 8
Offset Bleu : x = -2, y = -6


Images de basse résolution (JPG) supplémentaires

Offset Rouge : x = 1, y = 6
Offset Bleu : x = 0, y = -1

Offset Rouge : x = 3, y = 5
Offset Bleu : x = -1, y = -3

Offset Rouge : x = 1, y = 7
Offset Bleu : x = -2, y = -8

Offset Rouge : x = -3, y = 7
Offset Bleu : x = 2, y = -5

Offset Rouge : x = 0, y = 7
Offset Bleu : x = -2, y = -6


Images de haute résolution (TIF)

Offset Rouge: x = 5, y = 13
Offset Bleu: x = -9, y = -13

Offset Rouge: x = 5 y = 14
Offset Bleu: x = -22, y = -8

Offset Rouge: x = 4, y = 6
Offset Bleu: x = -14, y = -14

Offset Rouge: x = 10, y = 22
Offset Bleu: x = 0, y = -22

Offset Rouge: x = -1, y = 13
Offset Bleu: x = -1, y = -5

Offset Rouge: x = 4, y = 16
Offset Bleu: x = -10, y = -22

Offset Rouge: x = 1, y = 7
Offset Bleu: x = 1, y = -6

Offset Rouge: x = 2, y = 10
Offset Bleu: x = -2, y = 6

Offset Rouge: x = 5, y = 22
Offset Bleu: x = -9, y = -13


Images de haute résolution (TIF) supplémentaires

Offset Rouge: x = -14, y = -18
Offset Bleu: x = 2, y = -22

Offset Rouge: x = 0, y = 15
Offset Bleu: x = 1, y = -5

Offset Rouge: x = 2, y = 22
Offset Bleu: x = -5, y = -16

Offset Rouge: x = -2, y = 15
Offset Bleu: x = -3, y = 22

Offset Rouge: x = -4, y = 14
Offset Bleu: x = 4, y = -22

Comme on le remarque, pour des images de grandes tailles, il est plus difficile de minimiser les erreurs sur le décalage. De plus, le fait de ne pas avoir préfiltré et normalisé chacuns des canaux de couleurs avant de les utiliser n'est pas la meilleure alternative, car il y aura plus de distorsion. Un ajustement des niveaux de couleur aurait également été nécessaire. Finalement, on constate que le problème est plus important au niveau du canal correspondant au à la couleur rouge.


Images de prise avec un iPhone 5S

Offset Rouge : x = -3, y = -5
Offset Bleu : x = -0, y = -4

Offset Rouge : x = 0, y = -15
Offset Bleu : x = 0, y = 3

Offset Rouge : x = 0, y = 0
Offset Bleu : x = 0, y = 0

Offset Rouge : x = -5, y = -15
Offset Bleu : x = -9, y = -14

Il faut remarquer ici que j'ai fait bien attention de bouger le moins possible entre les photos et en stabilisant le téléphone sur une surface stable afin d'éviter toute erreur.

Pour la photo du cube Rubik, j'ai intentionnellement tourné une des faces du cube afin d'en voir l'effet. Comme on le remarque, puisque le fenêtrage est fait dans le centre de l'image, il n'y a pas grand distorsion. Cependant, on peut remarquer des couleurs "fantôme" dans l'image puisque certaines surfaces du cube ont changé de couleurs entre les photos (la face gauche du cube à été pivoté).

De plus, pour la photo du tissu texturé, j'ai utilisé le mode rafale de l'appareil photo de mon téléphone dans le but de réduire le temps entre les captures de photos pour ainsi réduire la possibilité d'avoir bougé entre les 3 clichés.
Une petite tricherie que ce Produkin-Gorskii ne pouvait exploiter :P !



4- Extras


Dans cette section on peut voir les résultats obtenus avec une caméra monochromatique DragonFly2 de la compagnie Point Grey, disponible au service technique de l'Université Laval. Cette caméra possède un capteur CCD Sony, de format 1/3" et permet d'obtenir photos de taille 1024x768 pixels de type "niveau de gris". Des filtres transparents passe-bande de trois couleurs différentes (rouge,vert et bleu) ont été utilisés l'un après l'autre sur la caméra pour ainsi obtenir 3 images de niveaux de gris correspondant à chaque couleurs(RGB). Puis, ces images ont été utilisés avec l'algorithme de l'approche à une échelle décrite précédemment. On remarque qu'en changeant les filtres, bien que l'on soit le plus minutieux possible, le moindre mouvement de la caméra engendre un bon décalage de l'image. L'image photographiée est en fait un plan rapproché d'une carte postale.

Chapeau à ce monsieur Produkin-Gorskii .

Images prises avec la caméra monochromatique DragonFly 2

Photo prise avec le filtre rouge

Photo prise avec le filtre vert

Photo prise avec le filtre bleu

Résultat final (Approche à 1 échelle)
Offset rouge : x = -9, y = 5
Offset bleu : x = -3, y = 4