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