版权声明:大家一起找BUG~~送我回金星吧~~ https://blog.csdn.net/kdyyh/article/details/72652110
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
运行结果:
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
运行结果:
到现在也没有明白,为什么我用上述方法,在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文件
显示的效果不是很好,还需继续学习改进。