2017-08-07 78 views
-1

如何从FITS文件访问图像子样本?如何从FITS文件访问图像数据?

我无法确定文件中的数据究竟在哪里!文件标题显示它在第二个标题中,并且它的维数为1024 * 1024!但是当我尝试访问第二个头文件时,我没有得到图像数组,而是得到一个“非文件类型”文件!我相信我在这里做错了!

import matplotlib.pyplot as plt 
from astropy.io import fits 
import cv2 
headerList=fits.open('AIA20100630_0000_0211.fits') 
#Load table data as image data 
#imgData = headerList[1].data 
imgData = headerList[0].data 

hdu=headerList[1] 
print('shape :',hdu.shape) #shape is 1024*1024 

#show image 
plt.figure() 
plt.imshow(imgData) 
plt.show() 

回答

0

而不是使用fits.open()的,你可能要考虑使用fits.getheader('img.fits')fits.getdata('img.fits')。如果您只需要标题或图像数据,这些方法通常会更方便。

在你的情况

from astropy.io import fits 
imgData = fits.getdata('AIA20100630_0000_0211.fits', 1) 

应该加载图像数据的情况下直接通过HDU去。

+1

“这些m如果你需要的只是标题或图像数据,方法比打开整个适合文件要快。“我的意思是,它不是时间上的“更快”,它只是'hdul = fits.open(filename)的快捷方式; data = hdul [0] .data'(或者'hdul [1] .data',如果第一个HDU是空的,对某些格式是通用的)。这对于非常基本的使用来说很好,并且通常很方便,但还是应该学习完整的面向对象的API来完成更复杂的任何事情。 – Iguananaut

1

即使你进入第二HDU这里:

hdu=headerList[1] 

你不显示从HDU的data,但你从第一HDU选择imgData

imgData = headerList[0].data 
... 
plt.imshow(imgData) 

的解决将简单地显示hdu.data

plt.imshow(hdu.data)