将.fits数据转换为.png图像

 

本篇博客主要用于学习交流,用来记录自己学习过程中遇到的问题,所获得的感想,同时也为了方便以后的查找与回顾。另外也为了向各位前辈学习,纠正自己思维上的不足。文中可能会引用其他前辈的博客,文末会给出相应链接,侵删!

 

前言

由于目的需要,需处理空间天气图像数据,主要是空间天气数据,但目前空间天气图像数据的取得并不顺利,找到的是.fits文件,通过参考网上的一些方法,将.fits转换为.png图像,从而得到所需数据。

自己所获得的.fits数据,是从JSOChttp://jsoc.stanford.edu/)上 下载的,下载过程使自己很是糟心!

在此,也向广大网友寻求帮助,如果您有做过关于太阳黑子、太阳耀斑、太阳日冕物质抛射的检测的实验或项目,请联系我,自己很是需要您的帮助!谢谢,文末会给出自己微信,添加时,请备注 太阳黑子检测。

 

1、FITS基本文件格式

FITS (Flexible Image Transport System) 是国际天文学会(IAU)1982 年确定的世界各天文台之间用于数据传输、交换的统一标准格式。它描述了数据的定义和数据编码的一般方法。它是与机器无关的,用磁带作为标准传输介质的独立方法。它提供了图像的单值转换,精度包括符号在内可以达到 32 位。对一维、二维、三维、甚至多维的数据类型都提供了合适的转换。它不仅适用于天文数据, 对其他学科的数据也是可用的。 FITS 是天文学界常用的数据格式,专门为在不同平台之间交换数据而设计。1988年的国际天文学联合会(IAU)大会指定IAU的FITS工作组全权负责此格式的修订。IAU规定,今后对FITS标准的修改不得破坏前后一致性,也就是所谓的“once FITS, always FITS”一说。

 

FITS文件由文件头和数据组成。在文件头中存储有对该文件的描述,如观测时间、观测对象、拍照温度、曝光时间等信息,同时也可以在文件头中注明观测时的视场、精度等,便于后期数据分析之用。文件头部分每行占80个字符,并以END结尾。按南京大学郑兴武教授所编《现代天体物理实验指导》一书中的说法,文件头共有36行,若未满则以空格补之。较重要的几项有:BITPIX(指明图像位数)、NAXIS(指明图像维数)、NAXISn(代表第n维的像素数)。数据部分可以是图象或其他信息(如数据表),这些数据按头部所给出的描述进行组织。

下图是FITS的基本格式:

                                 

将.fits数据转换为.png图像

 

基本fits的文件格式大体上如上图所示,但是还有一个关键点是文件头中36行标题的格式。

文件头中必须存在的五个关键词是: 
SIMPLE,BITPIX,NAXIS,NAXISn 和 END。它们的含义是: 
SIMPLE 逻辑变量,指明文件是否符合基本 FITS 标准。 
BITPIX 整数变量,指明用于表示每一个象元值的位数。 
NAXIS 整数变量,指明图象里坐标轴数。 
NAXIS1 整数变量,指明在数组内沿最快变化轴的象元数。 
NAXIS2 整数变量,指明在数组内沿次快变化轴的象元数。
 

举个例子:

SIMPLE = T 
BITPIX = 16 
NAXIS = 2 
NAXIS1 = 320 
NAXIS2 = 512 
END

说明:

SIMPLE=T 其中逻辑值 T(True)表明该磁带文件是简单的 FITS 数据文件。

BITPIX=16 表明每一象元值为16 位带符号的补码形式,每一象元值占用两个字节, 每一记录可记 1440 个像元值(23040÷16= 1440)。

NAXIS=2 表明图象为两维阵列NAXIS1=320 表明第一轴 (列变化方向)的长度为 320 个象元。

NAXIS2=512 表明第二轴(行变化方向)的长度为 512行。

END表明标题结束。记录后面的所有零字节都用 ASCII 码空格填满。

这五个关键次的顺序不能颠倒。

