问题
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()
回答1:
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)
回答2:
The use of vmin
and vmax
arguments in imshow
are used in conjunction with norm to normalize your data.
Example:
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()
You get a plot like this, wherein imshow
normalizes the data to its min
and max
.
But when we set vmin
and vmax
to 0 and 1, the colours will be normalised as if there was a value 0 and a value 1 present in the data.
Here we change imshow
as
im = plt.imshow(data,cmap = plt.get_cmap('jet'), vmin=0, vmax=1)
as you can see from the colourbar that it is normalised to 0 and 1.
来源:https://stackoverflow.com/questions/31232733/vmin-vmax-algorithm-matplotlib