Tôi có một hình ảnh 1443x998 của các ngôi sao (chụp với camera 35mm và sau đó được quét) với các ngôi sao sau tại các vị trí pixel sau:
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]
Hàm toán học nào chuyển đổi vị trí pixel thành RA / DEC và ngược lại? Ghi chú:
Những ngôi sao sáng là những đốm màu trong bức tranh; tọa độ ở trên gần như là trung tâm của blob, nhưng có thể bị tắt bởi + -2 pixel.
Tôi biết tôi có thể xoay quả cầu thiên thể để tâm ảnh của tôi có tọa độ cực 0,0. Vì vậy, câu hỏi thực sự là "làm thế nào để tìm vòng quay này" (nhưng xem điểm tiếp theo).
Nếu độ cao / góc phương vị là tuyến tính trong ảnh, điều này sẽ dễ dàng (er), nhưng chúng không phải: Đo khoảng cách góc bằng ảnh
Tôi có thể cung cấp vị trí pixel của nhiều ngôi sao hơn nếu điều đó có ích. Tôi tin rằng 3 là đủ, nhưng tôi có thể sai.
Tôi đã cố gắng chọn 3 ngôi sao được "trải ra" trên bức ảnh (vì tôi nghĩ rằng điều đó làm giảm lỗi, không chắc chắn), nhưng tôi không chắc là mình đã thành công.
Tôi đang làm điều này cho một số hình ảnh và muốn một phương pháp chung.
Làm điều này sẽ giúp tôi xác định các ngôi sao mờ hơn / vật thể Messier / vv trong ảnh.
Tôi chắc chắn rất nhiều nhà nhiếp ảnh thiên văn muốn làm điều này, nhưng chưa tìm thấy bất kỳ phần mềm hiện có nào làm việc này.
EDIT: Cảm ơn, whuber! Phép chiếu gnomonic là những gì tôi đã thiếu. Tôi đã thực hiện điều này với giả định là một phép biến đổi tuyến tính:
(* 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}];
];
trong đó x, y và z là mỗi danh sách 4 phần tử bao gồm các ngôi sao RA, suy giảm, tọa độ x trên hình ảnh và tọa độ y trên hình ảnh. xwid và ywid là chiều rộng và chiều cao của hình ảnh. Trong trường hợp này:
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}
}
Bây giờ, đề cập đến "{-2250.51, -1182.52, 385.689}" là $ frow, "{-166.12, -543.746, -2376.73}" là $ srow và "{0.480698, -0.861509, 0.163497}" là $ null chương trình con PHP này dịch RA / DEC thành tọa độ 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));
}
}
Đáng buồn thay, tôi không còn biết tại sao điều này hoạt động, nhưng sử dụng nó + thêm các vị trí sao đã biết sẽ mang lại kết quả chấp nhận được (sử dụng "xem hình ảnh" để xem kích thước đầy đủ):
Tuy nhiên, như bạn có thể thấy, kết quả không hoàn hảo, thuyết phục tôi rằng một phép biến đổi tuyến tính không phải là câu trả lời đúng. Tôi nghĩ rằng gnomonic có thể là chén thánh tôi đang tìm kiếm.