J'ai une photo 1443x998 des étoiles (prise avec un appareil photo 35 mm puis scannée) avec les étoiles suivantes aux emplacements de pixels suivants:
Altair x=782, y=532 [19h50m46.9990s RA, +08 52'05.959'' DEC]
Sualocin, x=311, y=146 [20h 39m 38.287s +15 54'43.49'' DEC]
Denebokab, x=1023, y=815 [19h25m29.9005s +03 06' 53.191'' DEC]
Quelle fonction mathématique convertit l'emplacement des pixels en RA / DEC et vice versa? Remarques:
Les étoiles brillantes sont des taches sur l'image; les coordonnées ci-dessus sont à peu près le centre de la goutte, mais peuvent être décalées de + -2 pixels.
Je sais que je peux faire pivoter la sphère céleste de sorte que le centre de mon image ait des coordonnées polaires 0,0. La vraie question est donc "comment trouver cette rotation" (mais voir le point suivant).
Si l'élévation / azimut était linéaire sur les images, ce serait plus facile (euh), mais ce n'est pas le cas: mesurer la distance angulaire avec des photographies
Je peux fournir des emplacements de pixels de plus d'étoiles si cela aide. Je pense que 3 devraient suffire, mais je peux me tromper.
J'ai essayé de choisir 3 étoiles qui étaient "réparties" sur l'image (car je pense que cela réduit les erreurs, je ne sais pas), mais je ne suis pas sûr d'avoir réussi.
Je fais cela pour plusieurs photos et je voudrais une méthode générale.
Faire cela m'aidera à identifier les étoiles plus faibles / les objets Messier / etc. dans l'image.
Je suis sûr que beaucoup d'astrophotographes veulent le faire, mais n'ont pas trouvé de logiciel existant qui le fasse.
EDIT: Merci, whuber! La projection gnomonique est ce qui me manquait. J'avais déjà fait cela en supposant une transformation linéaire:
(* convert RA/DEC to xyz coords on celestial psuedo-sphere of radius 1 *)
radecxyz[ra_,dec_] =
{Cos[ra/12*Pi]*Cos[dec/180*Pi],Sin[ra/12*Pi]*Cos[dec/180*Pi],Sin[dec/180*Pi]};
(* I no longer have any idea how this works *)
astrosolve[x_,y_,z_,xwid_,ywid_] := Module[{a,m,ans,nullans},
m=Array[a,{2,3}];
temp=Solve[{
m.radecxyz[x[[1]],x[[2]]]=={x[[3]]-xwid/2,x[[4]]-ywid/2},
m.radecxyz[y[[1]],y[[2]]]=={y[[3]]-xwid/2,y[[4]]-ywid/2},
m.radecxyz[z[[1]],z[[2]]]=={z[[3]]-xwid/2,z[[4]]-ywid/2}
}];
ans = m /. Flatten[temp];
nullans=Flatten[NullSpace[ans]];
If[nullans.radecxyz[x[[1]],x[[2]]]<0,nullans=-nullans];
Return[{ans,nullans}];
];
où x, y et z étaient chacun des listes à 4 éléments comprenant une étoile RA, une déclinaison, une coordonnée x sur l'image et une coordonnée y sur l'image. xwid et ywid sont la largeur et la hauteur de l'image. Dans ce cas:
astrosolve[
{19.8463886110, 8.8683219443, 782, 532},
{20.6606352777, 15.9120805555, 311, 146},
{19.4249723610, 3.1147752777, 1023, 815},
1443, 998]
{
{{-2250.51, -1182.52, 385.689}, {-166.12, -543.746, -2376.73}},
{0.480698, -0.861509, 0.163497}
}
Maintenant, en faisant référence à "{-2250.51, -1182.52, 385.689}" comme $ frow, "{-166.12, -543.746, -2376.73}" comme $ srow et "{0.480698, -0.861509, 0.163497}" comme $ null, ce sous-programme PHP traduit RA / DEC en coordonnées xy:
# radecxy(ra,dec): converts ra/dec to x,y using a quasi-linear transformation
function radecxy($ra,$dec) {
global $null,$frow,$srow,$xwid,$ywid;
list($x,$y,$z)=array(cos($dec)*cos($ra),cos($dec)*sin($ra),sin($dec));
$dotprod=$null[0]*$x+$null[1]*$y+$null[2]*$z;
if ($dotprod<0) {return(array(-1,-1));}
list($fx,$fy) = array($frow[0]*$x+$frow[1]*$y+$frow[2]*$z,$srow[0]*$x+$srow[1]*$y+$srow[2]*$z);
$fx+=$xwid/2;
$fy+=$ywid/2;
if ($fx<0 || $fy<0 || $fx>$xwid || $fy>$ywid) {
return(array(-1,-1));
} else {
return(array($fx,$fy));
}
}
Malheureusement, je ne sais plus pourquoi cela fonctionne, mais l'utiliser + ajouter des positions d'étoiles connues donne des résultats tolérables (utilisez "voir l'image" pour la voir en taille réelle):
Cependant, comme vous pouvez le voir, les résultats ne sont pas parfaits, ce qui me convainc qu'une transformation linéaire n'était pas la bonne réponse. Je pense que gnomonic pourrait être le Graal que je cherchais.
la source
Pour ce faire, avec le même degré de précision que les astronomes professionnels, il serait en effet difficile. Cela nécessiterait une caractérisation extrêmement précise des distorsions produites par votre objectif et des imperfections du capteur de votre appareil photo. Cependant, vous n'avez probablement pas besoin de ce degré de précision. Il devrait suffire que vous supposiez que votre objectif n'introduit pas de grandes quantités de distorsion (ce qui est une bonne hypothèse pour un objectif de qualité) et que le capteur de votre appareil photo est assez proche d'une grille parfaitement régulière (ce qui est une très bonne hypothèse pour même un appareil photo bon marché).
Il ne reste plus qu'à déterminer la transformation des coordonnées qui décrit l'orientation de la caméra, c'est-à-dire la direction dans laquelle elle a été pointée et le degré de rotation.
Ce que vous recherchez alors s'appelle une transformation affine ou une carte affine. Ce qui est juste un nom de fantaisie pour une matrice par laquelle vous multiplieriez vos coordonnées de pixels pour obtenir vos coordonnées astronomiques. Dans le cas d'une carte affine, cette transformation peut inclure n'importe quel degré de rotation, d'échelle, de cisaillement et de translation.
La signification du composant de rotation est assez évidente. Le facteur d'échelle décrit simplement la quantité de ciel couverte par chaque pixel en termes de RA / Dec. Le cisaillement est une transformation qui ferait que l'image d'un rectangle devienne un parallélogramme, mais il ne devrait y avoir aucun de ces effets dans une image d'objets à l'infini (comme les étoiles). Enfin, le composant de traduction simple ajoute un décalage pour tenir compte du fait que le pixel (x = 0, y = 0) dans votre image ne correspond probablement pas à (RA = 0, Dec = 0).
Parce que vous avez 3 étoiles de référence dans votre image, vous avez suffisamment d'informations pour calculer la relation entre vos coordonnées de pixels et le RA / Dec que vous recherchez. Cela se ferait par ajustement des moindres carrés linéaires (pas les moindres carrés non linéaires comme mentionné ci-dessus) pour déterminer les valeurs des composants de la matrice qui correspondent le mieux à vos coordonnées de pixels à la RA / Dec connue des étoiles de référence. Une fois la matrice établie, vous pouvez ensuite l'appliquer aux coordonnées en pixels des autres étoiles pour obtenir leur RA / Dec.
Bien que je puisse le faire relativement facilement, je ne suis malheureusement pas sûr de savoir comment vous aider à le faire. Cela impliquerait des compétences mathématiques qui dépassent un peu le cadre de photo.SE. Je suis ingénieur optique, mais je ne suis pas très photographe; le logiciel que j'utiliserais pour cela est conçu pour que les ingénieurs effectuent des calculs numériques intensifs, et n'est pas vraiment un outil photographique du tout. Il peut y avoir des moyens de le faire en utilisant des logiciels destinés aux photographes, mais je ne les connais pas.
la source