本篇博客主要用于学习交流,用来记录自己学习过程中遇到的问题,所获得的感想,同时也为了方便以后的查找与回顾。另外也为了向各位前辈学习,纠正自己思维上的不足。文中可能会引用其他前辈的博客,文末会给出相应链接,侵删!
前言
由于目的需要,需处理空间天气图像数据,主要是空间天气数据,但目前空间天气图像数据的取得并不顺利,找到的是.fits文件,通过参考网上的一些方法,将.fits转换为.png图像,从而得到所需数据。
自己所获得的.fits数据,是从JSOC(http://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的文件格式大体上如上图所示,但是还有一个关键点是文件头中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
整体截图:
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图像如下:
如此,就可以保存生成的.png图像。
2.2 通过.fits数据链接 转换
有时候,不用下载.fits文件,也可以直接进行转换。
整体截图
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图像如下。
请注意本地转换与链接转换的不同,以免出错。
3、总结
通过此次空间天气数据的转换,了解了一些天文数据.fits格式的知识,对jupyter notebook的使用,有了更深认识。
在获取.fits时,对JSOC lookdata(http://jsoc.stanford.edu/ajax/lookdata.html)的使用,有了一定了解。
4、参考资料
- JSOC
- FITS基本文件格式
- FITS文件处理
- Python--显示fits文件
- FITS2Images
- FITS 基本格式及其扩展