Recalage d'images / pyramide d'images
Contexte
Sergueï Prokoudine-Gorski (1863-1944) est un photographe russe. Il a eu une idée simple pour produire des photos couleur : enregistrer trois expositions de chaque scène sur une plaque de verre en utilisant un filtre rouge, vert et bleu, puis projeter les images monochromes avec une lumière correctement colorée pour reproduire l'image couleur (l'impression couleur des photos était alors très difficile). En raison de la notoriété qu'il a acquise grâce à ses photos en couleur, y compris le seul portrait en couleur de Léon Tolstoï, il a obtenu la permission et le financement du tsar pour voyager à travers l'Empire russe et le documenter en photographies "couleur". Ses négatifs sur plaque de verre RGB ont été achetés en 1948 par la Library of Congress et sont maintenant numérisés et disponibles en ligne.
Objectifs
Le but est de produire automatiquement une image en couleur avec le moins d'artefacts visuels possible. Il faudra donc extraire les images des trois canaux couleur et les aligner pour qu'elles forment une seule image couleur RGB. Les images haute résolution sont assez grandes et vous aurez donc besoin d'un algorithme d'alignement rapide et efficace. On se propose d'implémenter un algorithme d'alignement multi-échelle (en utilisant les pyramides d'images) qui recherche sur une fenêtre de déplacements spécifiée par l'utilisateur.
Données
Indications
- Les images sont, de haut en bas, dans l'ordre BGR. On pourra, dans un premier temps, simplement diviser l'image de départ en 3 parties égales.
- On suppose qu'une simple translation suffira à produire un recalage satisfaisant.
- Pour effectuer un recalage, il existe des algorithmes d'optimisation sophistiqués permettant de chercher les meilleurs paramètres de transformation. Ici, vous implémenterez une simple recherche exhaustive, consistant à chercher, parmi toutes les translations (en se limitant à un nombre maximum de pixels), celle qui recale le mieux chaque canal.
- Vous aurez donc besoin d'une mesure de différence/similarité entre 2 images. Les plus classiques sont
- Somme des différences au carré (SSD): sum((I-J)**2)
- Coefficient de corrélation:
![rho](correlation.png)
- Information mutuelle :
![rho](InfoMutuelle.png)
→ Il faut choisir parmi ces critères en fonction de la relation supposée entre les intensités des 2 images à recaler (une fois le recalage effectué).
- La recherche exhaustive devient rapidement impossible si la plage de recherche ou la résolution de l'image sont trop grandes. Pour éviter cela, on mettra en œuvre une stratégie de recherche "coarse-to-fine" en utilisant une pyramide d'images. Une pyramide d'images représente l'image à plusieurs échelles et le traitement se fait séquentiellement à partir de l'échelle la plus grossière (image la plus petite) et en descendant dans la pyramide, en actualisant l'estimation du déplacement au fur et à mesure.
- NumPy for Matlab users
- Pyramide gaussienne (Python)
- Information Mutuelle (Python)
- Afficher et charger une image
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import image as img
print("chargement de l'image")
I = img.imread('../01887u.tif')
print(np.mean(I))
rows, cols= I.shape
print("rows="+str(rows)+" cols="+str(cols))
plt.figure(1)
plt.imshow(I,cmap="gray")
plt.title("01887u")
plt.axis('off')
- Appliquer une translation à une image (Python)
from skimage import transform as tf
def translation(I, a , b):
tform = tf.EuclideanTransform(rotation=0, translation=( a, b)) #ATTENTION X ET Y SONT INVERSES
return(tf.warp(I, tform))
fonctions utiles (MATLAB) : tp6_donnees.zip
Améliorations possibles
- Découpage automatique des 3 canaux (en se débarrassant des bordures blanches et noires).
- Ajustement automatique du contraste/balance des blancs
- Améliorations du "mapping" des couleurs: il n'y a pas de raison de supposer (comme nous l'avons fait) que les filtres rouge, vert et bleu utilisés par Produkin-Gorskii correspondent directement aux canaux R, G et B dans l'espace couleur RGB. Essayez de trouver un "mapping" qui produise des couleurs plus réalistes (et qui rende peut-être moins nécessaire l'équilibrage automatique des blancs).
- Meilleurs "features": au lieu de recaler en se basant sur la similarité RGB, tester les gradients, les contours
- Meilleures transforamtions: ajouter rotation/scaling
- Tester sur d'autres images: dans de nombreux domaines, comme l'astronomie, les images sont également acquises canal par canal. Souvent, les canaux ne correspondent pas à la lumière visible, mais les artistes de la NASA empilent ces canaux ensemble pour créer des images en fausses couleurs. Vous trouverez ici un tutoriel pour traiter les images du télescope spatial Hubble. Autre exemple: des images comme celle-ci d'une éjection de masse coronale construite en combinant des images ultraviolettes du Solar Dynamics Observatory.