Find physical coordinates of a pixel in a fits file with python

前端 未结 1 1614
我寻月下人不归
我寻月下人不归 2021-01-18 07:42

I am tying to get the physical sky coordinates of a given pixel from within a python script. I would like to use astropy\'s WCS, but I\'ll do anything from within python.

1条回答
  •  梦毁少年i
    2021-01-18 08:12

    The problem is that you have a multi-extension FITS file. Here's an example session showing how you can get access to the appropriate WCS:

    In [1]: from astropy.io import fits
    
    In [2]: h = fits.getheader('SN1415_F625W_1_drz.fits')
    
    In [3]: f = fits.open('SN1415_F625W_1_drz.fits')
    
    In [4]: f
    Out[4]:
    [,
     ,
     ,
     ,
     ]
    
    In [5]: from astropy import wcs
    
    In [6]: w = wcs.WCS(f[0].header)
    WARNING: FITSFixedWarning: The WCS transformation has more axes (2) than the image it is associated with (0) [astropy.wcs.wcs]
    
    In [7]: w.wcs.naxis
    Out[7]: 2
    
    In [8]: f[0].data
    
    In [9]: w = wcs.WCS(f[1].header)
    
    In [10]: w.wcs.naxis
    Out[10]: 2
    
    In [11]: f[1].data
    Out[11]:
    array([[ 0.01986978, -0.04018363,  0.03330525, ...,  0.        ,
             0.        ,  0.        ],
           [ 0.0695872 , -0.00979143,  0.00147662, ...,  0.        ,
             0.        ,  0.        ],
           [-0.09292094,  0.02481506, -0.01057338, ...,  0.        ,
             0.        ,  0.        ],
           ...,
           [ 0.        ,  0.        ,  0.        , ...,  0.02375774,
             0.0389731 ,  0.03825707],
           [ 0.        ,  0.        ,  0.        , ..., -0.01570918,
            -0.01053802,  0.00461219],
           [ 0.        ,  0.        ,  0.        , ..., -0.0638448 ,
            -0.0240754 ,  0.02679451]], dtype=float32)
    
    In [12]: w.wcs_pix2world(100., 100., 1)
    Out[12]: [array(6.113076380801787), array(0.616758775753701)]
    

    So you probably want to redefine your method:

    def astropymethod2(img, hduid=1):
        # from http://astropy.readthedocs.org/en/latest/wcs/
        hdu = fits.open(img)
        w = WCS(hdu[hduid].header)
        lon, lat = w.wcs_pix2world(100., 100., 1)
        print lon, lat
    

    0 讨论(0)
提交回复
热议问题