我到处寻找,但没有找到解决这个问题的方法。我觉得它应该相当简单,但我们会看到。
我有一个 .FITS 格式的数据立方体,我需要将其折叠成 2D FITS 图像。数据立方体有两个空间维度和一个光谱/速度维度。
只是寻找一个简单的python 例程来加载立方体并展平所有这些层(即沿光谱/速度轴整合它们)。谢谢你的帮助。
这个关于 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 轴展平/整合立方体,并且有大量资源可以帮助您确定正确的方法(希望基于某些分析框架)来做到这一点。
好的,这似乎有效:
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 坐标(附加到原始数据立方体)在此转换过程中丢失。
这是一个有点老的问题,但Spectrum-cube现在为此提供了更好的解决方案。
示例,基于 Teachey 的回答:
from spectral_cube import SpectralCube
cube = SpectralCube.read(filename)
summed_image = cube.sum(axis=0)
summed_image.hdu.writeto(new_filename)