Есть ли способ создания мозаики .fits с помощью астропии?

Я хочу создать мозаику, используя различные HDU внутри уникального файла .fits, как вы можете это сделать, используя SAOimage DS9 и выбрав «Файл > Открыть как > Mosaic WCS». Когда я искал, как это сделать с помощью астропии, я столкнулся с репроектом и попытался следовать руководству по адресу https://reproject.readthedocs.io/en/stable/mosaicking.html. Тем не менее, я не могу заставить его работать на меня.

У меня есть объект HDUList, когда я открываю файл, поэтому я попытался следовать документации «reproject_and_coadd» (https://reproject.readthedocs.io/en/stable/api/reproject.mosaicking.reproject_and_coadd.html#reproject.mosaicking.reproject_and_coadd) и использовать некоторые другие параметры, которые не использовались в учебнике. Это код, который я пытался использовать:

f = fits.open(input_file, memmap=True)
print(f)
array, footprint = reproject_and_coadd(input_data=f, output_projection=f[5].header, hdu_in=f[0].header, reproject_function=reproject_interp)
f.close()

Вывод для f представляет собой следующий список (когда я набираю (f), я получаю сообщение о том, что это HDUList):

[<astropy.io.fits.hdu.image.PrimaryHDU object at 0x7fdcc468aa50>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc462aa10>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc4632690>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc462a110>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc4638310>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc463bf50>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc4642b90>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc4649810>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc464e4d0>, <astropy.io.fits.hdu.compressed.CompImageHDU object at 0x7fdcc4655150>]

И ошибка, которую я сейчас получаю:

WARNING: FITSFixedWarning: The WCS transformation has more axes (2) than the image it is associated with (0) [astropy.wcs.wcs]
Traceback (most recent call last):
  File "/home/oi/border.py", line 74, in make_pieces
    array, footprint = reproject_and_coadd(input_data=f[1:9], output_projection=f[0].header, hdu_in=f[0].header, reproject_function=reproject_interp)
  File "/home/oi/anaconda3/lib/python3.7/site-packages/reproject/mosaicking/coadd.py", line 91, in reproject_and_coadd
    shape_out=shape_out)
  File "/home/oi/anaconda3/lib/python3.7/site-packages/reproject/utils.py", line 98, in parse_output_projection
    raise ValueError("The shape of the output image should not be an "
ValueError: The shape of the output image should not be an empty tuple

Буду очень рад, если кто-нибудь сможет мне помочь :)

Кроме того, если возможно, есть ли способ открыть только два составных изображения и сделать из них мозаику? Таким образом, вместо того, чтобы открывать все 9 плиток одновременно, просто получите плитку 11 и плитку 12. Я новичок в том, чтобы возиться с .fits, так что это тоже было бы здорово знать.

Спасибо!


person Marcos Tidball    schedule 12.06.2020    source источник
comment
Я не знаком с этой библиотекой, но согласно документации для reproject_and_coadd, если input_file является файлом FITS, аргумент hdu_in должен быть индексом или EXTNAME используемого HDU, а не заголовком.   -  person Iguananaut    schedule 13.06.2020


Ответы (1)


Только что вспомнил, что задавал этот вопрос некоторое время назад! Я узнал, в чем проблема, которая у меня была.

Учитывая, что в файле .fits 9 плиток, можно создать полную мозаику, используя:

f = fits.open(filename, memmap=True)
orig_header = f[0].header

# full mosaic: f[1:10]; mosaic from tile11 and tile12: f[1:3]
wcs_out, shape_out = find_optimal_celestial_wcs(f[1:10]) # has only CompImageHDU files

array, footprint = reproject_and_coadd(f[1:10], wcs_out, shape_out=shape_out, reproject_function=reproject_interp)

Где array — это мозаика, которую затем можно построить, например, с помощью matplotlib. Однако функция reproject_and_coadd очень требовательна к памяти.

person Marcos Tidball    schedule 19.08.2020