TP1: Colorisation de l'Empire Russe
GIF-7105 : Photographie algorithmique (Hiver 2015)
Au début du 20e siècle, le photographe Sergei Mikhailovich Prokudin-Gorskii parcourut l'empire russe en prenant des photos bien particulières. Pour chaque scène qu'il immortalisait, il prenait trois photos : l'une avec un filtre bleu devant l'objectif, une seconde avec un filtre vert et une dernière avec un filtre rouge. Cela lui permettait par la suite de reconstituer des photos couleur, en combinant les trois différentes prises avec une source lumineuse.
Dans ce travail, nous utilisons les originaux de ces photos et tentons de reconstituer les scènes en couleur. Quelques problèmes se doivent d'être résolus, en particulier l'alignement des différents canaux, la suppression des bordures et la balance des blancs.
Algorithme général
L'algorithme général utilisé pour réaligner les images est le suivant :
- Diviser l'image d'entrée en trois (on suppose que les images de chaque canal sont de même hauteur)
- En utilisant le canal bleu comme référence, calculer la translation amenant à la meilleure superposition pour le canal vert selon une certaine fonction de distance
- Appliquer la même méthode pour le canal rouge
- Reconstituer l'image couleur en superposant les trois canaux
Images basse résolution
La visualisatrice suivante présente les exemples obligatoires d'images à basse résolution. Les translations utilisées pour chaque canal sont indiquées en bas.
Images haute résolution
La visualisatrice suivante présente les exemples obligatoires d'images à haute résolution. Les translations utilisées pour chaque canal sont indiquées en bas.
Images additionnelles (basse résolution)
Quelques images additionnelles ont été choisies parmi les autres photos. La visualisatrice suivante présente ces images (basse résolution).
Images additionnelles (haute résolution)
Les résultats pour sept autres images à haute résolution sont aussi présentés ici.
Nouvelles images
Afin de reconstituer la méthode de Prokudin-Gorskii de nos jours, plusieurs photos ont été prises d'une même scène avec un appareil photo moderne. De l'une de ces prises, on a retiré le canal rouge, d'une autre le canal vert et d'une troisième le canal bleu. Le léger mouvement entre les prises de vues permet de simuler la translation apparaissant dans les images originales de Prokudin-Gorskii. Notons que pour certaines de ces photos, cette translation a malencontreusement été accompagnée d'une rotation. Par conséquent, il est impossible de réaligner les images en utilisant seulement une translation, ce qui fait en sorte que le centre de l'image (la partie utilisée pour l'alignement) est nette alors que les bords sont flous ou diffus.
Recadrage automatique des images
Les images reconstituées comportent souvent de disgracieuses bordures causées par le réalignement des différents canaux. L'image de gauche en montre un exemple. Afin de supprimer ces artefacts, une petite heuristique a été mise au point :
- Pour chaque colonne (d'une largeur donnée, dépendant de la résolution de l'image), on calcule, pour chaque canal, v, l'écart entre le 55e et le 45e quartile de la valeur des pixels. On calcule également d, l'écart entre le 55e et le 45e quartile pour la différence entre les canaux.
- Intuitivement, si la différence d entre les canaux est très élevée, il y a de bonnes chances pour que l'on soit en présence de ces fameuses "bandes de couleur". Cependant, une différence élevée peut aussi être présente dans une photographie, par exemple pour la photo de la mer (ciel bleu sur mer bleue)
- Afin d'éviter de couper une partie importante de l'image, on utilise v. Si cette métrique est très faible, cela signifie que même dans le canal différent des autres, la variation est minimale (ce qui n'est pas le cas dans la mer par exemple).
- On combine donc d et v, le premier devant être maximal et le second minimal pour indiquer la présence de bordures indésirables. Un seuil est calculé à partir du centre de l'image (que l'on suppose sans bordure), et un découpage de l'image est appliqué pour retirer les colonnes dépassant ce seuil.
- Le même procédé est appliqué pour les lignes.
Au final, les résultats sont satisfaisants, comme le montre la figure suivante (toutes les figures haute résolution de la page ont également reçu ce traitement). Les problèmes viennent principalement du choix des seuils (écart 55-45 ou 65-35? ou alors 60-40?), et du fait qu'un artefact présent dans la bande en question diminue la valeur de d et augmente celle de v, ce qui peut conduire l'algorithme à ne pas assez rogner. De manière générale, une préférence a été accordée à préserver l'image plutôt qu'à la suppression totale des bordures.
Le graphique de gauche montre la variation de d (courbe verte, une haute valeur indique une bordure) et de v (courbe rouge, une basse valeur indique une bordure) en fonction de la colonne (le graphique est aligné avec l'image présent en-dessous). On voit bien la nette coupure lorsque l'on passe de la bordure à l'image en elle-même.
Original
Recadré
Original
Recadré
Balance des blancs
Dans les images, la balance des blancs a été ajustée de façon très simple, en ajustant la moyenne de l'image au gris. Le canal vert a été arbitrairement choisi pour servir de référence, et les moyennes des autres canaux sont ramenées à sa valeur. Les résultats sont généralement corrects, bien que l'on remarque que la correction n'est pas toujours complète. Il est toutefois à noter que la balance des blancs est rendue difficile par les nombreuses "taches" de couleur présentent sur la plupart des photos.
Original
Avec balance des blancs
Original
Avec balance des blancs
Problèmes rencontrés et résolution
Le principal problème rencontré découle du choix de la fonction de distance. À l'origine, une simple somme des différences au carré (SSD) étaient utilisée. Toutefois, elle s'est avérée peu robuste, puisque, par définition, le contenu de chaque canal est indépendant. Si cette métrique donne des résultats acceptables dans certains cas, c'est parce que les canaux sont suffisamment similaires pour qu'elle s'en tire à bon compte, mais ce n'est pas toujours le cas. Par exemple, dans l'image de gauche, le canal bleu est très décorrélé des deux autres canaux (le bleu n'étant présent ni dans le vert de la forêt, ni dans le beige du bois). Comme ce canal est utilisé comme référence, l'alignement obtenu avec une métrique SSD appliquée directement sur les canaux est mauvais.
Afin de régler ce problème, un filtre de Sobel (détection de bords) a été utilisé préalablement au calcul du SSD, en partant de la supposition que les arêtes sont généralement présentes de manière significative dans tous les canaux. Les parties non-intéressantes, peu corrélées, sont simplement mises à zéro par le filtre, ce qui permet à l'alignement utilisant le SSD de bien mieux performer (image de droite). L'application de ce filtre a toutefois le désavantage de ralentir quelque peu le traitement.