Ich habe ein 1443x998-Bild der Sterne (aufgenommen mit einer 35-mm-Kamera und dann gescannt) mit den folgenden Sternen an den folgenden Pixelpositionen:
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]
Welche mathematische Funktion konvertiert die Pixelposition in RA / DEC und umgekehrt? Anmerkungen:
Helle Sterne sind Blobs auf dem Bild. Die obigen Koordinaten sind ungefähr die Mitte des Blobs, können jedoch um + -2 Pixel abweichen.
Ich weiß, dass ich die Himmelskugel so drehen kann, dass die Bildmitte Polarkoordinaten 0,0 hat. Die eigentliche Frage ist also "wie man diese Rotation findet" (aber siehe nächster Punkt).
Wenn Höhe / Azimut in Bildern linear wären, wäre dies einfach (er), aber nicht: Messen des Winkelabstands mit Fotos
Wenn das hilft, kann ich Pixelpositionen mit mehr Sternen angeben. Ich glaube, 3 sollte ausreichen, aber ich könnte mich irren.
Ich habe versucht, 3 Sterne auszuwählen, die über das Bild "verteilt" waren (weil ich denke, dass dies den Fehler reduziert, nicht sicher), bin mir aber nicht sicher, ob es mir gelungen ist.
Ich mache das für mehrere Bilder und möchte eine allgemeine Methode.
Auf diese Weise kann ich schwächere Sterne / Messier-Objekte / usw. auf dem Bild identifizieren.
Ich bin sicher, dass viele Astrofotografen dies tun möchten, aber keine vorhandene Software gefunden haben, die dies tut.
EDIT: Danke, whuber! Die gnomonische Projektion hat mir gefehlt. Ich hatte dies bereits unter der Annahme einer linearen Transformation getan:
(* 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}];
];
Dabei waren x, y und z jeweils 4-Element-Listen, die aus einem Stern RA, einer Deklination, einer x-Koordinate auf dem Bild und einer y-Koordinate auf dem Bild bestehen. xwid und ywid sind die Breite und Höhe des Bildes. In diesem Fall:
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}
}
Unter Bezugnahme auf "{-2250.51, -1182.52, 385.689}" als $ frow, "{-166.12, -543.746, -2376.73}" als $ srow und "{0.480698, -0.861509, 0.163497}" als $ null, Diese PHP-Subroutine übersetzt RA / DEC in xy-Koordinaten:
# 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));
}
}
Leider habe ich keine Ahnung mehr, warum dies funktioniert, aber wenn Sie es verwenden + bekannte Sternpositionen hinzufügen, erhalten Sie tolerierbare Ergebnisse (verwenden Sie "Bild anzeigen", um es in voller Größe zu sehen):
Wie Sie jedoch sehen können, sind die Ergebnisse nicht perfekt, was mich davon überzeugt, dass eine lineare Transformation nicht die richtige Antwort war. Ich denke, Gnomonisch könnte der Gral sein, den ich suchte.
quelle
Dies mit der gleichen Präzision zu tun, die professionelle Astronomen tun, wäre in der Tat schwierig. Es würde eine äußerst genaue Charakterisierung der von Ihrem Objektiv verursachten Verzerrungen und der Unvollkommenheiten im Sensor Ihrer Kamera erfordern. Allerdings benötigen Sie diesen Genauigkeitsgrad wahrscheinlich nicht. Es sollte für Sie ausreichend sein anzunehmen, dass Ihr Objektiv keine großen Verzerrungen hervorruft (was eine gute Annahme für ein Qualitätsobjektiv ist) und dass Ihr Kamerasensor ziemlich nahe an einem vollkommen regelmäßigen Raster liegt (was eine sehr gute Annahme für ist sogar eine billige Kamera).
Alles, was bleibt, ist die Koordinatentransformation zu erarbeiten, die die Ausrichtung der Kamera beschreibt, dh die Richtung, in die sie gerichtet war, und den Grad, in dem sie gedreht wurde.
Was Sie dann suchen, wird als affine Transformation oder affine Karte bezeichnet. Dies ist nur ein ausgefallener Name für eine Matrix, mit der Sie Ihre Pixelkoordinaten multiplizieren würden, um Ihre astronomischen Koordinaten zu erhalten. Im Fall einer affinen Karte kann diese Transformation einen beliebigen Grad an Rotation, Skalierung, Scherung und Translation umfassen.
Die Bedeutung der Rotationskomponente ist ziemlich offensichtlich. Der Skalierungsfaktor beschreibt einfach, wie viel des Himmels von jedem Pixel in Bezug auf RA / Dez bedeckt ist. Scherung ist eine Transformation, die das Bild eines Rechtecks zu einem Parallelogramm machen würde, aber es sollte keinen dieser Effekte in einem Bild von Objekten im Unendlichen (wie Sternen) geben. Schließlich fügt die Übersetzungskomponente einfach einen Versatz hinzu, um die Tatsache zu berücksichtigen, dass das Pixel (x = 0, y = 0) in Ihrem Bild wahrscheinlich nicht (RA = 0, Dec = 0) entspricht.
Da Ihr Bild 3 Referenzsterne enthält, verfügen Sie über genügend Informationen, um die Beziehung zwischen Ihren Pixelkoordinaten und dem gesuchten RA / Dec zu berechnen. Dies würde durch lineare Anpassung der kleinsten Quadrate (nicht wie oben erwähnt nichtlineare kleinste Quadrate) erfolgen, um die Werte der Matrixkomponenten zu bestimmen, die Ihren Pixelkoordinaten am besten mit der bekannten RA / Dez der Referenzsterne übereinstimmen. Sobald die Matrix erstellt ist, können Sie sie auf die Pixelkoordinaten anderer Sterne anwenden, um deren RA / Dez zu erhalten.
Obwohl ich dies relativ einfach tun könnte, bin ich mir leider nicht sicher, wie ich Ihnen dabei helfen kann. Es würde einige mathematische Fähigkeiten beinhalten, die etwas über den Rahmen von photo.SE hinausgehen. Ich bin Optiker, aber kein großer Fotograf. Die Software, die ich dafür verwenden würde, wurde für Ingenieure entwickelt, um numerische Hochleistungsberechnungen durchzuführen, und ist überhaupt kein fotografisches Werkzeug. Es gibt möglicherweise Möglichkeiten, dies mit Softwarepaketen zu tun, die sich an Fotografen richten, aber ich weiß nichts darüber.
quelle