def sph_ifs_correct_spectral_xtalk(img):
'''
Corrects a IFS frame from the spectral crosstalk
This routines corrects for the SPHERE/IFS spectral crosstalk at
small scales and (optionally) at large scales. This correction is
necessary to correct the signal that is "leaking" between
lenslets. See Antichi et al. (2009ApJ...695.1042A) for a
theoretical description of the IFS crosstalk. Some informations
regarding its correction are provided in Vigan et al. (2015), but
this procedure still lacks a rigorous description and performance
analysis.
Since the correction of the crosstalk involves a convolution by a
kernel of size 41x41, the values at the edges of the frame depend
on how you choose to apply the convolution. Current implementation
is EDGE_TRUNCATE. In other parts of the image (i.e. far from the
edges), the result is identical to original routine by Dino
Mesa. Note that in the original routine, the convolution that was
coded did not treat the edges in a clean way defined
mathematically. The scipy.ndimage.convolve() function offers
different possibilities for the edges that are all documented.
Parameters
----------
img : array_like
Input IFS science frame
Returns
-------
img_corr : array_like
Science frame corrected from the spectral crosstalk
'''
# definition of the dimension of the matrix
sepmax = 20
dim = sepmax*2+1
bfac = 0.727986/1.8
# defines a matrix to be used around each pixel
# (the value of the matrix is lower for greater
# distances form the center.
x, y = np.meshgrid(np.arange(dim)-sepmax, np.arange(dim)-sepmax)
rdist = np.sqrt(x**2 + y**2)
kernel = 1 / (1+rdist**3 / bfac**3)
kernel[(np.abs(x) <= 1) & (np.abs(y) <= 1)] = 0
# convolution and subtraction
conv = ndimage.convolve(img, kernel, mode='reflect')
img_corr = img - conv
return img_corr
评论列表
文章目录