Skip to main content

cp-measure implements CellProfiler Measurements. You can integrate them to your workflow or use them from CellProfiler 5 once they are integrated there.

Project description

Do you need to use CellProfiler features, but you want to do it in a programmatic way? Look no more, this package was developed by and for the click-a-phobic scientists.

Quick overview

Installation

pip install cp-measure

Poetry

If you want a development environment.

git clone git@github.com:afermg/cp_measure.git
cd cp_measure
poetry install 

Usage

Users usually want to calculate all the features. There are four type of measurements, based on their inputs:

  • Type 1: 1 image + 1 set of masks (e.g., intensity)
  • Type 2: 2 images + 1 set of masks (e.g., colocalization)
  • Type 3: 2 sets of masks (e.g., number of neighbors)
  • Type 4: 1 image + 2 sets of masks (e.g., skeleton)

This shows the simplest way to use the first set (1 image, 1 mask set), which currently follows the style of scikit-image (1 image, 1 matrix with non-overlapping labels).

import numpy as np

from cp_measure.bulk import get_core_measurements

measurements = get_core_measurements()
print(measurements.keys())
# dict_keys(['radial_distribution', 'radial_zernikes', 'intensity', 'sizeshape', 'zernike', 'ferret', 'texture', 'granularity'])

import numpy as np
import pandas as pd
from cp_measure.bulk import get_core_measurements

# Create synthetic data
size = 240
rng = np.random.default_rng(42)
pixels = rng.integers(low=1, high=255, size=(size, size))

# Create two similar-sized objects
masks = np.zeros_like(pixels)
masks[50:100, 50:100] = 1  # First square 50x50
masks[80:120, 90:120] = 1  # Major asymmetries on bottom right edge
masks[150:200, 150:200] = 2  # Second square 50x50
masks[175:180, 180:210] = 2  # Minor asymmetries on bottom right edge

# Get measurements
measurements = get_core_measurements()

results = {}
for name, v in measurements.items():
    results = {**results, **v(masks, pixels)}

"""
{'RadialDistribution_FracAtD_1of4': array([0.03673493, 0.05640786]),
 'RadialDistribution_MeanFrac_1of4': array([1.02857809, 1.15072037]),
 'RadialDistribution_RadialCV_1of4': array([0.05539421, 0.04635982]),
 ...
 'Granularity_16': array([97.65759629, 97.64371833])}
"""

Call specific measurements

If you need a specific measurement/feature you can just import it. Note that measurements come in sets, so you have to fetch the one that you specifically require from the resultant dictionary. Any available measurement can be found using code as follows:

import numpy as np

from cp_measure.minimal.measureobjectsizeshape import get_sizeshape

mask = np.zeros((50, 50))
mask[5:-6, 5:-6] = 1
get_sizeshape(mask, None) # pixels, the second argument, is not necessary for this particular measurement

The other available functions are as follows:

  • measureobjectintensitydistribution.getradialzernikes,
  • measureobjectintensity.getintensity,
  • measureobjectsizeshape.getzernike,
  • measureobjectsizeshape.getferret,
  • measuregranularity.getgranularity,
  • measuretexture.gettexture,

And for Type 2 functions:

  • measurecolocalization.getcorrelationpearson
  • measurecolocalization.getcorrelationmandersfold
  • measurecolocalization.getcorrelationrwc
  • measurecolocalization.getcorrelationcostes
  • measurecolocalization.getcorrelationoverlap

For Type 3 functions:

  • measureobjectoverlap.measureobjectoverlap
  • measureobjectneghbors.measureobjectneighboors

Work in Progress

You can follow progress here.

Done

  • Type 1, 2 and 3 measurements in sklearn style (multiple masks per image)

Pending

  • Add a wrapper for type 3 measurements
  • Type 4 measurements (ObjectSkeleton). We don't know if it is worth implementing.

Additional notes

The Image-wide functions will not be implemented directly, they were originally implemented independently to the Object (mask) functions. We will adjust the existing functions assume that an image-wide measurement is the same as measuring an object with the same size as the intensity image.

Additional notes

  • This is not optimised for efficiency (yet). We aim to reproduce the 'vanilla' results of CellProfiler with minimal code changes. Optimisations will be implemented once we come up with a standard interface for functionally-focused CellProfiler components.
  • The functions exposed perform minimal checks. They will fail if provided with empty masks. Not all functions will fail if provided with masks only.

Similar projects

  • spacr: Library to analyse screens, it provides measurements (independently implemented) and a GUI.
  • ScaleFEX: Python pipeline that includes measurements, designed for the cloud.

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

cp_measure-0.1.9.tar.gz (56.3 kB view details)

Uploaded Source

Built Distribution

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

cp_measure-0.1.9-py3-none-any.whl (63.7 kB view details)

Uploaded Python 3

File details

Details for the file cp_measure-0.1.9.tar.gz.

File metadata

  • Download URL: cp_measure-0.1.9.tar.gz
  • Upload date:
  • Size: 56.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.10

File hashes

Hashes for cp_measure-0.1.9.tar.gz
Algorithm Hash digest
SHA256 b5751a85c061d08cb515f3dc0f1ba00177def840a8fffd193b1f56a1e05307bc
MD5 906bfa54563a041b10ea45385e39eb94
BLAKE2b-256 dd5ed6732f20b661e204b0824486a89d7d3ec381b2d3aa70cf7493d60dfccc20

See more details on using hashes here.

File details

Details for the file cp_measure-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: cp_measure-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 63.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.10

File hashes

Hashes for cp_measure-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 3d322bc0f8b249e74453eba206eab0ba60c4ed7b68790a1fcaac1ad1326752d9
MD5 18ddb3db71e4b21b4af9dda051dcaace
BLAKE2b-256 63e6a48417336108ce202a1e065d1349f965d30fce2e93b7827f25aad2c15c43

See more details on using hashes here.

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