Создание куба изображения с использованием изображений с несколькими подгонками - PullRequest
0 голосов
/ 29 января 2019

У меня есть несколько файлов подгонки, которые можно прочитать с помощью приведенного ниже сценария

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

Я пытаюсь создать куб изображения, используя данные, считанные из файлов с несколькими подгонками.(Куб изображения - это 3D-изображение, которое содержит данные из файла с несколькими подгонками, где ось X и Y - это размер 2D-изображения, а 3-я ось - время или частота).модуля, однако большая часть документации говорит только о том, как прочитать куб изображения, а не о том, как его создать, используя файлы с индивидуальным подбором.

До сих пор я пробовал следующий скрипт.

#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 голосов
/ 20 июня 2019

Самый простой способ сделать это - просто поместить изображения, которые вы хотите иметь в своем кубе, в массив numpy, а затем сохранить этот массив как файл подгонки.Вы также можете сохранить их в массиве 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)
0 голосов
/ 05 февраля 2019

Очевидно, что для создания кубов изображения не нужно использовать модуль 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')
...