centroid_sources#

photutils.centroids.centroid_sources(data, xpos, ypos, box_size=11, footprint=None, mask=None, centroid_func=<function centroid_com>, **kwargs)[source]#

Calculate the centroid of sources at the defined positions in a 2D array using a specified centroid function.

A cutout image centered on each input position will be used to calculate the centroid position. The cutout image is defined either using the box_size or footprint keyword. The footprint keyword can be used to create a non-rectangular cutout image.

Masks and non-finite values are handled by the input centroid_func. When using a centroid function provided by Photutils, non-finite values (e.g., NaN or inf) in the data array are automatically masked. The centroid_1dg and centroid_2dg functions also automatically mask any pixels with non-finite error array values. The final mask is a logical OR combination of the input mask, the automatically generated mask(s) for non-finite values, and the mask of the input data if it is a MaskedArray. The centroid is calculated using only the unmasked data values.

Parameters:
data2D array_like

The 2D image data. data can be a MaskedArray. The image should be background-subtracted.

xpos, yposfloat or array_like of float

The initial x and y pixel position(s) of the center position. A cutout image centered on this position will be used to calculate the centroid.

box_sizeint or array_like of int, optional

The size of the cutout image along each axis. If box_size is a number, then a square cutout of box_size will be created. If box_size has two elements, they must be in (ny, nx) order. box_size must have odd values for both axes. Either box_size or footprint must be defined. If they are both defined, then footprint overrides box_size.

footprintbool ndarray, optional

A 2D boolean array where True values describe the local footprint region to cutout. footprint can be used to create a non-rectangular cutout image, in which case the input xpos and ypos represent the center of the minimal bounding box for the input footprint. box_size=(n, m) is equivalent to footprint=np.ones((n, m)). Either box_size or footprint must be defined. If they are both defined, then footprint overrides box_size. The same footprint is used for all sources.

mask2D bool ndarray, optional

A 2D boolean array with the same shape as data, where a True value indicates the corresponding element of data is masked. If data is a MaskedArray, its mask will be combined (using bitwise OR) with the input mask.

centroid_funccallable, optional

A callable object (e.g., function or class) that is used to calculate the centroid of a 2D array. The centroid_func must accept a 2D ndarray, have a mask keyword and optionally an error keyword. The callable object must return two scalar values representing the (x, y) centroid. The default is centroid_com.

**kwargsdict, optional

Any additional keyword arguments accepted by the centroid_func.

Returns:
xcentroid, ycentroidndarray

The x and y pixel position(s) of the centroids. NaNs will be returned where the centroid failed. This is usually due a box_size that is too small when using a fitting-based centroid function (e.g., centroid_1dg, centroid_2dg, or centroid_quadratic).

Examples

>>> import numpy as np
>>> from photutils.centroids import centroid_2dg, centroid_sources
>>> from photutils.datasets import make_4gaussians_image
>>> data = make_4gaussians_image()
>>> data -= np.median(data[0:30, 0:125])
>>> x_init = (25, 91, 151, 160)
>>> y_init = (40, 61, 24, 71)
>>> x, y = centroid_sources(data, x_init, y_init, box_size=25,
...                         centroid_func=centroid_2dg)
>>> print(x)
[ 24.96807828  89.98684636 149.96545721 160.18810915]
>>> print(y)
[40.03657613 60.01836631 24.96777946 69.80208702]

(Source code, png, hires.png, pdf, svg)

../_images/photutils-centroids-centroid_sources-1.png