I write script for calibration of image (dark frame and flat field)...Here is part of code
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()
This part of code make calibration of image with dark frame and flat field... When I use at the plotting vmin
and vmax
, I get the right picture but I don't know how vmin
and vmax
work. I need to apply this on image data (imgg
) because when I save data I get images without vmin
and vmax
...
Any suggestions?
And the second question... How I can save data changes in fits files? When I used im.close()
this work only on one file but don't work in loop.
Thanks
edit
OK here is full script
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()
A bit ofuscated question but I think this does what you want (from your comment in the other answer).
To clamp the data with the same behaviour as vmin
and vmax
, use np.clip
:
np.clip(data, min, max)
In your case:
data = np.clip(data, 0.5, 1.5)