"""Image operations visible to the Execution Framework as Components"""
__all__ = ["image_gradients"]
import logging
import warnings
import numpy
from astropy.wcs import FITSFixedWarning
from ska_sdp_datamodels.image.image_model import Image
warnings.simplefilter("ignore", FITSFixedWarning)
log = logging.getLogger("rascil-logger")
[docs]
def image_gradients(im: Image):
"""Calculate image first order gradients numerically
Two images are returned: one with respect to x and one with respect to y
Gradient units are (incoming unit)/pixel e.g. Jy/beam/pixel
:param im: Image
:return: Gradient images
"""
ny, nx = im["pixels"].data.shape[2:]
gradientx = Image.constructor(
data=numpy.zeros_like(im["pixels"].data),
polarisation_frame=im.image_acc.polarisation_frame,
wcs=im.image_acc.wcs,
clean_beam=im.attrs["clean_beam"],
)
gradientx["pixels"].data[..., :, 1:nx] = (
im["pixels"].data[..., :, 1:nx] - im["pixels"].data[..., :, 0 : (nx - 1)]
)
gradienty = Image.constructor(
data=numpy.zeros_like(im["pixels"].data),
polarisation_frame=im.image_acc.polarisation_frame,
wcs=im.image_acc.wcs,
clean_beam=im.attrs["clean_beam"],
)
gradienty["pixels"].data[..., 1:ny, :] = (
im["pixels"].data[..., 1:ny, :] - im["pixels"].data[..., 0 : (ny - 1), :]
)
return gradientx, gradienty