天天看點

将.fits資料轉換為.png圖像

本篇部落客要用于學習交流,用來記錄自己學習過程中遇到的問題,所獲得的感想,同時也為了友善以後的查找與回顧。另外也為了向各位前輩學習,糾正自己思維上的不足。文中可能會引用其他前輩的部落格,文末會給出相應連結,侵删!

前言

由于目的需要,需處理空間天氣圖像資料,主要是空間天氣資料,但目前空間天氣圖像資料的取得并不順利,找到的是.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資料轉換為.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 lookdata(http://jsoc.stanford.edu/ajax/lookdata.html)的使用,有了一定了解。

4、參考資料

  1. JSOC
  2. FITS基本檔案格式
  3. FITS檔案處理
  4. Python--顯示fits檔案
  5. FITS2Images
  6. FITS 基本格式及其擴充

最重要的事:在此,也向廣大網友尋求幫助,如果您有做過關于太陽黑子、太陽耀斑、太陽日冕物質抛射的檢測的實驗或項目,請聯系我,自己很是需要您的幫助!謝謝,自己的微信如下,添加時,請備注 太陽黑子檢測,謝謝您啦!