0

これは私の最初の質問なので、よく説明しようと思います。

私は、銀河座標 (AITOF 投影) にある、いくつかの全天に適合する天文画像を使用しています。これらの適合画像を RA,Dec 座標に変換して、画像が適切な方法で回転するようにしたいと思います (つまり、銀河の平面はマップの中心で水平ではなく、ねじれます)。

誰もそれを行う方法について何か考えがありますか? 私はここで説明する、それほどエレガントではない方法でそれをやろうとしていました:

私は、fits ファイルと、画像がある hdu 拡張子を開きます。ヘッダーの適切なキーワードを読み取り、同じ形状の配列を作成しますが、すべての要素が 2 つの値になり、それが各ピクセルの座標になります。次に、各要素を必要な新しい座標に変換し (astropy.coordinates パッケージを使用)、最後に各要素を新しい座標で並べ替えるために移動する必要があります (最初は銀河座標で並べ替えられていましたが、今はそれらを移動する必要があります)。天のものに分類されます)。

私が今まで持っていたコードは非常に遅く、私がやろうとしていることを行うためのより良い方法があるに違いないと確信しています:

import numpy as np
import pyfits as pf
from astropy.coordinates import ICRS, Galactic
from astropy import units as u

file = pf.open('IC443.fits')

crpixx = file[0].header["CRPIX1"] # X-axis reference pixel number
crpixy = file[0].header["CRPIX2"] # Y-axis reference pixel number

crvalx = file[0].header["CRVAL1"] # X-axis reference pixel value in coordinates (galactic longitude in this case)
crvaly = file[0].header["CRVAL2"] # Y-axis reference pixel value in coordinates (galactic latitude in this case)

stepx = file[0].header["CDELT1"] # X-axis increment per pixel
stepy = file[0].header["CDELT2"] # Y-axis increment per pixel

numpixelsx = file[0].header["NAXIS1"] # number of pixels in X axis
numpixelsy = file[0].header["NAXIS2"] # number of pixels in Y axis

tab = np.zeros([numpixelsx,numpixelsy,2]) # array of zeros with the same 
# number of elements than the image, where each element is now a copuple 
# of two values

def assign_coords(i,j):
# function to calculate coordinate correspondent to any pixel
    coord_i = (-crpix1+i)*step1+crval1
    coord_j = (-crpix2+j)*step2 + crval2
    return coord_i, coord_j


for k, z in product(np.arange(numpixelsx), np.arange(numpixelsy)):
    tab[k][z][0], tab[k][z][1] = assign_coords(k,z)
    tab_temp_x = Galactic(tab[k][z][0], tab[k][z][1], unit=(u.degree, u.degree)).fk5.ra.value
    tab_temp_y = Galactic(tab[k][z][0], tab[k][z][1], unit=(u.degree, u.degree)).fk5.dec.value
    tab[k][z][0] = tab_temp_x # X-coord value in the new coordinates
    tab[k][z][1] = tab_temp_y # Y-coord value in the new coordinates

その後、私が知らないのは、配列の再ソートを適切な方法で行う方法です...

どうもありがとう!

4

1 に答える 1

0

これは pyfits の問題ではありません。変換を実行する必要があります。Numpy が役立つ場合があります。

いくつかの規格があります(1932年、1958年)

http://scienceworld.wolfram.com/astronomy/GalacticCoordinates.htmlを参照してください。

于 2016-06-29T06:29:23.467 に答える