使用多个适合图像制作图像立方体

时间:2019-01-29 09:11:36

标签: python astronomy fits

我有一堆适合文件,可以使用以下脚本读取

from astropy.io import fits
hdu = fits.open('file.fits')
data = hdu[0].data

我正在尝试使用从多个fit文件读取的数据制作图像立方体。 (图像立方体是3D图像,其中包含来自多个拟合文件的数据,其中x和y轴是2D图像尺寸,第3轴是时间或频率)

我相信可以在光谱_cube模块中完成此操作,但是大多数文档仅讨论如何读取图像立方体,而不是如何使用单独的拟合文件制作图像。

到目前为止,我已经尝试了以下脚本。

#In the below script data is a 3D numpy array
from spectral_cube import SpectralCube
cube = SpectralCube(data=data)
cube.write('new_cube.fits', format='fits')

但是,上面的脚本给出了一个错误,指出需要3个参数,而仅给出2个。

2 个答案:

答案 0 :(得分:1)

显然,人们不需要使用spectral_cube模块来制作图像立方体。使用AstroPy python模块可以很容易地做到这一点。下面是脚本。

from astropy.io import fits
import numpy as np

cube = np.zeros((50,1000,1000)) #Here 1000x1000 is the dimension of the individual fits images and 50 is the third perpendicular axis(time/freq)

for i in range(50):
    hdu = fits.open('image' + str(i) + '.fits') #The fits images that you want to combine have the name string 'image' + str(i) + '.fits'
    data = hud[0].data[:,:]
    cube[i,:,:] = data

hdu_new = fits.PrimaryHDU(cube)
hdu_new.writeto('cube.fits')

答案 1 :(得分:1)

最简单的方法是将要包含在多维数据集中的图像简单放入numpy数组中,然后将该数组另存为fits文件。您也可以直接将它们保存到numpy数组中,但是如果在for循环中执行列表,则比在我对每个图像进行显式处理时都更容易附加列表。

import numpy as np
from astropy import fits

# Read the images you want to concatenate into a cube
img1 = fits.getdata('img1.fits')
img2 = fits.getdata('img2.fits')

# Make a list that will hold all your images
img_list = []
img_list.append(img1)
img_list.append(img2)

# Cast the list into a numpy array
img_array = np.array(img_list)

# Save the array as fits - it will save it as an image cube
fits.writeto('mycube.fits', img_array)