TP1: Colorisation de l'Empire Russe

Date limite: 2 février 2014 à 23h55

Petit cours d'histoire

Sergei Mikhailovich Prokudin-Gorskii (1863-1944) était un homme bien à l'avance sur son temps. En 1907, convaincu que la photographie couleur était la voie de l'avenir, il a obtenu une permission toute spéciale du Tzar pour traverser le vaste empire russe et de prendre des photographies couleurs de tout ce qu'il voyait. Il a réellement tout photographié: des gens, des édifices, des paysages, des chemins de fer, des ponts... tout ça pour produire des milliers de photos couleurs. Comme la photographie couleur n'existait pas encore, son idée était toute simple: enregistrer sur des lames de verre trois expositions de chaque scène en utilisant un filtre rouge, vert et bleu pour chacune d'elles. Le seul hic c'était qu'il n'y avait à l'époque aucune façon d'imprimer ces photos couleurs! Il s'imaginait des projecteurs spéciaux installés dans des locaux de classe "multimédia" au travers de tout l'empire où les enfants pourrait en apprendre plus sur leur vaste pays. Malheureusement, ses plans ne se sont jamais matérialisés: il quitta la Russie en 1918, juste après la révolution, pour ne plus jamais y revenir. Heureusement pour nous, les négatifs RGB ("Red-Green-Blue", ou Rouge-Bleu-Vert) capturant les dernières années de l'empire russe ont survécu et furent achetées en 1948 par la Librairie du Congrès aux États-Unis. Celle-ci a récemment (2004) numérisé ces négatifs et les ont rendus accessibles sur Internet.

Résumé

Le but de ce travail est de générer automatiquement une image couleur à partir des plaques de verre numérisées de la collection Prokudin-Gorskii, et ce avec le minimum d'artefacts visuels possible. Pour ce faire, il vous faudra extraire les trois canaux de couleurs, les agencer un par-dessus l'autre, et les aligner pour que leur combinaison forme une image couleur RGB. Un fichier de code pour débuter vous est fourni ici, mais vous n'êtes pas obligés de l'utiliser. Nous assumons qu'un simple modèle de translation (en x, y) est suffisant pour un aligner les images correctement. Par contre, puisque les plaques de verre sont de très grandes tailles, votre procédure d'alignement devra être relativement rapide et efficace.

Détails

