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.
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 |
![]() |
![]() |
![]() |
image non alignée |
image alignée |
|
![]() |
![]() |
Les autres images .jpg:
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.
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 |
![]() |
![]() |
drapeaux.jpg |
![]() |
![]() |
table.jpg |
![]() |
![]() |