本篇部落客要用于學習交流,用來記錄自己學習過程中遇到的問題,所獲得的感想,同時也為了友善以後的查找與回顧。另外也為了向各位前輩學習,糾正自己思維上的不足。文中可能會引用其他前輩的部落格,文末會給出相應連結,侵删!
前言
由于目的需要,需處理空間天氣圖像資料,主要是空間天氣資料,但目前空間天氣圖像資料的取得并不順利,找到的是.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 基本格式及其擴充