Par Maxime Guillemette, le 17/01/2019.
Pour le cours GIF-4105 - Photographie algorithmique
Le projet consiste à générer automatiquement une image couleur à partir des plaques de verre numérisées de la collection Prokudin-Gorskii, et ce, avec le minimum d’artifacts visuels possible. Le programme doit donc recevoir en entrée une image telle que
et produire une image telle que
Pour ce faire, les approches suivantes seront utilisées: approche à une échelle et approche à échelles multiples. De plus, des résultats avec des photos personnelles et certaines optimisations seront présentées.
Les résultats obtenus avec l’approche à une seule échelle sont les suivants:
Les résultats obtenus avec l’approche à échelle multiple sont les suivants:
L’approche utilisée pour faire fonctionner cet algorithme a été de premièrement retirer 100 pixels de chaque côté de chaque image. Cela permet de retirer les bordures des images afin d’aligner selon le centre de l’image. Ensuite, une pyramide de l’image originale est formée jusqu’à ce que l’on atteigne une taille d’image de moins de 400 par 400 pixels. La réduction de l’image se fait en filtrant l’image avec un filtre gaussian (gaussian blur) puis en effectuant un downsampling de l’image filtrée. En commençant avec la plus petite, chaque image de la pyramide est alignée de -15 à 15 pixels en x et y et les valeurs d’alignement sont appliquées à l’image suivante, jusqu’à ce que l’on remonte à l’image originale.
Voici les résultats sur des photos prises par moi-même:
Toutes les photos ont été prises avec une caméra de téléphone cellulaire (celle d’un HTC 610S). Les 2 premières ont été prises sans faire d’effort de prendre les 3 photos de façon stable. Les résultats montre que l’algorithme a du mal à aligner les images, mais donne tout de même un résultat qui permet de comprendre le contenu de l’image. Les 2 autres images ont été prises en essayant le plus possible de garder la caméra stable et les résultats sont ainsi beaucoup mieux, particulièrement la 3ème photo.
Calculer l’erreur sur les valeurs RGB peut parfois bruiter le signal d’erreur. C’est-à-dire que l’algorithme peut parfois, dans des cas dégénérés, rencontrer des endroits de l’image ou il n’y a par exemple que du bleu. L’erreur est donc grande pour ces endroits et il est possible que l’erreur minimal soit avec un alignement non optimal. Plus la quantité de pixels est grande, plus ce phénomène a de chances de se produire. En effet, pour les images de type .tif qui on des forêts ou un ciel bleu dans l’image, il arrive que l’alignement ne soit pas parfait, comme le montre le résultat suivant:
Avec un filtre de sobel, appliqué sur les images avant le calcul du score, l’alignement est significativement amélioré, comme le montre le résultat suivant sur la même image:
Le filtre de sobel est un filtre qui effectue un filtrage passe-haut du contenu fréquentiel de l’image, c’est-à-dire qu’il atténue les endroits de l’image où il y a moins de variation. Donc, les contours prennent des valeurs hautes et le reste des valeurs basses. Par conséquent, l’erreur d’alignement est calculée sur l’alignement des contours et non sur l’alignement des couleurs.