これは私の最初の質問なので、よく説明しようと思います。
私は、銀河座標 (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
その後、私が知らないのは、配列の再ソートを適切な方法で行う方法です...
どうもありがとう!