Travaux pratique #1 par Philippe Babin

Une seule échelle (main_01_petite_echelle.m)

Le but du travaux pratique #1 est la restoration de photos du photographe Sergei Mikhailovich Prokudin-Gorskii. Pour ce faire, les images sont séparé en 3 images de couleurs et la bordure est enlevé. Chaque image coloré est superposé l'un sur l'autre et la somme des différences au carré (SDC) est utilisé pour estimer l'erreur d'alignement. La fonction circshift est utilisé pour déplacer les images, elle a comme conséquence que des extrémités de l'image se retrouve dans le côté opposé. Pour évité que ses erreurs nuissent à alignement l'image est recadré pour tenir compte uniquement de la région d'intérêt de l'image.

Les images qui ont posé le plus de problème sont 00907v.jpg et 00029u.tif. Ces deux images ont une grande quantité de bleu, cela à pour effet qu'il est difficile d'aligner l'image bleu avec l'image rouge. La solution à ce problème a été de changer la couleur avec laquelle les comparaisons sont faites en passant du bleu au vert. Cela résoue le problème, puisque là où la photo était rouge, il y avait beaucoup plus de change d'avoir du vert que du bleu. L'autre problème de ses images est la présence de taches et d'égratignures. L'image a été recadré afin de réduire l'influence de ses éléments.

Image Translation Aperçu
00106v.jpg G => [4, 1]
R => [9, -1]
00757v.jpg G => [2, 3]
R => [5, 5]
00888v.jpg G => [6, 1]
R => [12, 0]
00889v.jpg G => [2, 2]
R => [4, 3]
00907v.jpg G => [3, 4]
R => [3, 3]
00911v.jpg G => [1, -1]
R => [13, -1]
01031v.jpg G => [1, 1]
R => [3, 2]
01657v.jpg G => [5, 1]
R => [11, 2]
01880v.jpg G => [6, 2]
R => [14, 4]

Multiéchelle (main_02_multiple_echelle.m)

L'algorithme utilisé pour utilise le même principe qu'à une échelle. Tout d'abord l'image est redimensionné à 1/8 de la taille originelle et aligné en utilisant le même procédé qu'à une seule échelle. Ensuite, les étapes sont recommencées pour l'échelle 1/4, 1/2 et finalement 1. Entre chaque saut d'échelle, l'alignement trouvé à l'étape précédent est utilisé comme base pour tester les alignements.

Image Translation Aperçu
cliquez pour visionner
00087u.tif G => [47, 39]
R => [107, 56]
00128u.tif G => [35, 26]
R => [51, 38]
00458u.tif G => [42, 6]
R => [87, 32]
00737u.tif G => [14, 7]
R => [49, 15]
00822u.tif G => [57, 25]
R => [125, 33]
00892u.tif G => [16, 3]
R => [42, 5]
01043u.tif G => [-17, 9]
R => [11, 16]
00029u.tif G => [39, 15]
R => [91, 46]
01047u.tif G => [24, 20]
R => [72, 33]
00602u.tif G => [53, 32]
R => [122, 43]
00603u.tif G => [41, 7]
R => [120, 10]
00604u.tif G => [61, 3]
R => [131, -8]
00605u.tif G => [51, 13]
R => [111, 11]
00606u.tif G => [44, 12]
R => [97, 3]
00607u.tif G => [60, 14]
R => [130, 17]
00608u.tif G => [54, 26]
R => [117, 33]
00609u.tif G => [-33, 15]
R => [12, 26]
01050u.tif G => [32, 1]
R => [78, -12]
01055u.tif G => [23, 22]
R => [58, 25]

Dans la peau de Prokudin-Gorskii (main_03_photo_perso.m)

Les photos ont été prise avec la caméra sur un support, cela a donné des images très bien aligné. La première image est la moins bien aligné, on peut voir que les oreilles du chat se sont déplacées entre les trois photos. Sur la deuxième image, il y a presque aucun désalignement, car le sujet est immobile. Sur la troisième image, on peut voir que encore les oreilles du chat se sont déplacées.

La première image a été la seule à être difficile à aligner. L'image est presque entière bleu, il a fallut utiliser le vert au lieu du bleu pour alignement.

Image 1 Rouge Image 2 Vert Image 3 Bleu Image aligné
cliquez pour visionner
+ + =
+ + =
+ + =

Détection automatique des bordures (main_04_border_detection.m)

Pour détecter les bordures, j'ai fait comme assumption que l'image est toujours plus bruité que sa bordure. Puisque la bordure est formé de ligne presque entière noir ou blanche, il y a beaucoup moins de bruit dans le reste de l'image. L'algorithme utilise l'entropie de Shannon pour déterminer quel partie de l'image est uniforme et quel partie est bruité. Pour trouver la bordure latéral, l'entropie des premières colonnes est calculé, la colonne la plus à droite avec une entropie en dessous d'un certain threshold est considéré comme la bordure.

La figure 1 montre que la forme typique de l'entropie des colonnes d'une image. Le bord de l'image est formé de deux bordures, une blanche et une noir. Les premières colonnes ont une entropie plus petit que 2. Au passage de blanc à noir, il y a un pic entropie, suivit d'une vallée causé par la bordure noir. C'est la fin de cette vallée que l'on cherche à détecter.

La figure 2 montre la limitation de cet algorithme. Dans l'image utilisé, le haut de l'image comporte un ciel presque complètement uniforme et donc avec une faible entropie. Une partie du haut de l'image est perdu, puisque l'algorithme détecte le ciel comme faisant partie de la bordure. L'autre limitation de l'algorthme est que la présence de tache ou d'écriture sur la bordure fait augmenter son entropie.

Figure 1 Figure 2
Entropie des colonnes Entropie des colonnes
avec bordure => sans bordure

White balance et réparation de taches (main_05_white_balance.m)

Pour améliorer les images, tous d'abord un white-balance est fait avec un algorithme inspiré de celui du logiciel GIMP. L'algorithme détermine la valeur des 5ème percentiles et 95ème percentiles de chaque canal de couleur. Ensuite, l'histograme de chaque canal est étiré de sorte que le 5ème percentile devienne la valeur minimum (0.0) et le 95ème percentile devienne la valeur maximum (1.0). Utilisation de percentile évite que certains pixels particulière sombre ou blanc (outlier) ne viennent pas surinfluencer le white balance.

Ensuite, une réparation des taches semi-manuel est fait. Cela fonctionne sensiblement comme le "stamp tool" de photoshop Pour enlever une tache, il suffit de selectionner la partie de l'image où la tache est présente et de fournir une autre zone de l'image avec un texture similaire, mais sans tache. Dans la plupart des images avec une tache, il y a uniquement une des couleurs qui est différente des autres. La différence entre la zone propre sans tache et avec tache est fait dans le canal de couleur ayant l'erreur. La différence est ensuite binairalize pour avoir un mask. La zone dans le mask a sa couleur corrigé.

White Balance

Avant white balance Après white balance

Réparation de taches

Après white balance
Avant enlever les tache
Après enlever les tache