TP1: Coloration de l'empire russe

Sébastien Marsaa-poey

Présentation

L'objectif de ce travail est de créer une image couleur à partir de trois photographies noir et blanc, qui représentent les canaux Bleu, Vert et Rouge de l'image. Le résultat doit comporter un minimum d'artefacts visuels, et la procédure doit être efficace et rapide. Cette opération est appliquée à des images de la collection Prokudin-Gorskii, ainsi qu'à trois autres photographies.

Approche à une seule échelle

Les images de la collection Prokudin-Gorskii contiennent les 3 canaux sur une seule plaque. La première étape consiste à découper l'image en 3 pour séparer ces canaux. Il faut ensuite aligner correctement les 3 canaux R, G et B pour obtenir une image nette. La méthode retenue consiste à appliquer des décalages successifs sur les canaux G et R, et pour chaque décalage de calculer la corrélation associée. Chaque score de corrélation est mémorisé. On retient ensuite le décalage qui maximise la corrélation; cela correspond à l'alignement des canaux. Les images ont des bordures qui ne contiennent pas d'information utile, et qui ne doivent pas être prises en compte dans le calcul de la corrélation. C'est pourquoi on supprime 10% de marge de l'image avant les calculs. Le calcul de la corrélation est codé à la main dans la fonction SDC, et peut aussi être remplacé par la fonction numpy.linalg.norm. Puisque les images sont petites, on se limite à un décalage entre -15 et +15 sur les axes verticaux et horizontaux.
Ci-dessous un exemple sur l'image 00911v.jpg. Le décalage calculé est (13 -1) pour R et (1 -1) pour G.

canal B

canal R

canal G

canal B de 00911v canal R de 00911v canal G de 00911v

image non alignée

image alignée

00911v non aligné 00911v aligné

Les autres images .jpg:

image non alignée

image alignée

00106v.jpg
décalage R: (9 -1)
décalage G: (4 1)

00106v non aligné 00106v non aligné

00757v.jpg
décalage R: (5 5)
décalage G: (2 3)

00757v non aligné 00757v non aligné

00888v.jpg
décalage R: (12 0)
décalage G: (6 1)

00888v non aligné 00888v non aligné

00889v.jpg
décalage R: (4 3)
décalage G: (2 2)

00889v non aligné 00889v non aligné

00907v.jpg
décalage R: (6 0)
décalage G: (2 0)

00907v non aligné 00907v non aligné

01031v.jpg
décalage R: (4 2)
décalage G: (1 1)

01031v non aligné 01031v non aligné

01657v.jpg
décalage R: (11 1)
décalage G: (5 1)

01657v non aligné 01657v non aligné

01880v.jpg
décalage R: (14 4)
décalage G: (6 2)

01880v non aligné 01880v non aligné

Approche à échelles multiples

Les images .tif ont une résolution bien supérieure à la résolution des images .jpg. L'alignement nécessite des décalages de plusieurs dizaines de pixels. Reprendre la méthode précédente en augmentant l'intervalle de décalage serait très couteux en terme de temps de calcul. En effet, pour des décalages entre -N et +N, il faudrait calculer (2N+1)^2 fois la corrélation.
La solution utilisée fonctionne avec une approche à échelles multiples. La taille de l'image est divisée par 2 jusqu'à être inférieure à 300x300. Sur cette petite image, on applique l'approche à une seule échelle pour déterminer un décalage entre -15 et +15. On propage ensuite le décalage aux images d'échelles supérieures, en affinant avec un décalage supplémentaire entre -3 et +3 à chaque remontée d'un facteur d'échelle.
Cette méthode montre certaines limites lorsque l'image comporte peu de structure, c'est à dire peu de hautes fréquences. La corrélation entre les canaux est peu pertinente dans ces cas. Si un canal est très différent des deux autres, on rencontre aussi des problèmes. On le voit par exemple sur l'image 01573u.tif. Cette image est très majoritairement verte, donc le canal vert a des valeurs très différentes des canaux rouge et bleu.

00029u.tif
décalage R: (91 33)
décalage G: (39 16)

00029u non aligné

01338u.tif
décalage R: (-1 142)
décalage G: (9 68)

01338u non aligné

00087u.tif
décalage R: (107 55)
décalage G: (48 38)

00087u non aligné

01339u.tif
décalage R: (23 158)
décalage G: (18 76)

01339u non aligné

00128u.tif
décalage R: (51 38)
décalage G: (35 25)

00128u non aligné

01340u.tif
décalage R: (12 141)
décalage G: (10 67)

01340u non aligné

00458u.tif
décalage R: (87 32)
décalage G: (42 5)

00458u non aligné

01356u.tif
décalage R: (-4 101)
décalage G: (1 45)

01356u non aligné

00737u.tif
décalage R: (49 14)
décalage G: (14 6)

00737u non aligné

01360u.tif
décalage R: (16 118)
décalage G: (18 56)

01360u non aligné

00822u.tif
décalage R: (125 33)
décalage G: (27 25)

00822u non aligné

01378u.tif
décalage R: (28 103)
décalage G: (27 40)

01378u non aligné

00892u.tif
décalage R: (42 4)
décalage G: (16 2)

00892u non aligné

01381u.tif
décalage R: (8 97)
décalage G: (6 49)

01381u non aligné

01043u.tif
décalage R: (11 17)
décalage G: (-16 10)

01043u non aligné

01570u.tif
décalage R: (31 227)
décalage G: (27 113)

01570u non aligné

01047u.tif
décalage R: (71 33)
décalage G: (24 20)

01047u non aligné

01590u.tif
décalage R: (-9 175)
décalage G: (-4 78)

01590u non aligné

01573u.tif
décalage R: (42 146)
décalage G: (3 0)

01573u non aligné

Mettez-vous dans la peau de Prokudin-Gorskii!

Pour recréer l'expérience de Prokudin-Gorskii, j'ai pris trois photos d'une même scène . Pour chacune d'entre elle j'en ai extrait un canal différent pour obtenir trois images noir et blanc, qui contiennent chacune l'information d'une couleur. J'ai ensuite appliqué l'approche à échelles multiples à ces images. On remarque qu'il y a de faibles décalages entre les canaux, qui disparaissent après traitement. Les seuls artefacts qui subsistent sont sur les objets qui ont bougés entre les prises de vues: les drapeaux qui flottent au vent, ou le bras en arrière-plan sur la photo de la table.
Zoomez pour voir les artefacts sur les images non alignées.

image non alignée

image alignée

Terre.jpg
décalage R: (-2 33)
décalage G: (4 28)

Terre.jpg non aligné Terre.jpg non aligné

drapeaux.jpg
décalage R: (17 -15)
décalage G: (6 8)

drapeaux.jpg non aligné drapeaux.jpg non aligné

table.jpg
décalage R: (-3 -7)
décalage G: (-12 -13)

table.jpg non aligné table.jpg non aligné