次の星が1443x998の写真(35mmカメラで撮影され、スキャンされたもの)と次の星が次のピクセル位置にあります。
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に、またはその逆に変換しますか?ノート:
明るい星は写真の塊です。上記の座標はおおよそブロブの中心ですが、+-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はそれぞれ、星RA、赤緯、画像上のx座標、および画像上のy座標で構成される4要素のリストです。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));
}
}
悲しいことに、なぜこれが機能するのかはわかりませんが、これを使用して既知の星の位置を追加すると、許容できる結果が得られます(「画像を表示」を使用してフルサイズで表示):
しかし、ご覧のとおり、結果は完全ではなく、線形変換は正しい答えではなかったと私は確信しています。私はノモニックが私が求めていた杯かもしれないと思います。