Включите координаты WCS в изображение FITS

У меня есть двумерный массив numpy 'ZEA_N_sky', изначально созданный как

n=128
ZEA_N_sky=np.zeros((n,n))

а позже были присвоены значения каждому пикселю этого массива. Я могу построить этот массив как изображение FITS (которое можно открыть с помощью ds9), используя следующий код, однако я также хочу видеть координаты WCS. То есть, когда я наведу курсор мыши на изображение, я смогу увидеть галлон, галлон; Right-Asc, Dec и т. Д. Как я могу этого добиться? Мне нужно делать это вручную или есть какой-то трюк с header ()?

Документация, предоставленная с использованием пакета WCS и all_pix2world (), похоже, не работает (скорее, я этого не понимаю). Если кто-нибудь может мне помочь с кодом? Спасибо !

from astropy.io import fits
import numpy as np
from astropy import wcs
from astropy.table import Table

out_file_name = 'FITS_image.fits'

hdr = fits.Header()
hdr['Projection'] = "ZEA"
hdr['nd_size'] = str(nd_size)
hdr['SCALE']="nd_size/2"
fits.writeto(out_file_name, ZEA_N_sky, hdr,clobber=True)

Я добился некоторого прогресса. Это тот фрагмент кода, который я использую прямо сейчас, с помощью которого я получаю параметры WCS, но значение долготы, которое я получаю на моем изображении FITS, неверно! Я думаю, что ошибаюсь в значениях параметров проекции ZEA.

NSGP=1 #Parameter for North side projection, -1 for south side

w = wcs.WCS(naxis=2)
w.wcs.crpix = [SCALE,SCALE] # SCALE is half the value of my pixel range in the image. n/2=128/2=64
w.wcs.cdelt = np.array([-NSGP*90.0/float(SCALE) * 0.90032, NSGP*90.0/float(SCALE) * 0.90032]) # increments in degrees per pixel
w.wcs.crval = [NSGP*90.0, NSGP*90.0] #RA and dec values in hours and degrees    
w.wcs.ctype = ["GLON-ZEA", "GLAT-ZEA"]
#w.wcs.set_pv([(180, NSGP, float(SCALE))])

out_file_name = 'N_Mateu_ZEA_stream_mask.fits'
# Now, write out the WCS object as a FITS header
header = w.to_header()
hdu = fits.PrimaryHDU(ZEA_N_sky,header=header)
hdu.writeto(out_file_name, clobber=True)

person Khyati Malhan    schedule 17.04.2018    source источник


Ответы (1)


Попробуйте создать объект WCS с правильными параметрами WCS для вашего изображения, а затем вызовите header = wcs.to_header и сохраните данные изображения и заголовок в файле FITS. См. Пример здесь.

Обычно вы сами не создаете WCS или заголовки, это то, что вы читаете из файлов FITS. В этом случае вы делаете wcs = WCS(header), чтобы создать объект WCS из заголовка FITS. См. Пример здесь < / а>.

person Christoph    schedule 17.04.2018
comment
Спасибо за комментарий. Я был на той веб-странице, которую вы предложили. Я не очень уверен, как использовать этот пример в моем коде. Если это не слишком больно, не могли бы вы найти для меня решение? У меня сильное впечатление, что это должен быть одно- или двухстрочный код. - person Khyati Malhan; 18.04.2018
comment
На этой странице есть рабочее решение. Я думаю, вам не хватает знания всех параметров проекции ZEA и их названий в заголовке FITS, не так ли? - person Christoph; 18.04.2018
comment
Я сделал обновление своей программы, которое не смог сюда выложить. Внесенные мной изменения были добавлены в мой вопрос. Пожалуйста, посмотрите на это. Спасибо ! - person Khyati Malhan; 18.04.2018
comment
Из предоставленной вами информации у нас нет возможности узнать, какими должны быть параметры проекции ZEA для вашего изображения. Можете ли вы поговорить с кем-нибудь из местных, кто сделал это изображение и знает FITS / WCS, чтобы помочь вам в этом разобраться? - person Christoph; 18.04.2018