Skip to content

Isolating CellProfiler Measurements from the frontend codebase

Notifications You must be signed in to change notification settings

afermg/cp_measure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cell Profiler measurements

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'])

size = 200
rng = np.random.default_rng(42)
pixels = rng.integers(low=0, high=10, size=(size, size))

masks = np.zeros_like(pixels)
masks[5:-6, 5:-6] = 1

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

"""
{'RadialDistribution_FracAtD_1of4': array([0.0477544]),
 'RadialDistribution_MeanFrac_1of4': array([0.98888986]),
 'RadialDistribution_RadialCV_1of4': array([0.04705031]),
 ...
 'Granularity_16': array([100.])}
"""

Multimask (Type 3) methods:

  

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 measurement

The other available functions are as follows:

  • measureobjectintensitydistribution.get_radial_zernikes,
  • measureobjectintensity.get_intensity,
  • measureobjectsizeshape.get_zernike,
  • measureobjectsizeshape.get_ferret,
  • measuregranularity.get_granularity,
  • measuretexture.get_texture,

And for Type 2 functions:

  • measurecolocalization.get_correlation_pearson
  • measurecolocalization.get_correlation_manders_fold
  • measurecolocalization.get_correlation_rwc
  • measurecolocalization.get_correlation_costes
  • measurecolocalization.get_correlation_overlap

For Type 3 functions:

  • measureobjectoverlap.measureobjectoverlap
  • measureobjectneghbors.measureobjectneighboors

Pending measurements

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

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.

About

Isolating CellProfiler Measurements from the frontend codebase

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published