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()

这部分代码使用暗框和平场校准图像......当我在绘图时使用时vminvmax我得到了正确的图片,但我不知道如何vmin工作vmax。我需要将其应用于图像数据(imgg),因为当我保存数据时,我得到的图像没有vmin并且vmax......

有什么建议么?

第二个问题...如何将数据更改保存在适合文件中?当我im.close()只在一个文件上使用这项工作但不循环工作时。

谢谢

编辑

好的,这是完整的脚本

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

vminin和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将数据标准化为它的minmax

在此处输入图像描述

但是当我们将vminand设置vmax为 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 回答