我将开始这篇文章说,虽然我可以编码一点,我不是超级擅长它,所以道歉,如果答案真的很明显,我没有看到它。
我有一系列的.fits文件,我需要通过PIL可视化。我想用一种简单的方式来做,只需要使用PIL支持FITS。
所使用的图像来自WISE数据库中的M1星云。
当我尝试运行下面的代码时,我得到的只是一个颗粒状的图像:
from PIL import Image
fits_file = Image.open('image.fits')
fits_file.show()
字符串
如果我尝试通过Astropy Fits模块来读取它,它有时会返回正确的图像,有时会返回白色图像(我相信这是由于min/max超过255)。
from astropy.io import fits
from PIL import Image
fits_file = fits.open('image.fits')
fits_img = fits_file[0].data
pil_img = Image.fromarray(fits_img)
pil_img.show()
型
我是否错过了一些东西,为什么我不能让所有的图像都正确地可视化?
编辑:我决定提供我的代码得到的图像。
第一个代码块显示以下图像:x1c 0d1x
第二个代码块显示以下图像:
原始图像由astropy + matplotlib可视化:
编辑2:根据评论中提供的链接,我将第二个代码更改为:
from astropy.io import fits
from PIL import Image
fits_file = fits.open('image.fits')
fits_img = fits_file[0].data
pil_img = Image.fromarray(fits_img, mode="F")
pil_img.show()
型
这将返回与第一个代码相同的图像。
1条答案
按热度按时间o0lyfsai1#
我认为PIL有一个错误,并以错误的字节顺序读取FITS文件。如果我打开文件,转换为Numpy数组,交换字节顺序以适应错误,然后缩放并保存为PNG,它工作正常:
字符串
的数据