karabo.imaging.image

Overview

This package provides the Image base class. It is used in the Karabo package to store and manipulate image data.

Classes

class Image(*, path: Path | str, data: Literal[None] = None, header: Literal[None] = None, **kwargs: Any)
class Image(*, path: Literal[None] = None, data: ndarray[Any, dtype[float64]], header: Header, **kwargs: Any)
__init__(*, path: Path | str, data: Literal[None] = None, header: Literal[None] = None, **kwargs: Any) None
__init__(*, path: Literal[None] = None, data: ndarray[Any, dtype[float64]], header: Header, **kwargs: Any) None
circle() None

For each frequency channel and polarisation, cutout the pixel values, only keeping data for a circle of the computed radius, centered at the center of the image. This is an in-place transformation of the data.

Returns:

None (data of current Image instance is transformed in-place)

cutout(center_xy: Tuple[float, float], size_xy: Tuple[float, float]) Image

Cutout the image to the given size and center.

Parameters:
  • center_xy – Center of the cutout in pixel coordinates

  • size_xy – Size of the cutout in pixel coordinates

Returns:

Cutout of the image

get_beam_parameters() BeamType

Gets the beam-parameters fom the image-header.

“bmaj”: FWHM of the major axis of the elliptical Gaussian beam in arcsec “bmin”: FWHM of the minor minor axis of the elliptical Gaussian beam in arcsec “bpa”: position angle of the major axis of the elliptical Gaussian beam in

degrees, counter-clock from the North direction

Returns:

“bmaj” (arcsec), “bmin” (arcsec), “bpa” (deg)

classmethod get_corners_in_world(header: Header) ndarray[Any, dtype[float64]]

Get the image corners RA,DEC of bl, br, tr & tl from header in deg.

Assumes that header has at least two axis RA & DEC.

Args:

header: Header to extract image-infos.

Returns:

Corners in world coordinates [deg] with shape 4x2.

get_dimensions_of_image() List[int]

Get the sizes of the dimensions of this Image in an array. :return: list with the dimensions.

get_power_spectrum(resolution: float = 0.0005, signal_channel: int | None = None) Tuple[ndarray[Any, dtype[float64]], ndarray[Any, dtype[float64]]]

Calculate the power spectrum of this image.

Parameters:
  • resolution – Resolution in radians needed for conversion from Jy to Kelvin

  • signal_channel – channel containing both signal and noise (arr of same shape as nchan of Image), optional

Return (profile, theta_axis):
  • profile: Brightness temperature for each angular scale in Kelvin

  • theta_axis: Angular scale data in degrees

get_quality_metric() Dict[str, Any]

Get image statistics. Statistics include :

  • Shape of Image –> ‘shape’

  • Max Value –> ‘max’

  • Min Value –> ‘min’

  • Max Value absolute –> ‘max-abs’

  • Root mean square (RMS) –> ‘rms’

  • Sum of values –> ‘sum’

  • Median absolute –> ‘median-abs’

  • Median absolute deviation median –> ‘median-abs-dev-median’

  • Median –> ‘median’

  • Mean –> ‘mean’

Returns:

Dictionary holding all image statistics

has_beam_parameters() bool

Check if the image has the beam parameters in the header. :param image: Image to check :return: True if the image has the beam parameters in the header

overplot_with_skymodel(sky: SkyModel, filename: Path | str | None = None, block: bool = False, channel_index: int = 0, stokes_index: int = 0, vmin_image: float | None = None, vmax_image: float | None = None) None

Create a plot with the current image data, as well as an overlay of sources from a given SkyModel instance.

Parameters:
  • sky – a SkyModel instance, with sources to be plotted.

  • filename – path to the file where the final plot will be saved. If None, the plot is not saved.

  • block – whether plotting should block the remaining of the script.

  • channel_index – Which frequency channel to show in the plot. Defaults to 0.

  • stokes_index – Which polarisation to show in the plot. Defaults to 0 (stokesI).

  • vmax_image (vmin_image,) – Limits for colorbar of Image plot.

