更改拟合图像的投影

时间:2016-06-01 14:56:31

标签: python astropy fits pyfits

这是我的第一个问题,所以我会尽力解释一下。

我正在使用一些全天空拟合天文图像,这些图像位于银河坐标中(在AITOF投影中)。 我想将这些拟合图像转换为RA,Dec坐标,以便以适当的方式旋转图像(即,星系的平面不再是地图中心的水平,而是扭曲)。 / p>

有没有人知道怎么做?我试图以一种不那么优雅的方式来做,我在这里解释一下:

我打开fit文件,以及图像所在的hdu扩展名。 我读了标题的相应关键字 我创建了一个具有相同形状的数组,但每个元素现在都是几个值,这将是每个像素的坐标。 然后我将每个元素转换为我想要的新坐标(使用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

之后,我不知道如何以正确的方式重新排序数组......

非常感谢你们!

1 个答案:

答案 0 :(得分:0)

这不是一个pyfits问题。 您必须执行转换。 Numpy可以帮到你。

有几个标准(1932,1958)

请参阅http://scienceworld.wolfram.com/astronomy/GalacticCoordinates.html