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()
sumdd.astype(float)
, without assigning the result to a new variable. The.astype()
method returns a new array object, so just calling that in-place on an array does nothing. Incidentally there's no reason to keep casting to float. As long as one of the arrays is float all operations will automatically cast to float.for i in range(1,len(dark)):
--here you can just iterate directly over the list of filenames, likefor filename in dark:
. No need to use range. Same in the other two for loops. – Stephan