plot(title: str | None = None, xlim: Tuple[float, float] | None = None, ylim: Tuple[float, float] | None = None, figsize: Tuple[float, float] | None = None, colorbar_label: str | None = None, xlabel: str | None = None, ylabel: str | None = None, cmap: str | None = 'jet', origin: Literal['upper', 'lower'] | None = 'lower', wcs_enabled: bool = True, invert_xaxis: bool = False, filename: str | None = None, block: bool = False, **kwargs: Any) None

Plots the image

Parameters:
  • title – the title of the colormap

  • xlim – RA-limit of plot

  • ylim – DEC-limit of plot

  • figsize – figsize as tuple

  • title – plot title

  • xlabel – xlabel

  • ylabel – ylabel

  • cmap – matplotlib color map

  • origin – place the [0, 0] index of the array in

the upper left or lower left corner of the Axes :param wcs_enabled: Use wcs transformation? :param invert_xaxis: Do you want to invert the xaxis? :param filename: Set to path/fname to save figure (set extension to fname to overwrite .png default) :param block: Whether plotting should block the remaining of the script :param kwargs: matplotlib kwargs for scatter & Collections, e.g. customize s, vmin or vmax

plot_power_spectrum(resolution: float = 0.0005, signal_channel: int | None = None, path: Path | str | None = None, block: bool = False) None

Plot the power spectrum of this image.

Parameters:
  • resolution – Resolution in radians needed for conversion from Jy to Kelvin

  • signal_channel – channel containing both signal and noise (arr of same shape as nchan of Image), optional

  • save_png – True if result should be saved, default = False

  • block – Whether plotting should block the remaining of the script

plot_side_by_side_with_skymodel(sky: SkyModel, filename: Path | str | None = None, block: bool = False, channel_index: int = 0, stokes_index: int = 0, vmin_sky: float = 0, vmax_sky: float = inf, vmin_image: float = 0, vmax_image: float = inf) None

Create a plot with two panels: 1. the current image data, and 2. a scatter plot of sources from a given SkyModel instance.

Parameters:
  • sky – a SkyModel instance, with sources to be plotted.

  • filename – path to the file where the final plot will be saved. If None, the plot is not saved.

  • block – whether plotting should block the remaining of the script.

  • channel_index – Which frequency channel to show in the plot. Defaults to 0.

  • stokes_index – Which polarisation to show in the plot. Defaults to 0 (stokesI).

  • vmax_sky (vmin_sky,) – Limits for colorbar of SkyModel scatter plot.

  • vmax_image (vmin_image,) – Limits for colorbar of Image plot.

resample(shape: Tuple[int, ...], **kwargs: Any) None

Resamples the image to the given shape using SciPy’s RegularGridInterpolator for bilinear interpolation. See: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html

Parameters:
  • shape – The desired shape of the image

  • kwargs – Keyword arguments for the interpolation function

split_image(N: int, overlap: int = 0) List[Image]

Split the image into N x N equal-sized sections with optional overlap.

Parameters

Nint

The number of sections to split the image into along one axis. The total number of image sections will be N^2. It is assumed that the image can be divided into N equal parts along both axes. If this is not the case (e.g., image size is not a multiple of N), the sections on the edges will have fewer pixels.

overlapint, optional

The number of pixels by which adjacent image sections will overlap. Default is 0, meaning no overlap. Negative overlap means that there will be empty sections between the cutouts.

Returns

cutoutslist

A list of cutout sections of the image. Each element in the list is a 2D array representing a section of the image.

Notes

The function calculates the step size for both the x and y dimensions by dividing the dimension size by N. It then iterates over N steps in both dimensions to generate starting and ending indices for each cutout section, taking the overlap into account.

The cutout function (not shown) is assumed to take the center (x, y) coordinates and the (width, height) of the desired cutout section and return the corresponding 2D array from the image.

