3

画像(ダークフレームとフラットフィールド)のキャリブレーション用のスクリプトを書きます...コードの一部です

for n in range(len(img)):
  with pyfits.open(img[n], mode='update', memmap=True) as im:
    imgg = im[0].data
    header = im[0].header
    imgg.astype(float)
    imgg = (imgg - dd) / df
    imgg[np.isnan(imgg)] = 1
    imgg.astype(int)
    plt.imshow(imgg, cmap=plt.cm.Greys_r, vmin=0.5, vmax=1.5)
    plt.show()

コードのこの部分は、ダークフレームとフラットフィールドで画像のキャリブレーションを行います... プロッティングで使用するvminと、正しい画像が得られますが、方法と動作vmaxがわかりません。これを画像データ ( ) に適用する必要があるのは、データを保存すると画像が取得され、...vminvmaximggvminvmax

助言がありますか?

そして 2 番目の質問... データの変更を fit ファイルに保存するにはどうすればよいですか? im.close()この作業を1つのファイルでのみ使用した場合、ループでは機能しません。

ありがとう

編集

OKここに完全なスクリプトがあります

import numpy as np
import pyfits
from matplotlib import pyplot as plt
import glob


dark=glob.glob('.../ha/dark/*.fits')
flat=glob.glob('.../ha/flat/*.fits')
img=glob.glob('.../ha/*.fits')

sumd0 = pyfits.open(dark[0])
sumdd=sumd0[0].data
sumdd.astype(float)
for i in range(1,len(dark)):
     sumdi=pyfits.open(dark[i])
     sumdi=sumdi[0].data
     sumdd=sumdd.astype(float)+sumdi.astype(float)
dd=sumdd/len(dark)

sumf0 = pyfits.open(flat[0])
sumff=sumf0[0].data
sumff.astype(float)
for i in range(1,len(flat)):
     sumfi=pyfits.open(flat[i])
     sumfi=sumfi[0].data
     sumff=sumff.astype(float)+sumfi.astype(float)

ff=sumff/len(flat)

df=(ff-dd)

for n in range(len(img)):
    with pyfits.open(img[n],mode='update',memmap=True) as im:
        imgg=im[0].data
        header=im[0].header
        imgg.astype(float)
        imgg=(imgg-dd)/df
        imgg.astype(int)
plt.imshow(imgg,cmap=plt.cm.Greys_r,vmin=0.5,vmax=1.5)
plt.show()
4

2 に答える 2

6

少しよくある質問ですが、これはあなたが望むことだと思います(他の回答のコメントから)。

vminおよび と同じ動作でデータをクランプするには、次vmaxを使用しますnp.clip

np.clip(data, min, max)

あなたの場合:

data = np.clip(data, 0.5, 1.5)
于 2015-07-05T21:02:28.247 に答える
4

vminおよびのvmax引数の使用はimshow、データを正規化するために norm と組み合わせて使用​​されます。

例:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,10)
y = np.sin(x)

data = np.array([x,y])

# WITHOUT VMIN AND VMAX
im = plt.imshow(data,cmap = plt.get_cmap('jet'))
plt.colorbar(im)
plt.show() 

このようなプロットが得られます。ここでimshowは、データをそのminおよびに正規化しますmax

ここに画像の説明を入力

しかし、vminandvmaxを 0 と 1 に設定すると、データに値 0 と値 1 が存在するかのように色が正規化されます。

ここでは次のように変更imshowします。

im = plt.imshow(data,cmap = plt.get_cmap('jet'), vmin=0, vmax=1)

ここに画像の説明を入力

カラーバーからわかるように、0 と 1 に正規化されています。

于 2015-07-05T20:14:59.997 に答える