phenotypic.measure.MeasureBounds#

class phenotypic.measure.MeasureBounds(*args, **kwargs)[source]

Bases: MeasureFeatures

Extract bounding box coordinates and centroids of detected colonies.

Compute the axis-aligned bounding box and centroid (geometric and intensity-weighted) for each detected colony. These spatial measurements form the foundation for region-of-interest extraction, grid alignment assessment, and neighbor-distance calculations.

Returns:

pd.DataFrame: Object-level spatial data with columns:

  • Label: unique object identifier.

  • CenterRR, CenterCC: geometric centroid coordinates.

  • IntensityWeightedCenterRR, IntensityWeightedCenterCC: intensity-weighted centroid coordinates (skimage centroid_weighted).

  • DistWeightedCenterRR, DistWeightedCenterCC: row/column of the per-object distance-transform maximum (deepest interior point — robust to thin filamentous extensions).

  • MinRR, MinCC: top-left corner of bounding box.

  • MaxRR, MaxCC: bottom-right corner of bounding box.

Best For:
  • Computing centroids for aligning colonies to expected grid positions in arrayed assays.

  • Extracting region-of-interest crops for downstream intensity, color, or texture analysis.

  • Assessing colony positioning relative to plate edges or well boundaries.

Consider Also:
See Also:

Tutorial 7: Measuring and Exporting for a walkthrough of measuring and exporting colony data.

Category: BBOX#

Name

Description

CenterRR

The row coordinate of the center of the bounding box.

MinRR

The smallest row coordinate of the bounding box.

MaxRR

The largest row coordinate of the bounding box.

CenterCC

The column coordinate of the center of the bounding box.

MinCC

The smallest column coordinate of the bounding box.

MaxCC

The largest column coordinate of the bounding box.

IntensityWeightedCenterRR

The intensity-weighted center row coordinate of the object (skimage centroid_weighted).

IntensityWeightedCenterCC

The intensity-weighted center column coordinate of the object (skimage centroid_weighted).

DistWeightedCenterRR

Row coordinate of the per-object Euclidean-distance-transform maximum (deepest interior point of the object mask). Robust to thin filamentous extensions that pull intensity-weighted centroids off-body.

DistWeightedCenterCC

Column coordinate of the per-object Euclidean-distance-transform maximum (deepest interior point of the object mask). Robust to thin filamentous extensions that pull intensity-weighted centroids off-body.

Methods

__init__

measure

Execute the measurement operation on a detected-object image.

__del__()

Automatically stop tracemalloc when the object is deleted.

measure(image, include_meta=False)

Execute the measurement operation on a detected-object image.

This is the main public API method for extracting measurements. It handles: input validation, parameter extraction via introspection, calling the subclass-specific _operate() method, optional metadata merging, and exception handling.

How it works (for users):

  1. Pass your processed Image (with detected objects) to measure()

  2. The method calls your subclass’s _operate() implementation

  3. Results are validated and returned as a pandas DataFrame

  4. If include_meta=True, image metadata (filename, grid info) is merged in

How it works (for developers):

When you subclass MeasureFeatures, you only implement _operate(). This measure() method automatically:

  • Extracts __init__ parameters from your instance (introspection)

  • Passes matched parameters to _operate() as keyword arguments

  • Validates the Image has detected objects (objmap)

  • Wraps exceptions in OperationFailedError with context

  • Merges grid/object metadata if requested

Parameters:
  • image (Image) – A PhenoTypic Image object with detected objects (must have non-empty objmap from a prior detection operation).

  • include_meta (bool, optional) – If True, merge image metadata columns (filename, grid position, etc.) into the results DataFrame. Defaults to False.

Returns:

Measurement results with structure:

  • First column: OBJECT.LABEL (integer IDs from image.objmap[:])

  • Remaining columns: Measurement values (float, int, or string)

  • One row per detected object

If include_meta=True, additional metadata columns are prepended before OBJECT.LABEL (e.g., Filename, GridRow, GridCol).

Return type:

pd.DataFrame

Raises:

OperationFailedError – If _operate() raises any exception, it is caught and re-raised as OperationFailedError with details including the original exception type, message, image name, and operation class. This provides consistent error handling across all measurers.

Notes

  • This method is the main entry point; do not override in subclasses

  • Subclasses implement _operate() only, not this method

  • Automatic memory profiling is available via logging configuration

  • Image must have detected objects (image.objmap should be non-empty)

Examples

Basic measurement extraction:

>>> from phenotypic import Image
>>> from phenotypic.measure import MeasureSize
>>> from phenotypic.detect import OtsuDetector
>>> # Load and detect
>>> image = Image('plate.jpg')
>>> image = OtsuDetector().operate(image)
>>> # Extract measurements
>>> measurer = MeasureSize()
>>> df = measurer.measure(image)
>>> print(df.head())

Include metadata in measurements:

>>> # With image metadata (filename, grid info)
>>> df_with_meta = measurer.measure(image, include_meta=True)
>>> print(df_with_meta.columns)
# Output: ['Filename', 'GridRow', 'GridCol', 'OBJECT.LABEL',
#          'Area', 'IntegratedIntensity', ...]