2017-08-07 4 views
-1

FITSファイルから画像サブサンプルにアクセスするにはどうすればよいですか?FITSファイルから画像データにアクセスするにはどうすればよいですか?

データが正確にどこにあるのかわかりませんでした。ファイルヘッダーは、それが2番目のヘッダーにあり、サイズが1024 * 1024であることを示しています!しかし、私が2番目のヘッダーにアクセスしようとすると、イメージ配列を取得せず、代わりに "非タイプ"のファイルを取得します。私はここに何か間違ったことがあると信じています!

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(ファイル名)のショートカットです。 data = hdul [0] .data'(またはいくつかのフォーマットでは最初のHDUが空である場合は 'hdul [1] .data')これは非常に基本的な使い方で便利なこともありますが、より洗練されたもののために完全なオブジェクト指向のAPIを学ぶべきです。 – Iguananaut

1

あなたはここ二HDUにアクセスするにもかかわらず:

hdu=headerList[1] 

あなたはそのHDUからdataは表示されませんが、あなたは最初のHDUからimgDataを選択しました:

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

修正でしょう表示するだけでhdu.data

plt.imshow(hdu.data) 
関連する問題