The edge sections will be equal to or smaller than the sections in the center of the image if the image size is not an exact multiple of N.

Examples

>>> # Assuming `self.data` is a 4D array with shape (C, Z, X, Y)
>>> # and `self.cutout` method is defined
>>> image = Image()
>>> cutouts = image.split_image(4, overlap=10)
>>> len(cutouts)
16  # because 4x4 grid
write_to_file(path: Path | str, overwrite: bool = False) None

Write an Image to path as .fits

class ImageMosaicker(reproject_function: ~typing.Callable[[...], ~typing.Any] = <function reproject_interp>, combine_function: str = 'mean', match_background: bool = False, background_reference: int | None = None)

A class to handle the combination of multiple images into a single mosaicked image. See: https://reproject.readthedocs.io/en/stable/mosaicking.html

Parameters More information on the parameters can be found in the documentation: https://reproject.readthedocs.io/en/stable/api/reproject.mosaicking.reproject_and_coadd.html # noqa: E501 However, here the most common to tune are explained. ———- reproject_function : callable, optional

The function to use for the reprojection.

combine_function{‘mean’, ‘sum’}

The type of function to use for combining the values into the final image.

match_backgroundbool, optional

Whether to match the backgrounds of the images.

background_referenceNone or int, optional

If None, the background matching will make it so that the average of the corrections for all images is zero. If an integer, this specifies the index of the image to use as a reference.

Methods

get_optimal_wcs(images, projection=’SIN’, **kwargs)

Get the optimal WCS for the given images. See: https://reproject.readthedocs.io/en/stable/api/reproject.mosaicking.find_optimal_celestial_wcs.html # noqa: E501

process(

images ) Combine the provided images into a single mosaicked image.

__init__(reproject_function: ~typing.Callable[[...], ~typing.Any] = <function reproject_interp>, combine_function: str = 'mean', match_background: bool = False, background_reference: int | None = None)
get_optimal_wcs(images: List[Image], projection: str = 'SIN', **kwargs: Any) Tuple[WCS, tuple[int, int]]

Set the optimal WCS for the given images. See: https://reproject.readthedocs.io/en/stable/api/reproject.mosaicking.find_optimal_celestial_wcs.html # noqa: E501

Parameters

imageslist

A list of images to combine.

projectionstr, optional

Three-letter code for the WCS projection, such as ‘SIN’ or ‘TAN’.

**kwargsdict, optional

Additional keyword arguments to be passed to the reprojection function.

Returns

WCS

The optimal WCS for the given images.

tuple

The shape of the optimal WCS.

mosaic(images: List[Image], wcs: Tuple[WCS, Tuple[int, int]] | None = None, input_weights: List[str | fits.HDUList | fits.PrimaryHDU | NDArray[np.float64]] | None = None, hdu_in: int | str | None = None, hdu_weights: int | str | None = None, shape_out: Tuple[int] | None = None, image_for_header: Image | None = None, **kwargs: Any) Tuple[Image, NDArray[np.float64]]

Combine the provided images into a single mosaicked image.

Parameters

imageslist

A list of images to combine.

wcstuple, optional

The WCS to use for the mosaicking. Will be calculated with get_optimal_wcs if not passed.

input_weightslist, optional

If specified, an iterable with the same length as images, containing weights for each image.

shape_outtuple, optional

The shape of the output data. If None, it will be computed from the images.

hdu_inint or str, optional

If one or more items in input_data is a FITS file or an HDUList instance, specifies the HDU to use.

hdu_weightsint or str, optional

If one or more items in input_weights is a FITS file or an HDUList instance, specifies the HDU to use.

image_for_headerImage, optional

From which image the header should be used to readd the lost information by the mosaicking because some information is not propagated.

**kwargsdict, optional

Additional keyword arguments to be passed to the reprojection function.

Returns

fits.PrimaryHDU

The final mosaicked image as a FITS HDU.

np.ndarray

The footprint of the final mosaicked image.

Raises

ValueError

If less than two images are provided.