Saya memiliki gambar 1443x998 dari bintang-bintang (diambil dengan kamera 35mm dan kemudian dipindai) dengan bintang-bintang berikut di lokasi piksel berikut:
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]
Apa fungsi matematika yang mengubah lokasi piksel ke RA / DEC dan sebaliknya? Catatan:
Bintang terang adalah gumpalan dalam gambar; koordinat di atas kira-kira pusat gumpalan, tetapi mungkin tidak aktif dengan + -2 piksel.
Saya tahu saya bisa memutar bola angkasa sehingga bagian tengah gambar saya memiliki koordinat kutub 0,0. Jadi pertanyaan sebenarnya adalah "bagaimana menemukan rotasi ini" (tetapi lihat poin selanjutnya).
Jika elevasi / azimuth linear dalam gambar, ini akan mudah (er), tetapi tidak: Mengukur jarak sudut dengan foto
Saya dapat memberikan lokasi piksel lebih banyak bintang jika itu membantu. Saya percaya 3 harus cukup, tetapi saya bisa salah.
Saya mencoba memilih 3 bintang yang "tersebar" di seluruh gambar (karena saya pikir itu mengurangi kesalahan, tidak yakin), tetapi saya tidak yakin saya berhasil.
Saya melakukan ini untuk beberapa gambar dan ingin metode umum.
Melakukan ini akan membantu saya mengidentifikasi bintang yang lebih samar / objek Messier / dll dalam gambar.
Saya yakin banyak ahli astrofotografi ingin melakukan ini, tetapi belum menemukan perangkat lunak yang ada yang melakukan ini.
EDIT: Terima kasih, wah! Proyeksi gnoni adalah apa yang saya lewatkan. Saya sudah melakukan ini dengan asumsi transformasi linear:
(* 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}];
];
di mana x, y, dan z adalah masing-masing daftar 4-elemen yang terdiri dari bintang RA, deklinasi, koordinat x pada gambar, dan koordinat y pada gambar. xwid dan ywid adalah lebar dan tinggi gambar. Pada kasus ini:
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}
}
Sekarang, merujuk pada "{-2250.51, -1182.52, 385.689}" sebagai $ frow, "{-166.12, -543.746, -2376.73}" sebagai $ srow, dan "{0.480698, -0.861509, 0.163497}" sebagai $ null, subrutin PHP ini menerjemahkan koordinat RA / DEC ke 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));
}
}
Sayangnya, saya tidak lagi tahu mengapa ini bekerja, tetapi menggunakannya + menambahkan posisi bintang yang diketahui menghasilkan hasil yang lumayan (gunakan "gambar tampilan" untuk melihatnya ukuran penuh):
Namun, seperti yang Anda lihat, hasilnya tidak sempurna, meyakinkan saya bahwa transformasi linear bukanlah jawaban yang tepat. Saya pikir gnomonic mungkin adalah cawan yang saya cari.