У меня есть изображение звезд 1443x998 (снято с 35-мм камеры и
затем отсканировано) со следующими звездочками в следующих местах пикселей:
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]
Какая математическая функция преобразует расположение пикселей в RA / DEC и т. Д.
Versa? Примечания:
Яркие звезды - это капли на картинке; координаты выше
примерно центр капли, но может быть выключен на + -2 пикселя.
Я знаю, что могу вращать небесную сферу так, чтобы центр моего
картинка имеет полярные координаты 0,0. Таким образом, реальный вопрос «как
найти это вращение "(но см. следующий пункт).
Если бы высота / азимут были линейными на изображениях, это было бы
легко (э), но это не так
Измерение углового расстояния с помощью фотографий
Я могу предоставить пиксельные местоположения большего количества звезд, если это поможет. я
считаю, что 3 должно быть достаточно, но я могу ошибаться.
Я пытался выбрать 3 звезды, которые были "распределены" по всей
картина (потому что я думаю, что уменьшает ошибку, не уверен), но я не
уверен, что мне удалось.
Я делаю это для нескольких картинок и хотел бы общий метод.
Это поможет мне определить более слабые звезды / объекты Мессье / и т. Д.
на картинке.
Я уверен, что многие астрофотографы хотят это сделать, но не
нашел любое существующее программное обеспечение, которое делает это.
РЕДАКТИРОВАТЬ: Спасибо, whuber! Гномоническая проекция - это то, чего мне не хватало. Я бы
уже сделал это, предполагая линейное преобразование:
(* 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}];
];
где x, y и z - каждый из 4-элементных списков, состоящих из звезд RA,
склонение, x-координата на картинке и y-координата на
картина. xwid и ywid - ширина и высота изображения. В
этот случай:
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}
}
Теперь, ссылаясь на "{-2250.51, -1182.52, 385.689}" как $ frow, "{-166.12,
-543,746, -2376,73} "как $ srow и" {0,480698, -0,861509, 0,163497} "
как $ null, эта подпрограмма PHP переводит RA / DEC в координаты 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));
}
}
К сожалению, я больше не представляю, почему это работает, но использую его + добавление
известные положения звездочек дают приемлемые результаты (для просмотра в полном размере используйте «view image»):
Однако, как вы можете видеть, результаты не идеальны, убеждая меня
что линейное преобразование не было правильным ответом. Я думаю гномик
может быть, Грааль я искал.