Создание куба изображения с использованием изображений с несколькими подгонками
У меня есть куча файлов подгонки, которые можно прочитать с помощью приведенного ниже сценария
from astropy.io import fits
hdu = fits.open('file.fits')
data = hdu[0].data
Я пытаюсь сделать куб изображения, используя данные, считанные из файлов с несколькими подгонками. (Куб изображения - это 3D-изображение, которое содержит данные из файла с несколькими подгонками, где ось x и y - это размер 2D-изображения, а третья ось - время или частота).
Я полагаю, что это можно сделать с помощью спектрального модуля _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.
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')
Самый простой способ сделать это - просто поместить изображения, которые вы хотите иметь в своем кубе, в numpy
array, а затем сохраните этот массив как файл соответствия. Вы также можете сохранить их вnumpy
array напрямую, но добавлять списки проще, если вы делаете это в цикле 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)