Fits画像から分散を求めるコード

TL; DR

glasnsciです。astropyを使って天体写真等を撮影したfits画像から輝度分散を求めるコードのようなものです。Python3で動きます。

コード

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

fits_map = ft.open('file3.fits')

header = fits_map[0].header
data = fits_map[0].data

#print(repr(header)) #Header Information
#print(repr(data)) #Is the data caontained properly?

r_ch=data[0,:,:]
g_ch=data[1,:,:]
b_ch=data[2,:,:]

#L = np.sqrt(r_ch ** 2 + g_ch ** 2 + b_ch **2) #輝度は絶対値でいいと思っていたけど違うみたい
L =  0.2126 * r_ch + 0.7152 * g_ch + 0.0722 * b_ch

var=np.var(L)
print(var)

f:id:fornax:20210103140248p:plain

だぼさんに教えていただいて正解にたどり着きました。ありがとうございます。色々わかってないまま進めるからわからなくなるんじゃボケって感じです。ホントこういうことは門外漢だなあ……普段から旋盤と遊んでいたからこういうのがわからない……。

参照: qiita.com

以下は恥を晒すために消しません。無視してください。供養なーむ。

from astropy.io import fits as ft
import numpy as np

fits_map = ft.open('file.fits')

#print(repr(fits_map[0].header)) #Header Information
#print(repr(fits_map[0].data)) #Is the data contained properly?

var=np.var(fits_map[0].data)
print(var)

適当なファイルを計算させると0.003某といういかにもっぽい分散のような値を吐くのでまあこれでいいかと思ったんですが、ひょっとしてRGBごっちゃになった分散でしょうか。FITSのデーター構造がどうなっているかわからないからなんとも言えないですよね。

果たしてカラーで処理しているのか、グレースケールで処理しているのか、デベイヤー前で処理しているのかわからないので、matplotlibをインポートしてプロットすればいいじゃんと思ったわけなんですが……。

でも、matplotlib.imshow(data)しようとすると、データ構造が違うよ!って怒られます。1x3の行列だから多分RGBだとは思うんです。ただしTypeError: Invalid shape (3, 4016, 5422) for image dataって怒られるので、なんかぶっ飛んだデータがいるのでは?でもでも、numpy.max()で行列の中身見ても、そんな値は発見できず……。

一時取り下げましたが、恥をさらして供養しておきます。なんか初歩的なミスしてるんだろうな