如何使用 Astropy 转换(或缩放)FITS 图像
How to convert (or scale) a FITS image with Astropy
使用 Astropy 库,我创建了一个 FITS 图像,它是通过从 2 个实际 FITS 图像进行插值制作的(它们被缩放为“int16”,软件的正确格式我使用:Maxim DL).
但是这张图片的比例是 float64 而不是 int16。并且任何天文处理软件都无法读取(FITS Liberator除外)
您知道如何进行吗?我们可以通过更改 header 中的 "BITPIX" 来转换 FITS 图像吗?
我试过了:(按照这个方法:Why is an image containing integer data being converted unexpectedly to floats?
from astropy.io import fits
hdu1=fits.open('mypicture.fit')
image=hdu1[0]
print(image.header['BITPIX']) # it gives : -64
image.scale('int16')
data=image.data
data.dtype
print(image.header['BITPIX']) # it gives : 16
hdu1.close()
但是,当我检查"mypicture.fit"的newly-modified比例时,它仍然显示-64!
未保存和应用任何更改!
如果我对你的问题的理解正确,这应该有效。
from astropy.io import fits
import numpy as np
# create dummy fits file
a = np.array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=np.float64)
hdu = fits.PrimaryHDU()
hdu.data = a
# looking at the header object confirms BITPIX = -64
hdu.header
# change data type
hdu.data = np.int16(hdu.data)
# look again to confirm BITPIX = 16
hdu.header
使用 Astropy 库,我创建了一个 FITS 图像,它是通过从 2 个实际 FITS 图像进行插值制作的(它们被缩放为“int16”,软件的正确格式我使用:Maxim DL).
但是这张图片的比例是 float64 而不是 int16。并且任何天文处理软件都无法读取(FITS Liberator除外)
您知道如何进行吗?我们可以通过更改 header 中的 "BITPIX" 来转换 FITS 图像吗?
我试过了:(按照这个方法:Why is an image containing integer data being converted unexpectedly to floats?
from astropy.io import fits
hdu1=fits.open('mypicture.fit')
image=hdu1[0]
print(image.header['BITPIX']) # it gives : -64
image.scale('int16')
data=image.data
data.dtype
print(image.header['BITPIX']) # it gives : 16
hdu1.close()
但是,当我检查"mypicture.fit"的newly-modified比例时,它仍然显示-64! 未保存和应用任何更改!
如果我对你的问题的理解正确,这应该有效。
from astropy.io import fits
import numpy as np
# create dummy fits file
a = np.array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=np.float64)
hdu = fits.PrimaryHDU()
hdu.data = a
# looking at the header object confirms BITPIX = -64
hdu.header
# change data type
hdu.data = np.int16(hdu.data)
# look again to confirm BITPIX = 16
hdu.header