Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

vmin vmax algorithm matplotlib

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()
like image 498
Franta Konopnik Avatar asked Mar 04 '26 06:03

Franta Konopnik


1 Answers

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)
like image 98
Imanol Luengo Avatar answered Mar 06 '26 19:03

Imanol Luengo