除了这五个必须的关键词,还有一些其他的关键词: 
——BSCALE(浮点数)和 BZERO(浮点数):用于将磁带上的象元值转换为真实值的参数:真实值= ( 磁带值×BSCALE)+BZERO 
——BUNIT(字符):单位 
——BLANK (整数), 如果某象元未定义值, 则磁带上该象元对应位置上所写入的就是由 BLANK 定义的数值。 
——OBJECT (字符): 图象名 
——DATE (字符): 写 FITS 文件的日期(‘日/月/年’)。 
——DATE_OBS (字符): 数据的观测日期(‘日/月/年’)。 
——ORIGIN (字符): 写磁带的研究单位。 
——INSTRUME (字符): 数据的探测仪器。 
——TELESCOP (字符): 所使用的望远镜。 
——OBSERVER (字符):观测者姓名。 
——CRVALn (浮点数), CRPIXn(浮点数), CDELTn(浮点数), CTYPEn(字符)和 CROTAn(浮点数):这些关键词是用于定义第 n个轴的象元坐标与真实的物理坐标之间的关系。 
——DATAMAX(浮点数)和 DATAMIN(浮点数): 给出文件中数据的最大值和最小值。 
——EPOCH(浮点数): 坐标系统的历元(以年为单位)。 
——空白(无)、COMMENT(无)和 HISTORY(无): 用于说明其它一些信息表明第 9-80 列是注释用的 ASCII 文本。

注意, 图象阵中象元的二进制数据是高位在前, 低位在后。
 

2、将.fits数据转换为.png图像

运行平台:Windows 
Python版本:Python3.6
IDE:Jupyter notebook

 

2.1 本地.fits转化为.png

整体截图:

将.fits数据转换为.png图像

In [1]:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#from astropy.utils.data import download_file
from astropy.io import fits

 In [2]:

path = "F:\DownloadData\solar flare data\magnetogram.fits"
hdu_list = fits.open(path, cache=True)
#print(type(hdu_list))
hdu_list.info()

image_data = hdu_list[1].data  #此处是hdu_list[1].data,不是hdu_list[0].data
hdu_list.close()

image_data = fits.getdata(path, cache=True)
print(type(image_data))
print(image_data.shape)

plt.imshow(image_data, cmap='gray')
plt.colorbar()

 生成的空间天气.png图像如下:

将.fits数据转换为.png图像

如此,就可以保存生成的.png图像。

 

2.2 通过.fits数据链接 转换

有时候,不用下载.fits文件,也可以直接进行转换。

整体截图

    

将.fits数据转换为.png图像

In [1]:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from astropy.utils.data import download_file
from astropy.io import fits

In [2]:

path = 'http://data.astropy.org/tutorials/FITS-images/HorseHead.fits'
image_file2 = download_file(path, cache=True)
hdu_list2 = fits.open(image_file2)
hdu_list2.info()

image_data2 = hdu_list2[0].data   #此处是hdu_list[0].data,不是hdu_list[1].data
hdu_list2.close()

image_data2 = fits.getdata(image_file2)
print(type(image_data2))
print(image_data2.shape)

plt.imshow(image_data2, cmap='gray')
plt.colorbar()

生成的.png图像如下。

将.fits数据转换为.png图像

 

请注意本地转换与链接转换的不同,以免出错。

 

 

3、总结

通过此次空间天气数据的转换,了解了一些天文数据.fits格式的知识,对jupyter notebook的使用,有了更深认识。

在获取.fits时,对JSOC lookdatahttp://jsoc.stanford.edu/ajax/lookdata.html)的使用,有了一定了解。

 

4、参考资料

  1. JSOC
  2. FITS基本文件格式

  3. FITS文件处理

  4. Python--显示fits文件

  5. FITS2Images

  6. FITS 基本格式及其扩展

 

最重要的事:在此,也向广大网友寻求帮助,如果您有做过关于太阳黑子太阳耀斑太阳日冕物质抛射检测的实验或项目,请联系我,自己很是需要您的帮助!谢谢,自己的微信如下,添加时,请备注 太阳黑子检测,谢谢您啦!

将.fits数据转换为.png图像