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