TP1: Colorisation de l'Empire Russe

Description et approche

Le projet consiste a reconstruire une image couleur à partir de trois images repésentant les canaux RGB de l'image originale. Les images sont des photographies antiques. Chaque élément photographié était en fait photographié avec un filtre permettant d'isoler chaque canal de couleur. Il est donc nécessaire d'aligner les 3 images avant de les combniner afin de former une image couleur. Trois techniques ont été utilisées afin de reconstruire l'image originale. La première technique consiste simplement à essayer plusieurs vecteurs d'alignement, puis de comparer le résultat avec la différence de carrés (SDC) et de conserver le meilleur résultat. La seconde technique est d'utiliser une pyramide à échelles multiples. Chaque niveau de la pyramide représente une échelle différente de l'image. On applique alors la première technique pour trouver la meilleure transformation à cette échelle. Par la suite, on passe au prochain niveau en augmentant l'échelle. On continue jusqu'à optenir l'image dans l'échelle originale. Également, afin d'améliorer les résultat optenus, il est primordial de retirer les bordures et de diviser correctement les 3 images. Pour se faire, une fonction a d'abord été développée afin de permettre de retirer les bordures verticales de l'image. Une seconde fonction a été développée dans le but de trouver les barres du haut, de bas et du milieu de l'image afin de faire la division. Les fonctions se basent sur un principe plutôt simple. Elles calculent la moyenne d'intensité d'une ligne ou d'une colonne (selon quelle bordure on cherche) et fait la différence entre cette moyenne et la moyenne de la ligne précédente. Si la moyenne dépasse un certain seuil, alors on vient de trouver la bordure. Les fonctions partent de l'intérieur de l'image vers la bordure. Bien que la méthode soit plutôt simple, elle offre des résultats satisfaisants.

Approche à une seule échelle

Note: Tous les vecteurs de correction d'alignement sont calculés par rappport au canal bleu

Image 00106v: Matrice d'alignement Rouge [-7, -1], Matrice d'alignement Vert [-12, 1]

Image 00757v: Matrice d'alignement Rouge [-10, 5], Matrice d'alignement Vert [-16, 3]

Image 00888v: Matrice d'alignement Rouge [-14, 0], Matrice d'alignement Vert [-17, 1]

Image 00889v: Matrice d'alignement Rouge [-9, 3], Matrice d'alignement Vert [-17, 2]

\

Image 00907v: Matrice d'alignement Rouge [-9, -1], Matrice d'alignement Vert [-12, 0]

Image 00911v: Matrice d'alignement Rouge [4, -1], Matrice d'alignement Vert [-10, -1]

Image 01031v: Matrice d'alignement Rouge [2, 2], Matrice d'alignement Vert [1, 1]

Image 01657v: Matrice d'alignement Rouge [4, 1], Matrice d'alignement Vert [-1, 1]

Image 01880v: Matrice d'alignement Rouge [-32, 4], Matrice d'alignement Vert [-37, 2]

Approche à échelles multiples

Image 00029u: Matrice d'alignement Rouge [-36, 32], Matrice d'alignement Vert [-87, 15]
Image pleine résolution: result-00029u.jpg

Image 00087u: Matrice d'alignement Rouge [-56, 55], Matrice d'alignement Vert [-111, 38]
Image pleine résolution: result-00087u.jpg

Image 00128u: Matrice d'alignement Rouge [-96, 38], Matrice d'alignement Vert [-185, 25]
Image pleine résolution: result-00128u.jpg

Image 00458u: Matrice d'alignement Rouge [-106, 31], Matrice d'alignement Vert [-160, 5]
Image pleine résolution: result-00458u.jpg
\

Image 00737u: Matrice d'alignement Rouge [-40, 14], Matrice d'alignement Vert [-99, 6]
Image pleine résolution: result-00737u.jpg

Image 00822u: Matrice d'alignement Rouge [-37, 33], Matrice d'alignement Vert [-96, -24]
Image pleine résolution: result-00822u.jpg

Image 00892u: Matrice d'alignement Rouge [-52, 4], Matrice d'alignement Vert [-109, 0]
Image pleine résolution: result-00892u.jpg

Image 01043u: Matrice d'alignement Rouge [115, 16], Matrice d'alignement Vert [114, 9]
Image pleine résolution: result-01043u.jpg

Image 01047u: Matrice d'alignement Rouge [-152, 33], Matrice d'alignement Vert [-167, 20]
Image pleine résolution: result-01047u.jpg

Image 01903u: Matrice d'alignement Rouge [-45, -12], Matrice d'alignement Vert [-77, 2]
Image pleine résolution: result-01903u.jpg

Image 00616u: Matrice d'alignement Rouge [-8, 27], Matrice d'alignement Vert [-62, 15]
Image pleine résolution: result-00616u.jpg

