Python读取和显示Fits文件

FITS (Flexible Image Transport System)是天文学界常用的数据格式,由文件头和数据组成。

我需要分别处理来自EIT和AIA的fits文件,但因为Fits文件的标准并不统一,做实验的时候,对于EIT的fits文件在IDL中进行处理,AIA的fits文件在matlab中处理。很长一段时间都没有找到能同时处理这两种fits文件的方法(如果有,烦请不吝赐教),到现在也没有明白,为什么我用IDL中的fisread不能读取AIA的fits文件;matlab中的fitsread不能读取EIT的fits文件(在此也向大家请教)。

IDL中读取和显示Fits文件:

mreadfits,'D:\EIT_Dat\efz19970512.155012',index1,data1,header=header
data1=mrdfits('D:\test_data\AIA20130120_1428_0211.fits',1,header)
index2map,index1,data1,map1
plot_map,map1,/log 

运行结果:
Python读取和显示Fits文件_第1张图片

Matlab中读取和显示Fits文件:

data = fitsread('D:\Learning\Master\Project\AIAData\20100705\Test\AIA20100705_0252_0171.fits', 'image')
data = flipud(data);
fitsShow(data);

%%显示函数,将灰度值转换到[0,255]进行显示 
function [ output_args ] = fitsShow( data )
  data_max=max(max(data));
  data_min=min(min(data));
  data_grey=255*(data-data_min)/(data_max-data_min);
  data_grey_r=uint8(data_grey);
  figure(10), imshow(data_grey_r);
end

运行结果:
Python读取和显示Fits文件_第2张图片

到现在也没有明白,为什么我用上述方法,在IDL中不能读取AIA的fits文件;matlab中不能读取EIT的fits文件(在此也向大家请教)

今天又在纠结这个问题,寻找解决方法,看到一篇博文在Python中FITS格式文件数据的读取,于是就开始尝试用Python按照文中的方法对两种fits文件进行读取和显示。最后竟然成功了!期间也有一些bug,但最终问题还是解决了,激动~~

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

### 读取AIA fits
 hdu = fits.open('D:/Learning/Master/Project/AIAData/20100705/Test/AIA20100705_0252_0171.fits');
 #hdu.info();
 hdu.verify('fix');
 #hdu[1].data;
 img_data_aia = np.flipud(hdu[1].data);

### 读取EIT fits
hdu = fits.open('D:/Learning/Master/Project/EITData/1997_May_12/efz19970512.001205');
#hdu.info()
img_data_eit = hdu[0].data;

### 显示fits图像
plt.imshow(img_data_eit, cmap= 'gray');
plt.colorbar();
plt.show();

在读入AIA的fits文件后,如果直接执行hdu[1].data获取imgdata,编译器会报错:

astropy.io.fits.verify.VerifyError: Unparsable card (OSCNMEAN), fix it first with .verify('fix').

这是因为AIA的fits文件不符合fits文件的标准,需要进行fix,所以执行代码:

 hdu.verify('fix');

在这之后,就可以对imgdata进行操作。

Python中显示来自AIA的fits文件
Python读取和显示Fits文件_第3张图片

显示的效果不是很好,还需继续学习改进。

你可能感兴趣的:(天文数据)