Fonction d'ajustement

L'algorithme suivant est issu du site FOCAS Automatix Catalog Matching

Soit deux images à additionner, si on additionnait le point de coordonnée (x,y) de l'image A avec le point de même coordonnée de l'image B, le résultat ne serait pas bon car deux images astronomiques même prises avec un court délai peuvent subir une translation, une rotation voir même une homothétie.

Fonction affine d'ajustement

Connaissant les positions des étoiles sur les deux images, le principe est de trouver les coefficients a,b,c,d,e et f répondant à la fonction suivante :

x' = a*x + b*y + c
y' = d*x + e*y + f

(x,y) représente les coordonnées d'un pixel de l'image A et (x',y') la correspondance de ce point dans l'iamge B.

Cette fonction affine permet de prendre en compte une translation, une rotation et une homothétie. La translation est donnée par les points c et f d'un vecteur de translation. Le facteur d'homothétie est donnée par la racine carrée de (a*e-b*d). Le facteur de rotation est donnée par la matrice (a b d e) normalisée.

Pour vérification, dans le cas d'une addition de photos classique, sans rotation de champs, vous devez avoir une équation du type :

x' = 1*x + 0*y + c
y' = 0*x + 1*y + f

Résolution de l'équation

Pour trouver les coefficients de cette équation, nous devons résoudre les problèmes suivants:

Nous connaissons les étoiles de chaque image. Une étoile est définie par les coordonnées de son centre et la valeur de son intensité. Ces données sont stockées dans un tableau de structure. Mais nous n'avons pas les correspondances des étoiles entre les deux images. Nous pouvons estimer que les étoiles les plus brillantes d'une image doivent être également les étoiles les plus brillantes de l'autre image. Entre les deux images, les étoiles peuvent avoir des intensités différentes (ce qui changerait le tri des étoiles les plus brillantes) et des étoiles ont pu apparaitre ou disparaitre …

Une fois que l'on connait six couples de correspondances d'étoiles entre les images A et B, la fonction affine peut se calculer par interpolation par la méthode des moindres carrés. Cette fonction sera validée si les six étoiles de l'image les points (x',y') calculés via la fonction sont tous proches de ceux qui ont servi à l'interpolation. Cette propriété permet donc de vérifier la validité des correspondances des couples.

Les correspondances sont trouvées par la méthode des triangles…

Les étapes de l'algorithme

Bref pour trouver les correspondances entre les étoiles, nous allons suivre les étapes suivantes :

  1. On traite image par image. La première image lue est considérée comme l'image de base pour les ajustements.
  2. On créé les triangles à partir des 20 étoiles les plus brillantes de l'image
  3. Si on est sur la première image, on garde ces triangles et ces étoiles comme références (Tableaux TrianglesA et EtoilesA). On génère une image résultant vierge de la taille de cette image et on recopie chaque pixel.
  4. Si on n'est pas sur la première image, on stocke les étoiles dans le tableau EtoilesB et les triangles générés sont dans TrianglesB
  5. On calcul la fonction affine permettant de passer de l'image B vers l'image A et on additionne les pixels de B sur l'image générée en utilisant la fonction trouvée.

Les triangles

Les triangles sont stockés dans une structure chainée /

struct triangle
{
  int iA;
  int iB;
  int iC;
  float xt;
  float yt;
  struct triangle *suivant;
};

Les indices iA,iB et iC sont des indices qui vont de 1 à 20. Ils représentent les 20 plus brillantes étoiles. Les étoiles sont stockées dans une structure chainée, également. Un des champs de cette structure est l'indice qui fait le lien entre les deux structures. L'interet de cette méthode est de ne pas répéter les informations de positions des étoiles.

Les nombres xt et yt, sont des nombres définis par les divisions des longueurs des cotés du triangle. Les trois longueurs d'un triangle sont calculés par la formule sqrt{(x1-x2)^2-(y1-y2)^2} avec (x1,y1) les coordonnées du premier points et (x2,y2), les coordonnées du deuxième point. Les trois longueurs sont classés en ordre décroissant a,b,c. Alors xt = b/a et yt = c/a

On peut définir un espace à deux dimensions des triangles. Les absices représentent la grandeur xt et les ordonnées représentent la grandeur yt.

Dans cette espace deux triangles (T1 et T2) sont proches si la distance entre les deux points de coordonnées (xt1,yt1) et (xt2,yt2), est inférieur à un epsilon défini. On devrait utiliser une racine carré mais si on élève epsilon au carré, le résultat est le même avec un calcul de racine carré en moins: (xt1-xt2)^2 - (yt1-yt2)^2 < varepsilon^2

Correspondance et Vote

Nous définissons un tableau à deux dimensions de 20×20. Le 20 représente le nombre d'étoiles sélectionnées dans chaque ensemble A et B.

L'algorithme va comparer l'ensemble des triangles avec la méthode ci-dessus. Pour chaque triangle de l'ensemble A qui correspond à un triangle de l'ensemble B, nous allons ajouter 1 aux trois cases du tableau des votes correspondants aux coordonnées de chacun des trois triangles.

Par exemple, soit un triangle A défini par les trois indices 2,4,8 qui correspondent avec le triangle de B (7,10,12), nous allons faire +1 dans les cases vote[2][7],vote[4][10] et vote[8][12].

L'idée est que les cases de vote qui ont le plus de vote à la fin de la comparaison des triangles représentent des correspondances d'étoiles entre A et B.

 
apa/theorie/ajustement.txt · Dernière modification: 2008/01/08 17:37 par davidl
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki