Skip to main content

Microscopy image preprocessing, segmentation, and profiling pipeline

Project description

microProfiler

Microscopy image preprocessing, segmentation, and profiling pipeline for multi-well plate data.

Converts vendor-specific formats (Operetta, MICA) into a unified file structure, then provides a chainable preprocessing pipeline followed by cell segmentation and feature profiling.

Requirements

  • Python: >= 3.10
  • Conda (recommended) or pip

Quick setup (conda)

# Create environment from curated file
conda env create -f micro.yml
conda activate micro

# Install microProfiler
pip install -e .

# With dev extras (testing, linting)
pip install -e ".[dev]"

Manual setup (conda or pip)

# Conda
conda create -n micro python=3.10
conda activate micro
conda install -c conda-forge cellpose numpy pandas scipy scikit-image tifffile torch jax pyyaml tqdm
pip install natsort "pydantic>=2.0"
pip install -e .

Pipeline Order

Input → Convert[+resize] → Resize → BaSiC → Z-projection → Tile → Segment → Profile
  1. Convert — Vendor-format files → {well}_f{field}_z{z}_t{t}_ch{ch}.tiff (optional resize during write)
  2. Resize (optional) — Standalone resize step (after conversion if --resize is set)
  3. BaSiC correction (optional) — Flatfield/darkfield shading correction
  4. Z-projection (optional) — Max/mean/min projection of Z-stacks
  5. Tile splitting (optional) — Non-overlapping tiles
  6. Segmentation (optional) — Cellpose-SAM object detection
  7. Profiling — Image-level and object-level feature extraction

Quick Start (CLI)

# Run full pipeline using a YAML config file
microprofiler run /path/to/Measurement\ 1 --config examples/pipeline_config.yml

# Run full pipeline on Operetta format (with resize during conversion and standalone resize)
microprofiler run /path/to/Measurement\ 1 --format operetta \
  --convert-resize 0.5 \
  --resize 0.5 \
  --basic fit-transform \
  --z-projection max \
  --tile 540 540 \
  --segment cell --segment-channels ch1 \
  --profile-image \
  --profile-object cell

# Run full pipeline on MICA format
microprofiler run /path/to/Sequence\ 002 --format mica \
  --segment cell --segment-channels ch1 \
  --profile-object cell --db results.db

# Convert only (with optional resize and custom output name)
microprofiler convert /path/to/Measurement\ 1 --format operetta --convert-resize 0.5 --output-name myoutput

# Opt out of in-place processing; opt into vendor file deletion
microprofiler run /path/to/Measurement\ 1 \
  --no-basic-inplace --no-zproject-inplace --no-tile-inplace \
  --delete-original

A complete YAML config with all parameters is at examples/pipeline_config.yml.

Library Usage

from pathlib import Path
from microProfiler.preprocessing.converter import convert_measurement
from microProfiler.preprocessing.z_projection import z_project_dataset
from microProfiler.preprocessing.tile_splitter import tile_dataset
from microProfiler.segmentation.cellpose import segment_dataset
from microProfiler.profiling.image_profiler import profile_images
from microProfiler.profiling.object_profiler import profile_objects

root = Path(r"/path/to/Measurement 1")

# 1. Convert to unified naming (optional resize during conversion)
#    Returns an ImageDataset pointing to "image/" by default
ds = convert_measurement(root, vendor_format="operetta", resize_factor=0.5)

# 3. Preprocess (in-place by default — files updated in the images/ directory)
ds = z_project_dataset(ds, root_dir=root, method="max")
ds = tile_dataset(ds, root_dir=root, tile_w=540, tile_h=540)

# 4. Segment
ds = segment_dataset(ds, object_name="cell", chan1=["ch1"])

# 5. Profile
profile_images(ds, db_path=root / "results.db", table_name="image")
profile_objects(ds, mask_name="cell",
                intensity_channels=["ch1", "ch2"],
                db_path=root / "results.db")

Supported Vendor Formats

Format Input Pattern Output Pattern
Operetta r{row}c{col}f{field}p{stack}-ch{channel}sk{timepoint}fk1fl1.tiff {well}_f{field}_z{stack}_t{timepoint}_ch{channel}.tiff
MICA {row}/{col}/Pos{field}.tif {well}_f{field}_z1_t1_ch{channel}.tiff

Key Modules

Module Purpose
io.dataset Metadata management, filename parsing, image loading
io.database Thread-safe SQLite (WAL mode, per-thread connections)
io.loaders Unified TIFF I/O + lazy intensity normalization
preprocessing.converter Vendor → unified naming
preprocessing.z_projection Z-stack projection
preprocessing.tile_splitter Image tiling
preprocessing.basic_correction BaSiC shading correction wrapper
segmentation.cellpose Cellpose-SAM segmentation
profiling.image_profiler Whole-image features
profiling.object_profiler Per-object features (shape, intensity, texture)
profiling.extras Radial distribution, granularity, GLCM, correlation

API Documentation

See docs/api.md for the full API reference including class and function signatures, parameters, and return types.

Acknowledgements

microProfiler uses the following open-source libraries:

Citation

If you use microProfiler in your research, please cite the repository:

@software{microProfiler,
  author = {Hao He},
  title = {microProfiler: Microscopy Image Preprocessing, Segmentation, and Profiling Pipeline},
  year = {2026},
  url = {https://github.com/soulong/microProfiler}
}

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microprofiler-0.8.1.tar.gz (61.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

microprofiler-0.8.1-py3-none-any.whl (77.2 kB view details)

Uploaded Python 3

File details

Details for the file microprofiler-0.8.1.tar.gz.

File metadata

  • Download URL: microprofiler-0.8.1.tar.gz
  • Upload date:
  • Size: 61.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for microprofiler-0.8.1.tar.gz
Algorithm Hash digest
SHA256 9541a63f8d000347459c6d57d03ccbeb178b6fccad1a29741760a7889d893c18
MD5 5efb939952c69b5796f47b3aa2b6fa19
BLAKE2b-256 c613da07d827e8a95c8ef8654c587207c72b3b00cff54812e3379d8995a14788

See more details on using hashes here.

Provenance

The following attestation bundles were made for microprofiler-0.8.1.tar.gz:

Publisher: publish.yml on soulong/microProfiler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file microprofiler-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: microprofiler-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 77.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for microprofiler-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8f6eb915bb06954f20a62d073a2c05a8fc7a8d131057f210204bfb3118faba16
MD5 97953a5ff3d4512ca9a8f02665cc9a06
BLAKE2b-256 0a54f093cdf65948f612cfd78a11c92cc5194f57a7fa691076b04e291f6ed516

See more details on using hashes here.

Provenance

The following attestation bundles were made for microprofiler-0.8.1-py3-none-any.whl:

Publisher: publish.yml on soulong/microProfiler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page