2013-07-31 30 views
2

我已經看遍了所有地方,並沒有找到解決此問題的方法。我覺得它應該相當簡單,但我們會看到。在python中摺疊/壓扁FITS數據立方

我有一個.FITS格式的數據立方體,我需要將它摺疊成2D FITS圖像。數據立方體有兩個空間維度和一個光譜/速度維度。

只需尋找一個簡單的python例程來加載立方體並將所有這些圖層展平(即沿光譜/速度軸進行整合)。謝謝你的幫助。

+0

究竟是如何被格式化的適合數據?我建議使用python模塊'pyfits'和'matplotlib.pyplot'。 –

回答

2

OK,這似乎工作:

import pyfits 
import numpy as np 

hdulist = pyfits.open(filename) 
header = hdulist[0].header 
data = hdulist[0].data 
data = np.nan_to_num(data) 
new_data = data[0] 

for i in range(1,84):    #this depends on number of layers or pages 
    new_data += data[i] 

hdu = pyfits.PrimaryHDU(new_data) 
hdu.writeto(new_filename) 

的一個問題這個套路是WCS座標(這是附加到原始數據立方體)這種轉換過程中丟失。

4

This tutorial on pyfits有點舊了,但基本上還是正確的。關鍵是用pyfits(或astropy.io.fits)打開FITS立方體的輸出是你有一個3維numpy數組。

import pyfits 
# if you are using astropy then for this example 
# from astropy.io import fits as pyfits 

data_cube, header_data_cube = pyfits.getdata("data_cube.fits", 0, header=True) 
data_cube.shape 
# (Z, X, Y) 

那麼你必須決定如何壓平/沿Z軸集成立方體,並有大量的資源在那裏,幫助你決定做正確的(希望基於一些分析框架)。

1

這是一個老問題,但spectral-cube現在提供了一個更好的解決方案。

例如,基於Teachey的回答是:

from spectral_cube import SpectralCube 
cube = SpectralCube.read(filename) 

summed_image = cube.sum(axis=0) 
summed_image.hdu.writeto(new_filename)