Quelques-unes des images de plaques de verre numérisées (basse et haute résolution) sont disponibles par le lien suivant (à noter que l'ordre des filtres de haut en bas est BGR et non RGB !). Votre programme aura une image de la plaque de verre en entrée et devra produire une image en couleur en sortie. Le programme doit diviser l'image originale en trois images de même dimension. Ensuite, il doit aligner les deuxième et troisième images (G et D) à la première (B). Pour chaque image, vous devez calculer le vecteur de déplacement (x , y) nécessaire à son alignement avec la première.

La façon la plus facile d'aligner les images est d'effectuer une recherche exhaustive sur une fenêtre de déplacements possibles (disons [-15:15] pixels), évaluer chacun de ceux-ci en utilisant une métrique de comparaison, et prendre le déplacement avec le meilleur score. Il existe plusieurs mesures permettant d'évaluer si les images sont bien alignées. La plus simple est la norme L2, aussi connue sous le nom "somme des différences au carré". Comme son nom l'indique, cette mesure se calcule de cette façon:

sum((image1(:)-image2(:)).^2)

Une autre mesure est la corrélation croisée normalisée (CCN), qui est tout simplement un produit scalaire entre deux vecteurs normalisés :

image1 / norm(image1) et image2 / norm(image2)

Notez que dans ce cas particulier, les images devant être alignées n'ont pas réellement les mêmes valeurs de luminosité (car elles représentes différents canaux de couleur). Une mesure plus ingénieuse pourrait alors fonctionner plus adéquatement.

La recherche exhaustive de l'étape précédente deviendra trop lourde si le déplacement de pixels est trop grand (ce qui sera le cas pour les analyses de la plaque de verre à haute résolution). Dans ce cas, vous devrez implémenter une procédure de recherche plus rapide basée sur une pyramide d'images. Une pyramide d'image représente l'image à plusieurs échelles. Généralement, on obtient une pyramide en divisant l'échelle d'un facteur de 2 à chaque étape. On obtient donc une série d'images, qui ne sont que l'image originale à l'échelle 1, 1/2, 1/4, etc. L'alignement d'images se fait de manière séquentielle à partir de l'échelle la plus petite (1/4 par exemple) jusqu'à la plus grande (1) en mettant à jour l'estimé de translation au fur et à mesure. Cela est très facile à implémenter en ajoutant des appels récursifs à votre implémentation initiale à une seule échelle.

En résumé, votre travail sera d'implémenter un algorithme qui, étant donné trois images indépendantes représentant trois canaux de couleurs, produit une seule image couleur en sortie. Tout d'abord, en utilisant des boucles, implantez une version simple à échelle unique faisant l'ajustement sur une fenêtre de déplacements spécifiée par l'utilisateur. Une fois cette version terminée, ajoutez une pyramide d'images pour accélérer le traitement de grandes images. Nous vous fournissons une ébauche de code Matlab qui vous aidera à démarrer (vous n'êtes cependant pas obligés de l'utiliser).

Crédits supplémentaires

Bien que les images en couleurs créées par cette procédure automatique soient souvent étonnamment réalistes, elles sont encore loin des versions restaurées manuellement disponibles sur le site Web de la Librairie du Congrès. Bien entendu, chacune de ces photographies requièrent plusieurs jours de travail avec Photoshop; il faut ajuster les niveaux de couleurs, enlever les taches, ajouter du contraste, etc. Est-il possible de faire certains de ces ajustements automatiquement, sans avoir un être humain d'impliqué directement? Sentez-vous libre d'apporter vos propres approches ou bien de me mentionnez vos idées. Il n'y a pas de "bonne" réponse ici---essayez vos idées et voyez celles qui fonctionnent. Par exemple, la bordure des photographies ont d'étranges couleurs puisque le contenu des trois canaux varient beaucoup pour ceux-ci. Essayez de trouver une façon de détecter automatiquement les bordures pour recadrer l'image, et ainsi se débarrasser de ces imperfections. Indice: l'information dans les bonnes parties de l'image est très similaire sur tous les canaux, mais pas pour les bordures.

Il n'est pas nécessaire d'avoir des filtres couleur pour tester vos algorithmes sur vos propres images. Il suffit de prendre trois photos l'une après l'autre, et d'extraire ensuite le canal "R" de la première, "G" de la deuxième, et "B" de la troisième. Vous pourrez de cette façon simuler ce que M. Prokudin-Gorskii a fait il y a plus de 100 ans avec la technologie d'aujourd'hui. Est-ce que l'alignement est aussi bon quand vous prenez trois photos avec votre appareil? Qu'arrive-t-il s'il y a des éléments dans la scène qui bougent? Expérimentez avec diverses scènes et commentez sur vos résultats.

Livrables

Pour ce travail, vous devrez soumettre votre code et une page Web simple illustrant vos résultats et contenant une courte discussion sur ceux-ci. Pour vous aider à démarrer, nous vous fournissons une ébauche de page web (facultative). L'apparence esthétique du site Web ne sera pas évaluée, mais il est important que les informations soient clairement présentées.

Plus précisément, la page devrait contenir:

Pour la remise de votre travail, créez un fichier tp1.zip qui contient

Attention! La taille limite permise sur Pixel est de 50MB. Assurez-vous que la taille du fichier tp2.zip n'excède pas 50MB.

Finalement, veuillez téléverser votre fichier tp1.zip sur pixel (http://pixel.fsg.ulaval.ca) avant la date limite. Bien entendu, la politique des retards mentionnée dans le plan de cours sera appliquée. Pour toutes questions concernant la procédure de remise ou le travail en tant que tel, envoyez vos questions à l'adresse courriel du cours.

Évaluation

Ce travail est évalué sur 100 points. La répartition des points va comme suit:

Liens rapides

Remerciements

Merci à Alyosha Efros d'avoir créé le TP original qui a servi d'inspiration pour celui-ci!

Retour à la page web du cours.