2014-07-24 13 views
6

我正試圖從python腳本中獲取給定像素的物理天空座標。我想使用astropy的WCS,但我會在python中做任何事情。使用python查找擬合文件中像素的物理座標

我已經嘗試了這兩個代碼片段。

from astropy.io import fits 
from astropy.wcs import WCS 

def astropymethod1(img): 
    # from http://astropy.readthedocs.org/en/latest/wcs/ 
    w = WCS(img) 
    lon, lat = w.all_pix2world(100., 100., 1) 
    print lon, lat 

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

的問題是我得到一個錯誤,我第一次嘗試使用WCS,結果是隻有永遠的像素值我插嘴說。

WARNING: FITSFixedWarning: The WCS transformation has more axes (2) than the image it is associated with (0) [astropy.wcs.wcs] 
+0

你的Dropbox的鏈接不是一個鏈接。您有任何其他服務可以用來向我們展示示例文件嗎? – skrrgwasme

+0

Brian的一位朋友告訴我,我的合適文件是多重擴展的,因此我所需要做的就是在第二種方法中使用hdu [1]而不是hdu [0]。 –

+0

這是dropbox鏈接。我沒有看到它沒有出現。 https://www.dropbox.com/s/qt0mx78cwfcpsjk/WCS.zip –

回答

6

的問題是,你有一個多-extension FITS文件。這裏是你展示如何能得到適當的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]: 
[<astropy.io.fits.hdu.image.PrimaryHDU at 0x106735490>, 
<astropy.io.fits.hdu.image.ImageHDU at 0x106749750>, 
<astropy.io.fits.hdu.image.ImageHDU at 0x106751310>, 
<astropy.io.fits.hdu.image.ImageHDU at 0x106751d10>, 
<astropy.io.fits.hdu.table.BinTableHDU at 0x1067dfdd0>] 

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)] 

所以你可能要重新定義你的方法:

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 
相關問題