Introduction

Le but de ce projet est de recomposer une image couleur à partir de 3 images ayant seulement 3 canaux de couleurs différents (rouge, vert et bleu). Pour ce faire, la stragégie employée consiste à aligner deux des canaux de couleur sur un canal de référence qui sert de base pour les 2 autres.

Ainsi, on aligne d’abord l’image du canal vert sur celle du bleu et ensuite, celle du rouge sur celle du bleu. Pour les deux procédures, on note le vecteur de déplacement (x,y).

Avantarrow Apres

Partie 1: approche à une seule échelle

La première approche tentée consiste à tester une plage de déplacement entre -15 et 15 autant en x que en y. Pour chaque déplacement testé, on calcule un score basé sur l’intensité des deux images (somme des différences au carré (SDC)). De cette façon, on peut assumer que le vecteur de déplacement ayant le score le plus faible est le meilleur alignement, car l’intensité entre chaque canal est relativement similaire. Il est préférable de de ne pas calculer le score sur l’ensemble de tous les pixels de la photo, voici un exemple où le socre est calculé sur toute la photo (gauche) vs où 5% de chaque côté de la photo ne sont pas considéré dans le calcul du score (droite):

Avant apres

On peut voir qu’en ne considérant pas les bordures, le résultat est nettement meilleur. Voici l’ensemble des photos recombinées:

Positions alignement vert sur bleu
Colone 1 Colone 2 Colone 3
Ligne 1 (1,4) (2,2) (1,1)
Ligne 2 (3,2) (0,2) (1,5)
Ligne 3 (1,6) (-1,1) (2,6)
Positions alignement rouge sur bleu
Colone 1 Colone 2 Colone 3
Ligne 1 (-1,10) (3,4) (2,4)
Ligne 2 (5,5) (-1,6) (1,11)
Ligne 3 (0,12) (-1,13) (4,14)

Partie 2: Approche à échelles multiples

L’approche à échelles multiples est similaire à l’approche à échelle simple, mais elle est beaucoup plus adéquate pour des images à haute résolution. On commence d’abord par trouver le déplacement pour une image qui a une résolution plus faible, pour ensuite passer à une image qui a une meilleure résolution et appliquer l’approche à une échelle à partir du point de départ de l’image à plus petite résolution. On peut répéter le processus autant de fois que l’on juge nécessaire. Dans le cadre de ce travail, les tailles ayant 1/8, 1/4, 1/2 et 1 fois la résolution initiale sont utilisé pour trouver l’alignement. Voici les résultats sur les images obligatoires:

On peut voir que les résultats sont assez bons pour la plupart des photos, il y a très peu de “ghosting”. Voici la liste des photos choisies :

Les résultats sont encore bons pour la plupart, sauf la troisième photo où on remarque un peu de ghosting sur l’homme qui tient son enfant. Il est difficile d’identifier pourquoi cette photo en particulier ne fonctionne pas bien avec l’algorithme.

Partie 3: Mettez-vous dans la peau de Prokudin-Gorskii! (Photos sélectionnées)

On tente ici de recréer l’expérience en utilisant les canaux RGB de photos prises par nous même. Voici les canaux de couleur extrait des 9 photos différentes qui serviront à reproduire l’expérience:

Voici le résultat de l’assemblage:

Partie bonnus: égalisation d’histogrammes

Pour améliorer les photos, on peut tenter d’égaliser les histogrammes des valeurs d’intensité de chacun de nos canaux. Voici une comparaison d’une photo avant et après:

avant après

Sur cette exemple, on voit que les couleurs semblent mieux définies, la photo semble plus réelle. Voici l’ensemble des photos qui ont été modifiées:

On peut constater que dans la plupart des cas, l’égalisation d’histogramme ajoute du réalisme aux photos.

Partie bonnus: essaie d’algorithme pour retirer les bordures

Dans cette section, j’ai tenté de penser à une façon originale pour retirer les bordures nuisibles de façon automatique. L’intuition de base était de considérer l’endroit où la différence entre les intensités des canaux est la plus grande sur chacun des 4 côtés. Une mesure simple à calculer pour tenter de mesurer cette différence est l’écart type entre les 3 canaux. Voici un exemple d’un graphique des écart types des 3 canaux (heatmap) qui permet de mieux visualiser:

On peut voir que les bordures passent d’une petite barre jaune (valeur haute) à soit du rouge ou noir (plus faible). Le but est donc de trouver la position de la plus grande différence pour chacun des côtés. Voici les résultats obtenus:

avant après

Les résultats ne sont pas excellents, mais marchent tout de même bien pour certaines photos. On peut tout de même être satisfait de l’efficacité de cette algoritme maison. Il serait surement possible d’améliorer les résultats en optimisant davantage le processus de sélection des différences d’écart type.