Source code for pynpoint.util.sdi
"""
Functions for spectral differential imaging.
"""
import numpy as np
from typeguard import typechecked
from pynpoint.util.image import scale_image, shift_image
[docs]@typechecked
def sdi_scaling(image_in: np.ndarray,
scaling: np.ndarray) -> np.ndarray:
"""
Function to rescale the images by their wavelength ratios.
Parameters
----------
image_in : np.ndarray
Data to rescale
scaling : np.ndarray
Scaling factors.
Returns
-------
np.ndarray
Rescaled images with the same shape as ``image_in``.
"""
if image_in.shape[0] != scaling.shape[0]:
raise ValueError('The number of wavelengths is not equal to the number of available '
'scaling factors.')
image_out = np.zeros(image_in.shape)
for i in range(image_in.shape[0]):
swaps = scale_image(image_in[i, ], scaling[i], scaling[i])
npix_del = swaps.shape[-1] - image_out.shape[-1]
if npix_del == 0:
image_out[i, ] = swaps
else:
if npix_del % 2 == 0:
npix_del_a = int(npix_del/2)
npix_del_b = int(npix_del/2)
else:
npix_del_a = int((npix_del-1)/2)
npix_del_b = int((npix_del+1)/2)
image_out[i, ] = swaps[npix_del_a:-npix_del_b, npix_del_a:-npix_del_b]
if npix_del % 2 == 1:
image_out[i, ] = shift_image(image_out[i, ], (-0.5, -0.5), interpolation='spline')
return image_out
[docs]@typechecked
def scaling_factors(wavelengths: np.ndarray) -> np.ndarray:
"""
Function to calculate the scaling factors for SDI.
Parameters
----------
wavelengths : np.ndarray
Array with the wavelength of each frame.
Returns
-------
np.ndarray
Scaling factors.
"""
return max(wavelengths) / wavelengths