Image 00528u: Matrice d'alignement Rouge [-5, -17], Matrice d'alignement Vert [-54, -9]
Image pleine résolution: result-00528u.jpg

Image 00416u: Matrice d'alignement Rouge [-115, 25], Matrice d'alignement Vert [-170, 20]
Image pleine résolution: result-00416u.jpg
\

Image 00731u: Matrice d'alignement Rouge [-71, 33], Matrice d'alignement Vert [-98, 15]
Image pleine résolution: result-00731u.jpg

Image 01492u: Matrice d'alignement Rouge [-23, 34], Matrice d'alignement Vert [-71, 19]
Image pleine résolution: result-01492u.jpg

Image 00873u: Matrice d'alignement Rouge [-55, 53], Matrice d'alignement Vert [-113, 31]
Image pleine résolution: result-00873u.jpg

Image 00173u: Matrice d'alignement Rouge [-33, 46], Matrice d'alignement Vert [-82, 30]
Image pleine résolution: result-00173u.jpg

Image 00105u: Matrice d'alignement Rouge [-7, 21], Matrice d'alignement Vert [-65, 13]
Image pleine résolution: result-00105u.jpg

Image 00551u: Matrice d'alignement Rouge [-30, 60], Matrice d'alignement Vert [-78, 33]
Image pleine résolution: result-00551u.jpg

Problèmes divers

Les conditions dans lesquelles ces photos ont été prises rend la reconstruction dificile pour certaines et cause donc des distortion des différents canaux lors de la reconstruction. Par exemple, dans l'image 00416u, on voit des personnes au loin qui ont marché entre chaque photo, ou bien dans l'image 00173u les feuilles de l'arbre ont bougé, et finalement toutes les image contenant de l'eau ont une certaine déformation. De plus, certaines photos telles que la 01043u ou la 01031v ont causé certains problèmes lors de la détection de bordure. En effet, la 01031v est très sombre, ce qui rend ma technique de détection moins efficace. Pour sa part, dans l'arrière plan de l'image 01043u, les ligne de la maison en bois étaient détectées comme étant des bordures.

Dans la peau de Prokudin-Gorskii!

Les photos prises peuvent être beaucoup plus difficiles à aligner. En effet, elles peuvent avoir bougé sur un plus grand nombre d'axes et peuvent donc être impossibles à aligner seulement par des translations. Voici les 3 meilleurs résultats que j'ai pu obtenir.

Crédits supplémentaires

J'ai développé une fonction permettant de retirer les bordures de l'image et de de la diviser en trois image. La fonction itère sur les lignes ou colonnes de l'image (selon quelle bordure est recherchée). Elle compare la différence de moyenne d'intensité lumineuse d'une ligne ou colonne à l'autre. Si cette différence dépasse une certain seuil, alors elle considère avoir trouvé une bordure. Cetter fonction est loin d'être parfaite, puisqu'elle peut faire de mauvaises détections à cause de plusieurs facteurs tels que la luminosité moyenne d'une image (une image très sombre 01031v) ou par des objet présents dans l'image (une image avec des lignes dans l'arrière plan 01043u). Il est alors nécessaire de manuellement modifier les paramètres de la fonction afin de corriger les mauvaises détections. Voici un exemple de l'impact que peut avoir le retrait des bordures sur le résultat:

Différence d'alignement avec et sans les bordures:

Image pleine résolution: Image avec bordure et Image sans bordure

Finalement, suite à une mauvaise compréhension des instructions, je pensais que nous devions développer nous même un algorithme pouvant aligner correctement les images de plus grande résolution. J'ai donc développé un autre algorithme d'alignement avant de d'implémenter l'alignement par échelles multiples. Cet algorithme balaie l'image par saut (par exemple 10 sauts d'une translation de 10%), détermine le meilleur déplacement et essaie de nouveau mais seulment sur la zone entourant le meilleur déplacement. La taille des sauts est réduite entre chaque éxécution. L'algoritme continue jusqu'à avoir un saut de 1 pixel. Les images sont toujours comparées à l'aide de la différence de carrés. Les résultats obtenus sont extrêmement similaires à ceux obtenus par l'alignement par échelles multiples. Par exemple, les vecteurs de correction divergent de un pixel sur l'image 00551u. Les vecteurs calculés par l'agorithme d'alignement par saut sont [-30, 61] et [-77, 33], tandis que ceux calculés par l'algorithme d'alignement par échelles multiples sont [-30, 60] et [-78, 33]. Il est très difficile de voir la différence des les images résultantes.

Image pleine résolution: Image reconstruite avec l'algorithme par saut et Image reconstruite par l'algorithme d'alignement par échelles multiples.