2

我到处寻找,但没有找到解决这个问题的方法。我觉得它应该相当简单,但我们会看到。

我有一个 .FITS 格式的数据立方体,我需要将其折叠成 2D FITS 图像。数据立方体有两个空间维度和一个光谱/速度维度。

只是寻找一个简单的python 例程来加载立方体并展平所有这些层(即沿光谱/速度轴整合它们)。谢谢你的帮助。

4

3 回答 3

4

这个关于 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 轴展平/整合立方体,并且有大量资源可以帮助您确定正确的方法(希望基于某些分析框架)来做到这一点。

于 2013-08-01T14:28:46.900 回答
2

好的,这似乎有效:

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 坐标(附加到原始数据立方体)在此转换过程中丢失。

于 2013-08-01T14:35:44.820 回答
1

这是一个有点老的问题,但Spectrum-cube现在为此提供了更好的解决方案。

示例,基于 Teachey 的回答:

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

summed_image = cube.sum(axis=0)
summed_image.hdu.writeto(new_filename)
于 2016-05-03T17:37:17.510 回答