cellprofiler-library-nightly 5.0.0.dev691__tar.gz → 5.0.0.dev706__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cellprofiler_library_nightly-5.0.0.dev691/cellprofiler_library_nightly.egg-info → cellprofiler_library_nightly-5.0.0.dev706}/PKG-INFO +1 -1
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/_version.py +3 -3
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/image_processing.py +220 -0
- cellprofiler_library_nightly-5.0.0.dev706/cellprofiler_library/modules/_correctilluminationcalculate.py +573 -0
- cellprofiler_library_nightly-5.0.0.dev706/cellprofiler_library/opts/correctilluminationcalculate.py +43 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706/cellprofiler_library_nightly.egg-info}/PKG-INFO +1 -1
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library_nightly.egg-info/SOURCES.txt +2 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library_nightly.egg-info/scm_file_list.json +2 -0
- cellprofiler_library_nightly-5.0.0.dev706/cellprofiler_library_nightly.egg-info/scm_version.json +8 -0
- cellprofiler_library_nightly-5.0.0.dev691/cellprofiler_library_nightly.egg-info/scm_version.json +0 -8
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/LICENSE +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/README.md +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/file_processing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/measurement.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/object_processing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/functions/segmentation.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/measurement_model.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_align.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_closing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_colortogray.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_combineobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_convertimagetoobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_convertobjectstoimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_correctilluminationapply.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_crop.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_dilateimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_dilateobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_enhanceedges.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_erodeimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_erodeobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_expandorshrinkobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_fillobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_filterobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_findmaxima.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_flipandrotate.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_gaussianfilter.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_graytocolor.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_identifydeadworms.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_identifyprimaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_identifysecondaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_identifytertiaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_imagemath.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_makeprojection.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measurecolocalization.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measuregranularity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureimageareaoccupied.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureimageintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureimageoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureimagequality.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureimageskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectintensitydistribution.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectneighbors.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectsizeshape.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measureobjectskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_measuretexture.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_medialaxis.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_medianfilter.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_morph.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_morphologicalskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_opening.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_overlayobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_overlayoutlines.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_reducenoise.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_removeholes.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_rescaleintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_resize.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_savecroppedobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_shrinktoobjectcenters.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_smooth.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_threshold.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/modules/_watershed.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/align.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/colortogray.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/convertimagetoobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/convertobjectstoimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/correctilluminationapply.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/crop.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/dilateimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/dilateobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/enhanceedges.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/erodeimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/erodeobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/filterobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/findmaxima.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/flipandrotate.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/graytocolor.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/identifydeadworms.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/identifyprimaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/identifysecondaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/identifytertiaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/imagemath.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/makeprojection.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measurecolocalization.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measuregranularity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureimageareaoccupied.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureimageintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureimageoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureimagequality.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureimageskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureobjectintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureobjectintensitydistribution.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureobjectneighbors.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureobjectoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measureobjectskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/measuretexture.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/morph.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/objectsizeshapefeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/overlayoutlines.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/removeholes.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/rescaleintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/resize.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/shrinktoobjectcenters.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/smooth.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/structuring_elements.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/opts/threshold.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/py.typed +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library/types.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/cellprofiler_library_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/environment.yml +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/pyproject.toml +0 -0
- {cellprofiler_library_nightly-5.0.0.dev691 → cellprofiler_library_nightly-5.0.0.dev706}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cellprofiler-library-nightly
|
|
3
|
-
Version: 5.0.0.
|
|
3
|
+
Version: 5.0.0.dev706
|
|
4
4
|
Summary: cellprofiler-library implements CellProfiler's image processing and mathematical code, and is usable as a standalone library
|
|
5
5
|
Author: Anne Carpenter, Thouis (Ray) Jones, Lee Kamentsky, Vebjorn Ljosa, David Logan, Mark Bray, Madison Swain-Bowden, Allen Goodman, Claire McQuinn, Alice Lucas, Callum Tromans-Coia
|
|
6
6
|
Author-email: Beth Cimini <bcimini@broadinstitute.org>, David Stirling <dstirling@glencoesoftware.com>, Nodar Gogoberidze <ngogober@broadinstitute.org>
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '5.0.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (5, 0, 0, '
|
|
21
|
+
__version__ = version = '5.0.0.dev706'
|
|
22
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev706')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gc01fa20f6'
|
|
@@ -12,6 +12,9 @@ import skimage.exposure
|
|
|
12
12
|
import centrosome
|
|
13
13
|
import centrosome.threshold
|
|
14
14
|
import centrosome.filter
|
|
15
|
+
import centrosome.cpmorphology
|
|
16
|
+
import centrosome.bg_compensate
|
|
17
|
+
import centrosome.smooth
|
|
15
18
|
import scipy
|
|
16
19
|
import scipy.interpolate
|
|
17
20
|
import scipy.sparse
|
|
@@ -45,6 +48,11 @@ from cellprofiler_library.opts.imagemath import Operator
|
|
|
45
48
|
from cellprofiler_library.opts.flipandrotate import RotationCoordinateAlignmnet
|
|
46
49
|
from cellprofiler_library.opts.enhanceedges import EdgeDirection
|
|
47
50
|
from cellprofiler_library.opts.rescaleintensity import MaximumIntensityMethod, MinimumIntensityMethod
|
|
51
|
+
from cellprofiler_library.opts.correctilluminationcalculate import (
|
|
52
|
+
SmoothingFilterSize,
|
|
53
|
+
SmoothingMethod,
|
|
54
|
+
SplineBackgroundMode,
|
|
55
|
+
)
|
|
48
56
|
invert = cast(Callable[[ImageAny], ImageAny], _invert)
|
|
49
57
|
isscalar = cast(Callable[[Optional[ImageAny]], bool], _isscalar)
|
|
50
58
|
|
|
@@ -3105,3 +3113,215 @@ def apply_target_mask(x_data: ImageAny, masking_image: Union[ImageAny,ObjectSegm
|
|
|
3105
3113
|
mask = masking_image.astype(bool)
|
|
3106
3114
|
x_data[~mask] = 0
|
|
3107
3115
|
return x_data
|
|
3116
|
+
|
|
3117
|
+
###############################################################################
|
|
3118
|
+
# CorrectIlluminationCalculate
|
|
3119
|
+
###############################################################################
|
|
3120
|
+
|
|
3121
|
+
|
|
3122
|
+
def get_smoothing_filter_size(
|
|
3123
|
+
automatic_object_width: SmoothingFilterSize,
|
|
3124
|
+
smoothing_filter_size: Optional[int], # default to 10
|
|
3125
|
+
object_width: Optional[int], # default to 10
|
|
3126
|
+
image_shape: Optional[Tuple[int, ...]]
|
|
3127
|
+
) -> float:
|
|
3128
|
+
"""Return the smoothing filter size based on the settings and image size"""
|
|
3129
|
+
filter_size = None
|
|
3130
|
+
if automatic_object_width == SmoothingFilterSize.MANUALLY.value:
|
|
3131
|
+
assert smoothing_filter_size is not None, "Manual smoothing filter size must be provided"
|
|
3132
|
+
# Convert from full-width at half-maximum to standard deviation
|
|
3133
|
+
# (or so says CPsmooth.m)
|
|
3134
|
+
filter_size = smoothing_filter_size
|
|
3135
|
+
elif automatic_object_width == SmoothingFilterSize.OBJECT_SIZE.value:
|
|
3136
|
+
assert object_width is not None, "Object width must be provided"
|
|
3137
|
+
filter_size = object_width * 2.35 / 3.5
|
|
3138
|
+
elif automatic_object_width == SmoothingFilterSize.AUTOMATIC.value:
|
|
3139
|
+
assert image_shape is not None, "Image shape must be provided"
|
|
3140
|
+
filter_size = min(30, float(numpy.max(image_shape)) / 40.0)
|
|
3141
|
+
else:
|
|
3142
|
+
raise ValueError(f"Unknown smoothing filter size: {automatic_object_width}")
|
|
3143
|
+
return filter_size
|
|
3144
|
+
|
|
3145
|
+
|
|
3146
|
+
def smooth_plane(
|
|
3147
|
+
pixel_data: Image2D,
|
|
3148
|
+
mask: Image2DMask,
|
|
3149
|
+
smoothing_method: SmoothingMethod,
|
|
3150
|
+
automatic_object_width: Optional[SmoothingFilterSize],
|
|
3151
|
+
size_of_smoothing_filter: Optional[int],
|
|
3152
|
+
object_width: Optional[int],
|
|
3153
|
+
image_shape: Optional[Tuple[int, ...]],
|
|
3154
|
+
automatic_splines: Optional[bool],
|
|
3155
|
+
spline_bg_mode: Optional[SplineBackgroundMode],
|
|
3156
|
+
spline_points: Optional[int],
|
|
3157
|
+
spline_threshold: Optional[float],
|
|
3158
|
+
spline_convergence: Optional[float],
|
|
3159
|
+
spline_maximum_iterations: Optional[int],
|
|
3160
|
+
spline_rescale: Optional[float],
|
|
3161
|
+
) -> Image2D:
|
|
3162
|
+
"""Smooth one 2-d color plane of an image"""
|
|
3163
|
+
if smoothing_method == SmoothingMethod.FIT_POLYNOMIAL.value:
|
|
3164
|
+
output_pixels = smooth_with_polynomial(pixel_data, mask)
|
|
3165
|
+
elif smoothing_method == SmoothingMethod.GAUSSIAN_FILTER.value:
|
|
3166
|
+
sigma = _get_sigma(automatic_object_width, size_of_smoothing_filter, object_width, image_shape)
|
|
3167
|
+
output_pixels = smooth_with_gaussian(pixel_data, mask, sigma)
|
|
3168
|
+
elif smoothing_method == SmoothingMethod.MEDIAN_FILTER.value:
|
|
3169
|
+
sigma = _get_sigma(automatic_object_width, size_of_smoothing_filter, object_width, image_shape)
|
|
3170
|
+
output_pixels = smooth_with_median(pixel_data, mask, sigma)
|
|
3171
|
+
elif smoothing_method == SmoothingMethod.TO_AVERAGE.value:
|
|
3172
|
+
output_pixels = smooth_to_average(pixel_data, mask)
|
|
3173
|
+
elif smoothing_method == SmoothingMethod.SPLINES.value:
|
|
3174
|
+
assert automatic_splines is not None, "automatic_splines must be provided for spline smoothing"
|
|
3175
|
+
output_pixels = smooth_with_splines(
|
|
3176
|
+
pixel_data = pixel_data,
|
|
3177
|
+
mask = mask,
|
|
3178
|
+
automatic_splines = automatic_splines,
|
|
3179
|
+
spline_bg_mode = spline_bg_mode,
|
|
3180
|
+
spline_points = spline_points,
|
|
3181
|
+
spline_threshold = spline_threshold,
|
|
3182
|
+
spline_convergence = spline_convergence,
|
|
3183
|
+
spline_maximum_iterations = spline_maximum_iterations,
|
|
3184
|
+
spline_rescale = spline_rescale,
|
|
3185
|
+
)
|
|
3186
|
+
elif smoothing_method == SmoothingMethod.CONVEX_HULL.value:
|
|
3187
|
+
output_pixels = smooth_with_convex_hull(pixel_data, mask)
|
|
3188
|
+
else:
|
|
3189
|
+
raise ValueError(
|
|
3190
|
+
"Unimplemented smoothing method: %s:" % smoothing_method.value
|
|
3191
|
+
)
|
|
3192
|
+
return output_pixels
|
|
3193
|
+
|
|
3194
|
+
def _get_sigma(
|
|
3195
|
+
automatic_object_width: Optional[SmoothingFilterSize],
|
|
3196
|
+
size_of_smoothing_filter: Optional[int],
|
|
3197
|
+
object_width: Optional[int],
|
|
3198
|
+
image_shape: Optional[Tuple[int, ...]],
|
|
3199
|
+
) -> float:
|
|
3200
|
+
assert automatic_object_width is not None, "automatic_object_width must be provided for Gaussian or Median smoothing"
|
|
3201
|
+
assert size_of_smoothing_filter is not None, "size_of_smoothing_filter must be provided for Gaussian or Median smoothing"
|
|
3202
|
+
assert object_width is not None, "object_width must be provided for Gaussian or Median smoothing"
|
|
3203
|
+
assert image_shape is not None, "image_shape must be provided for Gaussian or Median smoothing"
|
|
3204
|
+
sigma = get_smoothing_filter_size(automatic_object_width, size_of_smoothing_filter, object_width, image_shape) / 2.35 # What's up with 2.35?
|
|
3205
|
+
return sigma
|
|
3206
|
+
|
|
3207
|
+
|
|
3208
|
+
def smooth_with_polynomial(
|
|
3209
|
+
pixel_data: Image2D,
|
|
3210
|
+
mask: Image2DMask
|
|
3211
|
+
) -> Image2D:
|
|
3212
|
+
return centrosome.smooth.fit_polynomial(pixel_data, mask)
|
|
3213
|
+
|
|
3214
|
+
def smooth_with_gaussian(
|
|
3215
|
+
pixel_data: Image2D,
|
|
3216
|
+
mask: Image2DMask,
|
|
3217
|
+
sigma: float
|
|
3218
|
+
) -> Image2D:
|
|
3219
|
+
#
|
|
3220
|
+
# Smoothing with the mask is good, even if there's no mask
|
|
3221
|
+
# because the mechanism undoes the edge effects that are introduced
|
|
3222
|
+
# by any choice of how to deal with border effects.
|
|
3223
|
+
#
|
|
3224
|
+
def fn(image):
|
|
3225
|
+
return scipy.ndimage.gaussian_filter(
|
|
3226
|
+
image, sigma, mode="constant", cval=0
|
|
3227
|
+
)
|
|
3228
|
+
|
|
3229
|
+
output_pixels = centrosome.smooth.smooth_with_function_and_mask(
|
|
3230
|
+
pixel_data, fn, mask
|
|
3231
|
+
)
|
|
3232
|
+
return output_pixels
|
|
3233
|
+
|
|
3234
|
+
def smooth_with_median(
|
|
3235
|
+
pixel_data: Image2D,
|
|
3236
|
+
mask: Image2DMask,
|
|
3237
|
+
sigma: float
|
|
3238
|
+
) -> Image2D:
|
|
3239
|
+
filter_sigma = max(1, int(sigma + 0.5))
|
|
3240
|
+
strel = centrosome.cpmorphology.strel_disk(filter_sigma)
|
|
3241
|
+
rescaled_pixel_data = pixel_data * 65535
|
|
3242
|
+
rescaled_pixel_data = rescaled_pixel_data.astype(numpy.uint16)
|
|
3243
|
+
rescaled_pixel_data *= mask
|
|
3244
|
+
output_pixels = skimage.filters.median(rescaled_pixel_data, strel, behavior="rank")
|
|
3245
|
+
# skimage's rank median preserves the uint16 dtype of its input; rescale
|
|
3246
|
+
# back to the [0, 1]-ish float range the rest of the pipeline expects,
|
|
3247
|
+
# matching the input's precision rather than widening it.
|
|
3248
|
+
return (output_pixels / 65535.0).astype(pixel_data.dtype)
|
|
3249
|
+
|
|
3250
|
+
def smooth_to_average(
|
|
3251
|
+
pixel_data: Image2D,
|
|
3252
|
+
mask: Image2DMask
|
|
3253
|
+
) -> Image2D:
|
|
3254
|
+
mean = numpy.mean(pixel_data[mask])
|
|
3255
|
+
output_pixels = numpy.ones(pixel_data.shape, pixel_data.dtype) * mean
|
|
3256
|
+
return output_pixels
|
|
3257
|
+
|
|
3258
|
+
def smooth_with_convex_hull(
|
|
3259
|
+
pixel_data: Image2D,
|
|
3260
|
+
mask: Image2DMask
|
|
3261
|
+
) -> Image2D:
|
|
3262
|
+
"""Use the convex hull transform to smooth the image"""
|
|
3263
|
+
#
|
|
3264
|
+
# Apply an erosion, then the transform, then a dilation, heuristically
|
|
3265
|
+
# to ignore little spikey noisy things.
|
|
3266
|
+
#
|
|
3267
|
+
image = centrosome.cpmorphology.grey_erosion(pixel_data, 2, mask)
|
|
3268
|
+
image = centrosome.filter.convex_hull_transform(image, mask=mask)
|
|
3269
|
+
image = centrosome.cpmorphology.grey_dilation(image, 2, mask)
|
|
3270
|
+
return image
|
|
3271
|
+
|
|
3272
|
+
|
|
3273
|
+
def smooth_with_splines(
|
|
3274
|
+
pixel_data: Image2D,
|
|
3275
|
+
mask: Image2DMask,
|
|
3276
|
+
automatic_splines: bool,
|
|
3277
|
+
spline_bg_mode: Optional[SplineBackgroundMode],
|
|
3278
|
+
spline_points: Optional[int],
|
|
3279
|
+
spline_threshold: Optional[float],
|
|
3280
|
+
spline_convergence: Optional[float],
|
|
3281
|
+
spline_maximum_iterations: Optional[int],
|
|
3282
|
+
spline_rescale: Optional[float],
|
|
3283
|
+
) -> Image2D:
|
|
3284
|
+
assert automatic_splines is not None, "automatic_splines must be provided for spline smoothing"
|
|
3285
|
+
if automatic_splines:
|
|
3286
|
+
# Make the image 200 pixels long on its shortest side
|
|
3287
|
+
shortest_side = min(pixel_data.shape)
|
|
3288
|
+
if shortest_side < 200:
|
|
3289
|
+
scale = 1
|
|
3290
|
+
else:
|
|
3291
|
+
scale = float(shortest_side) / 200
|
|
3292
|
+
result = centrosome.bg_compensate.backgr(pixel_data, mask, scale=scale) # type: ignore # scale can be a float
|
|
3293
|
+
else:
|
|
3294
|
+
assert spline_bg_mode is not None, "spline_bg_mode must be provided for spline smoothing"
|
|
3295
|
+
assert spline_points is not None, "spline_points must be provided for spline smoothing"
|
|
3296
|
+
assert spline_threshold is not None, "spline_threshold must be provided for spline smoothing"
|
|
3297
|
+
assert spline_convergence is not None, "spline_convergence must be provided for spline smoothing"
|
|
3298
|
+
assert spline_maximum_iterations is not None, "spline_maximum_iterations must be provided for spline smoothing"
|
|
3299
|
+
assert spline_rescale is not None, "spline_rescale must be provided for spline smoothing"
|
|
3300
|
+
mode = spline_bg_mode
|
|
3301
|
+
spline_points = spline_points
|
|
3302
|
+
threshold = spline_threshold
|
|
3303
|
+
convergence = spline_convergence
|
|
3304
|
+
iterations = spline_maximum_iterations
|
|
3305
|
+
rescale = spline_rescale
|
|
3306
|
+
result = centrosome.bg_compensate.backgr(
|
|
3307
|
+
pixel_data,
|
|
3308
|
+
mask,
|
|
3309
|
+
mode=mode,
|
|
3310
|
+
thresh=threshold, # type: ignore # threshold can be a float
|
|
3311
|
+
splinepoints=spline_points,
|
|
3312
|
+
scale=rescale, # type: ignore # scale can be a float
|
|
3313
|
+
maxiter=iterations,
|
|
3314
|
+
convergence=convergence,
|
|
3315
|
+
)
|
|
3316
|
+
#
|
|
3317
|
+
# The result is a fit to the background intensity, but we
|
|
3318
|
+
# want to normalize the intensity by subtraction, leaving
|
|
3319
|
+
# the mean intensity alone.
|
|
3320
|
+
#
|
|
3321
|
+
if mask is not None:
|
|
3322
|
+
mean_intensity = numpy.mean(result[mask])
|
|
3323
|
+
result[mask] -= mean_intensity
|
|
3324
|
+
else:
|
|
3325
|
+
mean_intensity = numpy.mean(result)
|
|
3326
|
+
result -= mean_intensity
|
|
3327
|
+
return result
|