【reproject_inter】fits头文件的映射(1改变轴的数量;2,改变数据范围;3,FK4系转换成FK5;4,旋转图像)

fits文件的映射的可以在规定的头文件之下,把数据按规定的头文件进行映射。有以下作用

【练习文件下载,下载好请自行修改名字:fits文件下载地址

1,改变轴的数量

改变轴的数量意义在于,只有轴数相同的头文件才允许相互映射,这一步是至关重要的。

import numpy as np
from astropy.io import fits as pf
from astropy.wcs import WCS
from reproject import reproject_interp
hdu1 = pf.open('m31cm6i_full_3min_large.fits')[0] 
print(hdu1.data.shape)
#map从三个轴改成两个轴
hdr1 = hdu1.header
hdr = pf.Header({ 'SIMPLE':   True,
                  'BITPIX':    -32,
                  'NAXIS':       2,
                  'NAXIS1':  hdr1['NAXIS1'],
                  'NAXIS2':  hdr1['NAXIS2'],
                  'CDELT1':  hdr1['CDELT1'],
                  'CRVAL1':  hdr1['CRVAL1'],
                  'CRPIX1':  hdr1['CRPIX1'],
                  'CTYPE1':  hdr1['CTYPE1'],
                  'CDELT2':  hdr1['CDELT2'],
                  'CRPIX2':  hdr1['CRPIX2'],
                  'CRVAL2':  hdr1['CRVAL2'],
                  'CTYPE2':  hdr1['CTYPE2'],
                  'CROTA1':  hdr1['CROTA1'],
                  'CROTA2':  hdr1['CROTA2'],
                  'EPOCH' :  hdr1['EPOCH'], 
                  'BUNIT' :  hdr1['BUNIT'],
                  'EXTEND':  True,
                             })
#各个关键词的意义参考本人博客ska暑期训练。
#这里没有写分辨率信息,关键字为'HBPW'或者其他,如果需要可以自行添加 。                 
pf.writeto('m31cm6i_full_3min_large_H.fits', hdu1.data[0], hdr, overwrite=True)
data = pf.getdata('m31cm6i_full_3min_large_H.fits')
print(data.shape)
(1, 281, 601) 
(281, 601)

2. 改变数据大小和中心的位置

经过映射之后,可以缩小数据的范围,并且数据的中心是可以根据你的科学目标进行更改的
具体代码如下,效果图如下,就是更改

hdu = pf.open('m31cm6i_full_3min_large_H.fits')
hdr = pf.getheader('m31cm6i_full_3min_large_H.fits')

hdr['NAXIS1'] = 301
hdr['NAXIS2'] = 301
hdr['CRVAL1'] = 10.0074996948
hdr['CRVAL2'] = 40.9961128235
hdr['CRPIX1'] = 151
hdr['CRPIX2'] = 151

data_n1, footprint = reproject_interp(hdu, hdr)
pf.writeto('new.fits', data_n1, hdr, overwrite=True)

3. 对坐标系进行旋转投影

可以看到原来的旋转度数是53度,可以随意更改这个旋转的度数

print(hdr['CROTA1'])
print(hdr['CROTA2'])
hdr['CROTA1'] = 0
hdr['CROTA2'] = 0

data_n1, footprint = reproject_interp(hdu, hdr)
pf.writeto('new1.fits', data_n1, hdr, overwrite=True)
0.0
53.0

4. 从J1950系到J2000系

转换坐标系,要改变EPOCH和参考点的坐标,最好用自transform_to去转变。可以把参考点从FK4转换到FK5系。

print(hdr['EPOCH'])
hdu = pf.open('m31cm6i_full_3min_large_H.fits')[0]
hdr = pf.getheader('m31cm6i_full_3min_large_H.fits')

print(hdu.header['CRVAL1'], hdu.header['CRVAL2'])
c =  SkyCoord(hdu.header['CRVAL1']*u.degree, hdu.header['CRVAL2']*u.degree, frame='fk4')
c = c.transform_to('fk5')

hdr['CRVAL1'] = c.ra.deg
hdr['CRVAL2'] = c.dec.deg
hdr['EPOCH'] = 2000.00
print(hdr['CRVAL1'], hdr['CRVAL2'])
data1, footprint = reproject_interp(hdu, hdr)
pf.writeto('new_FK5.fits', data1, hdr, overwrite=True)
2000.0
10.0074996948 40.9961128235
10.691854734427656 41.26993263852114

其他的映射一样的逻辑,主要对头文件的操作,要特别注意头文件每个的关键词。按照自己需求全部修改好,一并把数据映射过来就好了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值