Metadata-Version: 2.4
Name: fast-regionprops
Version: 0.1.0
Summary: Vectorized region-property features (skimage-compatible) via a single scatter pass.
Project-URL: Homepage, https://github.com/maweigert/fast-regionprops
Author: Martin Weigert
License: BSD-3-Clause
Keywords: image-analysis,microscopy,numpy,regionprops,scikit-image
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Image Processing
Requires-Python: >=3.10
Requires-Dist: numpy
Requires-Dist: scipy
Provides-Extra: dev
Requires-Dist: pre-commit; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: scikit-image; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest; extra == 'test'
Requires-Dist: scikit-image; extra == 'test'
Description-Content-Type: text/markdown

# fast-regionprops

A faster (vectorized) version of `regionprops` that supports a subset of
region-property features, yielding a typical ~10–80× speedup (especially for many regions).
Can be used as a drop-in replacement for `skimage.measure.regionprops_table` for the following
set of properties:

```
label, area, centroid, bbox, equivalent_diameter_area,
intensity_mean, intensity_min, intensity_max, intensity_std,
inertia_tensor, border_dist
```


| Dim | Image size | #Regions | skimage (ms) | fast (ms) | Speedup |
|-----|------------|----------|--------------|-----------|---------|
| 2D | 512×512 | 100 | 10.5 | 0.4 | 26.8× |
| 2D | 512×512 | 400 | 40.8 | 0.5 | 77.8× |
| 2D | 1024×1024 | 1600 | 163.1 | 2.0 | 82.8× |
| 2D | 2048×2048 | 3600 | 368.7 | 6.5 | 57.0× |
| 3D | 128×128×128 | 512 | 76.5 | 3.3 | 23.5× |
| 3D | 256×256×256 | 1728 | 229.6 | 19.6 | 11.7× |



## Install

```bash
pip install fast-regionprops
# dev / tests
pip install -e ".[test]"
# dev / tests / pre-commit
pip install -e ".[dev]"
pre-commit install
```

## Usage

```python
import numpy as np
from skimage.data import binary_blobs
from skimage.measure import label

from fast_regionprops import regionprops_table_fast

# example data: blobs as mask, random image as intensity
mask = label(binary_blobs(length=512, blob_size_fraction=0.05, volume_fraction=0.1))
intensity = np.random.default_rng(0).random(mask.shape).astype("float32")

# drop-in for skimage.measure.regionprops_table (same column names)
table = regionprops_table_fast(
    mask,
    intensity,
    properties=("label", "area", "centroid", "intensity_mean", "inertia_tensor"),
)
table["centroid-0"], table["inertia_tensor-0-1"]   # 1D arrays, one row per label
```

Output is a `dict[str, np.ndarray]` (same as for `skimage.measure.regionprops_table`)

## Property notes

- Calling `regionprops_table_fast(label_image)` uses the same default
properties as `skimage.measure.regionprops_table`: `label` and `bbox`.

- `label_image` must be an integer 2D or 3D label image. Boolean and floating
point inputs are rejected as ambiguous; labels `<= 0` are ignored.

- `intensity_image` may have the same shape as `label_image`, or one extra
trailing channel axis. Multichannel intensity columns follow skimage naming,
for example `intensity_mean-0`, `intensity_mean-1`.

- `border_dist` is an extra property (not in skimage): the
per-label max of a field that fades from 1 at the image border to 0 once `border_dist_cutoff` px away (last two axes only).

- properties needing a convex hull / perimeter / topology
(`solidity`, `perimeter`, `euler_number`, etc.) are not yet supported.

## License

BSD-3-Clause.
