cellprofiler-library-nightly 5.0.0.dev661__tar.gz → 5.0.0.dev669__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.dev661/cellprofiler_library_nightly.egg-info → cellprofiler_library_nightly-5.0.0.dev669}/PKG-INFO +1 -1
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/_version.py +3 -3
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/image_processing.py +205 -2
- cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library/modules/_rescaleintensity.py +60 -0
- cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library/opts/rescaleintensity.py +39 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/types.py +14 -5
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library_nightly.egg-info}/PKG-INFO +1 -1
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/SOURCES.txt +2 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/scm_file_list.json +2 -0
- cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library_nightly.egg-info/scm_version.json +8 -0
- cellprofiler_library_nightly-5.0.0.dev661/cellprofiler_library_nightly.egg-info/scm_version.json +0 -8
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/LICENSE +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/README.md +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/file_processing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/measurement.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/object_processing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/segmentation.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/measurement_model.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_align.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_closing.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_colortogray.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_combineobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_convertimagetoobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_convertobjectstoimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_correctilluminationapply.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_crop.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_dilateimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_dilateobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_enhanceedges.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_erodeimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_erodeobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_expandorshrinkobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_fillobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_filterobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_flipandrotate.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_gaussianfilter.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_graytocolor.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifydeadworms.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifyprimaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifysecondaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifytertiaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_imagemath.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measurecolocalization.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measuregranularity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageareaoccupied.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimagequality.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectintensitydistribution.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectneighbors.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectsizeshape.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measuretexture.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_medialaxis.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_medianfilter.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_morph.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_morphologicalskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_opening.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_overlayobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_overlayoutlines.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_reducenoise.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_removeholes.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_resize.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_savecroppedobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_shrinktoobjectcenters.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_smooth.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_threshold.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_watershed.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/__init__.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/align.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/colortogray.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/convertimagetoobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/convertobjectstoimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/correctilluminationapply.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/crop.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/dilateimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/dilateobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/enhanceedges.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/erodeimage.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/erodeobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/filterobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/flipandrotate.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/graytocolor.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifydeadworms.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifyprimaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifysecondaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifytertiaryobjects.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/imagemath.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measurecolocalization.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measuregranularity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageareaoccupied.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimagequality.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectintensity.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectintensitydistribution.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectneighbors.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectoverlap.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectskeleton.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measuretexture.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/morph.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/objectsizeshapefeatures.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/overlayoutlines.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/removeholes.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/resize.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/shrinktoobjectcenters.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/smooth.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/structuring_elements.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/threshold.py +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/py.typed +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/environment.yml +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/pyproject.toml +0 -0
- {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/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.dev669
|
|
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.dev669'
|
|
22
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev669')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g51250caf3'
|
|
@@ -8,6 +8,7 @@ from skimage.util import invert as _invert
|
|
|
8
8
|
import skimage.transform
|
|
9
9
|
import skimage
|
|
10
10
|
import skimage.restoration
|
|
11
|
+
import skimage.exposure
|
|
11
12
|
import centrosome
|
|
12
13
|
import centrosome.threshold
|
|
13
14
|
import centrosome.filter
|
|
@@ -31,7 +32,7 @@ from cellprofiler_library.types import (
|
|
|
31
32
|
ImageAny, ImageAnyMask,
|
|
32
33
|
ObjectSegmentation,
|
|
33
34
|
Image2D, Image2DMask,
|
|
34
|
-
StructuringElement, ObjectLabelSet, ImageColor, ImageBinaryMask, Image2DBinary, ObjectLabel, ImageBinary, Pixel
|
|
35
|
+
StructuringElement, ObjectLabelSet, ImageColor, ImageBinaryMask, Image2DBinary, ObjectLabel, ImageBinary, Pixel, PixelAny
|
|
35
36
|
)
|
|
36
37
|
from cellprofiler_library.opts import threshold as Threshold
|
|
37
38
|
from cellprofiler_library.opts.enhanceorsuppressfeatures import SpeckleAccuracy, NeuriteMethod
|
|
@@ -42,7 +43,7 @@ from cellprofiler_library.opts.resize import ResizingMethod, DimensionMethod, In
|
|
|
42
43
|
from cellprofiler_library.opts.imagemath import Operator
|
|
43
44
|
from cellprofiler_library.opts.flipandrotate import RotationCoordinateAlignmnet
|
|
44
45
|
from cellprofiler_library.opts.enhanceedges import EdgeDirection
|
|
45
|
-
|
|
46
|
+
from cellprofiler_library.opts.rescaleintensity import MaximumIntensityMethod, MinimumIntensityMethod
|
|
46
47
|
invert = cast(Callable[[ImageAny], ImageAny], _invert)
|
|
47
48
|
isscalar = cast(Callable[[Optional[ImageAny]], bool], _isscalar)
|
|
48
49
|
|
|
@@ -2870,3 +2871,205 @@ def reshape_image(
|
|
|
2870
2871
|
result[: source.shape[0], : source.shape[1]] = source
|
|
2871
2872
|
return result
|
|
2872
2873
|
|
|
2874
|
+
|
|
2875
|
+
###############################################################################
|
|
2876
|
+
# RescaleIntensity
|
|
2877
|
+
###############################################################################
|
|
2878
|
+
|
|
2879
|
+
def rescale(
|
|
2880
|
+
image_pixel_data: ImageAny,
|
|
2881
|
+
in_range: Tuple[float, float],
|
|
2882
|
+
out_range: Tuple[float, float] = (0.0, 1.0)
|
|
2883
|
+
) -> ImageAny:
|
|
2884
|
+
data = 1.0 * image_pixel_data
|
|
2885
|
+
|
|
2886
|
+
rescaled = skimage.exposure.rescale_intensity(
|
|
2887
|
+
data, in_range=in_range, out_range=out_range
|
|
2888
|
+
)
|
|
2889
|
+
|
|
2890
|
+
return rescaled
|
|
2891
|
+
|
|
2892
|
+
|
|
2893
|
+
def stretch_rescale(
|
|
2894
|
+
data: ImageAny,
|
|
2895
|
+
mask: ImageAnyMask,
|
|
2896
|
+
multichannel: bool = False
|
|
2897
|
+
) -> ImageAny:
|
|
2898
|
+
if multichannel:
|
|
2899
|
+
splitaxis = data.ndim - 1
|
|
2900
|
+
singlechannels = numpy.split(data, data.shape[-1], splitaxis)
|
|
2901
|
+
newchannels = []
|
|
2902
|
+
for channel in singlechannels:
|
|
2903
|
+
channel = numpy.squeeze(channel, axis=splitaxis)
|
|
2904
|
+
if (masked_channel := channel[mask]).size == 0:
|
|
2905
|
+
in_range = (0, 1)
|
|
2906
|
+
else:
|
|
2907
|
+
in_range = (min(masked_channel), max(masked_channel))
|
|
2908
|
+
|
|
2909
|
+
rescaled = rescale(channel, in_range)
|
|
2910
|
+
|
|
2911
|
+
newchannels.append(rescaled)
|
|
2912
|
+
full_rescaled = numpy.stack(newchannels, axis=-1)
|
|
2913
|
+
return full_rescaled
|
|
2914
|
+
if (masked_data := data[mask]).size == 0:
|
|
2915
|
+
in_range = (0, 1)
|
|
2916
|
+
else:
|
|
2917
|
+
in_range = (min(masked_data), max(masked_data))
|
|
2918
|
+
return rescale(data, in_range)
|
|
2919
|
+
|
|
2920
|
+
|
|
2921
|
+
def manual_input_range(
|
|
2922
|
+
data: ImageAny,
|
|
2923
|
+
mask: Optional[ImageAnyMask],
|
|
2924
|
+
source_high: float,
|
|
2925
|
+
source_low: float,
|
|
2926
|
+
source_scale_min: float,
|
|
2927
|
+
source_scale_max: float,
|
|
2928
|
+
auto_high: MaximumIntensityMethod,
|
|
2929
|
+
auto_low: MinimumIntensityMethod,
|
|
2930
|
+
global_min: Optional[PixelAny],
|
|
2931
|
+
global_max: Optional[PixelAny],
|
|
2932
|
+
) -> ImageAny:
|
|
2933
|
+
return manual_io_range(
|
|
2934
|
+
data,
|
|
2935
|
+
mask,
|
|
2936
|
+
source_high,
|
|
2937
|
+
source_low,
|
|
2938
|
+
source_scale_min,
|
|
2939
|
+
source_scale_max,
|
|
2940
|
+
auto_high,
|
|
2941
|
+
auto_low,
|
|
2942
|
+
global_min,
|
|
2943
|
+
global_max
|
|
2944
|
+
)
|
|
2945
|
+
|
|
2946
|
+
|
|
2947
|
+
def manual_io_range(
|
|
2948
|
+
data: ImageAny,
|
|
2949
|
+
mask: Optional[ImageAnyMask],
|
|
2950
|
+
source_high: float,
|
|
2951
|
+
source_low: float,
|
|
2952
|
+
source_scale_min: float,
|
|
2953
|
+
source_scale_max: float,
|
|
2954
|
+
auto_high: MaximumIntensityMethod,
|
|
2955
|
+
auto_low: MinimumIntensityMethod,
|
|
2956
|
+
global_min: Optional[PixelAny],
|
|
2957
|
+
global_max: Optional[PixelAny],
|
|
2958
|
+
dest_scale_min: Optional[float]=None,
|
|
2959
|
+
dest_scale_max: Optional[float]=None
|
|
2960
|
+
) -> ImageAny:
|
|
2961
|
+
in_range = get_source_range(data, mask, source_high, source_low, source_scale_min, source_scale_max, auto_high, auto_low, global_min, global_max)
|
|
2962
|
+
if dest_scale_min is None and dest_scale_max is None:
|
|
2963
|
+
return rescale(data, in_range)
|
|
2964
|
+
else:
|
|
2965
|
+
out_range = (dest_scale_min, dest_scale_max)
|
|
2966
|
+
return rescale(data, in_range, out_range)
|
|
2967
|
+
|
|
2968
|
+
|
|
2969
|
+
def divide(data: ImageAny, value: float) -> ImageAny:
|
|
2970
|
+
if value == 0.0:
|
|
2971
|
+
raise ZeroDivisionError("Cannot divide pixel intensity by 0.")
|
|
2972
|
+
|
|
2973
|
+
return data / value
|
|
2974
|
+
|
|
2975
|
+
|
|
2976
|
+
def divide_by_image_minimum(data: ImageAny, mask: ImageAnyMask) -> ImageAny:
|
|
2977
|
+
if (masked_data := data[mask]).size == 0:
|
|
2978
|
+
src_min = numpy.float64(0)
|
|
2979
|
+
else:
|
|
2980
|
+
src_min = numpy.min(masked_data)
|
|
2981
|
+
|
|
2982
|
+
return divide(data, float(src_min))
|
|
2983
|
+
|
|
2984
|
+
|
|
2985
|
+
def divide_by_image_maximum(data: ImageAny, mask: ImageAnyMask) -> ImageAny:
|
|
2986
|
+
if (masked_data := data[mask]).size == 0:
|
|
2987
|
+
src_max = numpy.float64(1)
|
|
2988
|
+
else:
|
|
2989
|
+
src_max = numpy.max(masked_data)
|
|
2990
|
+
|
|
2991
|
+
return divide(data, float(src_max))
|
|
2992
|
+
|
|
2993
|
+
|
|
2994
|
+
def divide_by_value(data: ImageAny, divisor_value: float):
|
|
2995
|
+
return divide(data, divisor_value)
|
|
2996
|
+
|
|
2997
|
+
|
|
2998
|
+
def scale_by_image_maximum(
|
|
2999
|
+
data: ImageAny,
|
|
3000
|
+
mask: ImageAnyMask,
|
|
3001
|
+
reference_data: ImageAny,
|
|
3002
|
+
reference_mask: ImageGrayscaleMask
|
|
3003
|
+
) -> ImageAny:
|
|
3004
|
+
###
|
|
3005
|
+
# Scale the image by the maximum of another image
|
|
3006
|
+
#
|
|
3007
|
+
# Find the maximum value within the unmasked region of the input
|
|
3008
|
+
# and reference image. Multiply by the reference maximum, divide
|
|
3009
|
+
# by the input maximum to scale the input image to the same
|
|
3010
|
+
# range as the reference image
|
|
3011
|
+
###
|
|
3012
|
+
if (masked_input := data[mask]).size == 0:
|
|
3013
|
+
return data
|
|
3014
|
+
else:
|
|
3015
|
+
image_max = numpy.max(masked_input)
|
|
3016
|
+
|
|
3017
|
+
if image_max == 0:
|
|
3018
|
+
return data
|
|
3019
|
+
|
|
3020
|
+
|
|
3021
|
+
if (masked_ref := reference_data[reference_mask]).size == 0:
|
|
3022
|
+
reference_max = 1
|
|
3023
|
+
else:
|
|
3024
|
+
reference_max = numpy.max(masked_ref)
|
|
3025
|
+
|
|
3026
|
+
return divide(data * reference_max, float(image_max))
|
|
3027
|
+
|
|
3028
|
+
|
|
3029
|
+
def get_source_range(
|
|
3030
|
+
data: ImageAny,
|
|
3031
|
+
mask: Optional[ImageAnyMask],
|
|
3032
|
+
source_high: float,
|
|
3033
|
+
source_low: float,
|
|
3034
|
+
source_scale_min: float,
|
|
3035
|
+
source_scale_max: float,
|
|
3036
|
+
auto_high: MaximumIntensityMethod,
|
|
3037
|
+
auto_low: MinimumIntensityMethod,
|
|
3038
|
+
global_min: Optional[PixelAny],
|
|
3039
|
+
global_max: Optional[PixelAny],
|
|
3040
|
+
) -> Tuple[float, float]:
|
|
3041
|
+
"""Get the source range, accounting for automatically computed values"""
|
|
3042
|
+
input_pixels = None
|
|
3043
|
+
if (
|
|
3044
|
+
auto_high == MaximumIntensityMethod.CUSTOM_VALUE.value
|
|
3045
|
+
and auto_low == MinimumIntensityMethod.CUSTOM_VALUE.value
|
|
3046
|
+
):
|
|
3047
|
+
return source_scale_min, source_scale_max
|
|
3048
|
+
|
|
3049
|
+
if (
|
|
3050
|
+
auto_low == MinimumIntensityMethod.EACH_IMAGE.value
|
|
3051
|
+
or auto_high == MaximumIntensityMethod.EACH_IMAGE.value
|
|
3052
|
+
):
|
|
3053
|
+
input_pixels = data
|
|
3054
|
+
if mask is not None:
|
|
3055
|
+
input_pixels = input_pixels[mask]
|
|
3056
|
+
if input_pixels.size == 0:
|
|
3057
|
+
return 0, 1
|
|
3058
|
+
|
|
3059
|
+
if auto_low == MinimumIntensityMethod.ALL_IMAGES.value:
|
|
3060
|
+
src_min = float(global_min or 0)
|
|
3061
|
+
elif auto_low == MinimumIntensityMethod.EACH_IMAGE.value:
|
|
3062
|
+
assert input_pixels is not None, "Invalid settings for automatic minimum, please check your settings and data"
|
|
3063
|
+
src_min = float(numpy.min(input_pixels))
|
|
3064
|
+
else:
|
|
3065
|
+
src_min = source_low
|
|
3066
|
+
|
|
3067
|
+
if auto_high == MaximumIntensityMethod.ALL_IMAGES.value:
|
|
3068
|
+
src_max = float(global_max or 0)
|
|
3069
|
+
elif auto_high == MaximumIntensityMethod.EACH_IMAGE.value:
|
|
3070
|
+
assert input_pixels is not None, "Invalid settings for automatic maximum, please check your settings and data"
|
|
3071
|
+
src_max = float(numpy.max(input_pixels))
|
|
3072
|
+
else:
|
|
3073
|
+
src_max = source_high
|
|
3074
|
+
|
|
3075
|
+
return src_min, src_max
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from typing import Optional, Annotated
|
|
2
|
+
from pydantic import validate_call, ConfigDict, Field
|
|
3
|
+
from cellprofiler_library.opts.rescaleintensity import RescaleMethod, MinimumIntensityMethod, MaximumIntensityMethod
|
|
4
|
+
from cellprofiler_library.types import ImageAny, ImageAnyMask, ImageGrayscaleMask, PixelAny
|
|
5
|
+
from cellprofiler_library.functions.image_processing import stretch_rescale, manual_input_range, manual_io_range, divide_by_image_maximum, divide_by_image_minimum, divide_by_value, scale_by_image_maximum
|
|
6
|
+
|
|
7
|
+
@validate_call(config=ConfigDict(arbitrary_types_allowed=True))
|
|
8
|
+
def rescale_intensity(
|
|
9
|
+
rescale_method: Annotated[RescaleMethod, Field(description="Method to rescale the image")],
|
|
10
|
+
in_pixel_data: Annotated[ImageAny, Field(description="Input image data")],
|
|
11
|
+
in_mask: Annotated[ImageAnyMask, Field(description="Input image mask")],
|
|
12
|
+
input_image_has_mask: Annotated[bool, Field(description="Whether the input image has a mask")],
|
|
13
|
+
in_multichannel: Annotated[bool, Field(description="Whether the input image is multichannel")],
|
|
14
|
+
divisor_value: Annotated[float, Field(description="Value to divide the input image by (for divide by value)")],
|
|
15
|
+
auto_high: Annotated[MaximumIntensityMethod, Field(description="Method to determine the maximum intensity")],
|
|
16
|
+
auto_low: Annotated[MinimumIntensityMethod, Field(description="Method to determine the minimum intensity")],
|
|
17
|
+
source_high: Annotated[float, Field(description="Upper intensity limit for the input image")],
|
|
18
|
+
source_low: Annotated[float, Field(description="Lower intensity limit for the input image")],
|
|
19
|
+
source_scale_min: Annotated[float, Field(description="Intensity range for the input image - minimum")],
|
|
20
|
+
source_scale_max: Annotated[float, Field(description="Intensity range for the input image - maximum")],
|
|
21
|
+
global_min: Annotated[Optional[PixelAny], Field(description="Intensity range for all images - minimum")],
|
|
22
|
+
global_max: Annotated[Optional[PixelAny], Field(description="Intensity range for all images = maximum")],
|
|
23
|
+
dest_scale_min: Annotated[Optional[float], Field(description="Intensity range for the output image - minimum")],
|
|
24
|
+
dest_scale_max: Annotated[Optional[float], Field(description="Intensity range for the output image - maximum")],
|
|
25
|
+
reference_image_pixel_data: Annotated[Optional[ImageAny], Field(description="Reference image data - for scale by image maximum")],
|
|
26
|
+
reference_image_mask: Annotated[Optional[ImageGrayscaleMask], Field(description="Reference image mask - for scale by image maximum")],
|
|
27
|
+
) -> ImageAny:
|
|
28
|
+
if rescale_method == RescaleMethod.STRETCH.value:
|
|
29
|
+
output_image = stretch_rescale(in_pixel_data, in_mask, in_multichannel)
|
|
30
|
+
elif (rescale_method == RescaleMethod.MANUAL_INPUT_RANGE.value) or (rescale_method == RescaleMethod.MANUAL_IO_RANGE.value):
|
|
31
|
+
in_mask_manual_input = None if input_image_has_mask else in_mask # for this method, mask needs to be None if not present
|
|
32
|
+
if rescale_method == RescaleMethod.MANUAL_INPUT_RANGE.value:
|
|
33
|
+
output_image = manual_input_range(
|
|
34
|
+
in_pixel_data,
|
|
35
|
+
in_mask_manual_input,
|
|
36
|
+
source_high, source_low, source_scale_min, source_scale_max, auto_high, auto_low, global_min, global_max
|
|
37
|
+
)
|
|
38
|
+
else:
|
|
39
|
+
output_image = manual_io_range(
|
|
40
|
+
in_pixel_data,
|
|
41
|
+
in_mask_manual_input,
|
|
42
|
+
source_high, source_low, source_scale_min, source_scale_max, auto_high, auto_low, global_min, global_max, dest_scale_min, dest_scale_max
|
|
43
|
+
)
|
|
44
|
+
elif rescale_method == RescaleMethod.DIVIDE_BY_IMAGE_MINIMUM.value:
|
|
45
|
+
output_image = divide_by_image_minimum(in_pixel_data, in_mask)
|
|
46
|
+
elif rescale_method == RescaleMethod.DIVIDE_BY_IMAGE_MAXIMUM.value:
|
|
47
|
+
output_image = divide_by_image_maximum(in_pixel_data, in_mask)
|
|
48
|
+
elif rescale_method == RescaleMethod.DIVIDE_BY_VALUE.value:
|
|
49
|
+
output_image = divide_by_value(in_pixel_data, divisor_value)
|
|
50
|
+
elif rescale_method == RescaleMethod.DIVIDE_BY_MEASUREMENT.value:
|
|
51
|
+
# TODO: 5088 - update this once measurement format is finalized
|
|
52
|
+
raise NotImplementedError("Rescale by measurement not implemented in library yet")
|
|
53
|
+
elif rescale_method == RescaleMethod.SCALE_BY_IMAGE_MAXIMUM.value:
|
|
54
|
+
assert reference_image_pixel_data is not None, "Reference image is required for scale by image maximum"
|
|
55
|
+
assert reference_image_mask is not None, "Reference image mask is required for scale by image maximum"
|
|
56
|
+
output_image = scale_by_image_maximum(in_pixel_data, in_mask, reference_image_pixel_data, reference_image_mask)
|
|
57
|
+
else:
|
|
58
|
+
raise ValueError(f"Invalid rescale method: {rescale_method.value}")
|
|
59
|
+
return output_image
|
|
60
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
class RescaleMethod(str, Enum):
|
|
4
|
+
|
|
5
|
+
STRETCH = "Stretch each image to use the full intensity range"
|
|
6
|
+
MANUAL_INPUT_RANGE = "Choose specific values to be reset to the full intensity range"
|
|
7
|
+
MANUAL_IO_RANGE = "Choose specific values to be reset to a custom range"
|
|
8
|
+
DIVIDE_BY_IMAGE_MINIMUM = "Divide by the image's minimum"
|
|
9
|
+
DIVIDE_BY_IMAGE_MAXIMUM = "Divide by the image's maximum"
|
|
10
|
+
DIVIDE_BY_VALUE = "Divide each image by the same value"
|
|
11
|
+
DIVIDE_BY_MEASUREMENT = "Divide each image by a previously calculated value"
|
|
12
|
+
SCALE_BY_IMAGE_MAXIMUM = "Match the image's maximum to another image's maximum"
|
|
13
|
+
|
|
14
|
+
M_ALL = [
|
|
15
|
+
RescaleMethod.STRETCH,
|
|
16
|
+
RescaleMethod.MANUAL_INPUT_RANGE,
|
|
17
|
+
RescaleMethod.MANUAL_IO_RANGE,
|
|
18
|
+
RescaleMethod.DIVIDE_BY_IMAGE_MINIMUM,
|
|
19
|
+
RescaleMethod.DIVIDE_BY_IMAGE_MAXIMUM,
|
|
20
|
+
RescaleMethod.DIVIDE_BY_VALUE,
|
|
21
|
+
RescaleMethod.DIVIDE_BY_MEASUREMENT,
|
|
22
|
+
RescaleMethod.SCALE_BY_IMAGE_MAXIMUM,
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
_CUSTOM_VALUE = "Custom"
|
|
26
|
+
|
|
27
|
+
class MinimumIntensityMethod(str, Enum):
|
|
28
|
+
CUSTOM_VALUE = _CUSTOM_VALUE
|
|
29
|
+
ALL_IMAGES = "Minimum of all images"
|
|
30
|
+
EACH_IMAGE = "Minimum for each image"
|
|
31
|
+
|
|
32
|
+
LOW_ALL = [MinimumIntensityMethod.CUSTOM_VALUE, MinimumIntensityMethod.EACH_IMAGE, MinimumIntensityMethod.ALL_IMAGES]
|
|
33
|
+
|
|
34
|
+
class MaximumIntensityMethod(str, Enum):
|
|
35
|
+
CUSTOM_VALUE = _CUSTOM_VALUE
|
|
36
|
+
ALL_IMAGES = "Maximum of all images"
|
|
37
|
+
EACH_IMAGE = "Maximum for each image"
|
|
38
|
+
|
|
39
|
+
HIGH_ALL = [MaximumIntensityMethod.CUSTOM_VALUE, MaximumIntensityMethod.EACH_IMAGE, MaximumIntensityMethod.ALL_IMAGES]
|
|
@@ -82,25 +82,34 @@ def validate_object_segmentation_ijv(ijv: NDArray[np.int_]) -> NDArray[np.int_]:
|
|
|
82
82
|
raise ValueError(f"Expected a 2-dimensional array with 3 columns, got {ijv.shape[1]}")
|
|
83
83
|
return ijv
|
|
84
84
|
|
|
85
|
+
PixelAny_ = Union[np.float32, np.float64, np.int_, np.int8, np.int16, np.int32, np.uint8, np.uint16, np.uint32, np.bool_]
|
|
86
|
+
PixelAny = Annotated[PixelAny_, Field(description="Pixel value, before conversion to float")]
|
|
87
|
+
Pixel_ = Union[np.float32, np.float64]
|
|
85
88
|
Pixel = Annotated[Union[np.float32, np.float64], Field(description="Pixel value")]
|
|
86
89
|
ObjectLabel = Annotated[Union[np.int8, np.int16, np.int32], Field(description="Object label")]
|
|
87
90
|
ObjectIndices = Annotated[np.int32, Field(description="Object indices")]
|
|
88
91
|
|
|
89
|
-
Image2DColor = Annotated[NDArray[Pixel], Field(description="2D image with multiple channels of type float32"), AfterValidator(create_type_validator(False, True, False,
|
|
92
|
+
Image2DColor = Annotated[NDArray[Pixel], Field(description="2D image with multiple channels of type float32"), AfterValidator(create_type_validator(False, True, False, Pixel_))]
|
|
93
|
+
Image2DColorAny = Annotated[NDArray[PixelAny], Field(description="2D image with multiple channels of any type"), AfterValidator(create_type_validator(False, True, False, PixelAny_))]
|
|
90
94
|
Image2DColorMask = Annotated[NDArray[np.bool_], Field(description="2D color mask"), AfterValidator(create_type_validator(False, True, False, np.bool_))]
|
|
91
|
-
Image2DGrayscale = Annotated[NDArray[Pixel], Field(description="2D grayscale image of type float32"), AfterValidator(create_type_validator(False, False, False,
|
|
95
|
+
Image2DGrayscale = Annotated[NDArray[Pixel], Field(description="2D grayscale image of type float32"), AfterValidator(create_type_validator(False, False, False, Pixel_))]
|
|
96
|
+
Image2DGrayscaleAny = Annotated[NDArray[PixelAny], Field(description="2D grayscale image of any type"), AfterValidator(create_type_validator(False, False, False, PixelAny_))]
|
|
92
97
|
Image2DGrayscaleMask = Annotated[NDArray[np.bool_], Field(description="2D grayscale mask"), AfterValidator(create_type_validator(False, False, False, np.bool_))]
|
|
93
98
|
Image2DBinary = Annotated[NDArray[np.bool_], Field(description="2D binary image"), AfterValidator(create_type_validator(False, False, False, np.bool_))]
|
|
94
99
|
Image2DBinaryMask = Annotated[NDArray[np.bool_], Field(description="2D binary mask"), AfterValidator(create_type_validator(False, False, False, np.bool_))]
|
|
95
100
|
Image2DInt = Annotated[NDArray[np.int32], Field(description="2D int32 image"), AfterValidator(create_type_validator(False, False, False, np.int32))]
|
|
101
|
+
Image2DUInt = Annotated[NDArray[np.uint8], Field(description="2D uint8 image"), AfterValidator(create_type_validator(False, False, False, np.uint8))]
|
|
96
102
|
|
|
97
|
-
Image3DColor = Annotated[NDArray[Pixel], Field(description="3D image with multiple channels of type float32"), AfterValidator(create_type_validator(True, True, False,
|
|
103
|
+
Image3DColor = Annotated[NDArray[Pixel], Field(description="3D image with multiple channels of type float32"), AfterValidator(create_type_validator(True, True, False, Pixel_))]
|
|
104
|
+
Image3DColorAny = Annotated[NDArray[PixelAny], Field(description="3D image with multiple channels of any type"), AfterValidator(create_type_validator(True, True, False, PixelAny_))]
|
|
98
105
|
Image3DColorMask = Annotated[NDArray[np.bool_], Field(description="3D image with multiple channels of type float32"), AfterValidator(create_type_validator(True, True, False, np.bool_))]
|
|
99
|
-
Image3DGrayscale = Annotated[NDArray[Pixel], Field(description="3D grayscale image of type float32"), AfterValidator(create_type_validator(True, False, False,
|
|
106
|
+
Image3DGrayscale = Annotated[NDArray[Pixel], Field(description="3D grayscale image of type float32"), AfterValidator(create_type_validator(True, False, False, Pixel_))]
|
|
107
|
+
Image3DGrayscaleAny = Annotated[NDArray[PixelAny], Field(description="3D grayscale image of any type"), AfterValidator(create_type_validator(True, False, False, PixelAny_))]
|
|
100
108
|
Image3DGrayscaleMask = Annotated[NDArray[np.bool_], Field(description="3D grayscale mask"), AfterValidator(create_type_validator(True, False, False, np.bool_))]
|
|
101
109
|
Image3DBinary = Annotated[NDArray[np.bool_], Field(description="3D binary image"), AfterValidator(create_type_validator(True, False, False, np.bool_))]
|
|
102
110
|
Image3DBinaryMask = Annotated[NDArray[np.bool_], Field(description="3D binary mask"), AfterValidator(create_type_validator(True, False, False, np.bool_))]
|
|
103
111
|
Image3DInt = Annotated[NDArray[np.int32], Field(description="3D int32 image"), AfterValidator(create_type_validator(True, False, False, np.int32))]
|
|
112
|
+
Image3DUInt = Annotated[NDArray[np.uint8], Field(description="3D uint8 image"), AfterValidator(create_type_validator(True, False, False, np.uint8))]
|
|
104
113
|
|
|
105
114
|
# see cellprofiler_library.functions.segmentation._validate_<type> for more details
|
|
106
115
|
ObjectLabelsDense = Annotated[NDArray[ObjectLabel], Field(description="Dense array of object labels"), AfterValidator(validate_object_labels_dense)]
|
|
@@ -118,7 +127,7 @@ ImageColorMask = Union[Image2DColorMask, Image3DColorMask]
|
|
|
118
127
|
ImageBinary = Union[Image2DBinary, Image3DBinary]
|
|
119
128
|
ImageBinaryMask = Union[Image2DBinaryMask, Image3DBinaryMask]
|
|
120
129
|
|
|
121
|
-
ImageAny = Union[
|
|
130
|
+
ImageAny = Union[Image2DColorAny, Image3DColorAny, Image2DGrayscaleAny, Image3DGrayscaleAny, Image2DBinary, Image3DBinary, Image2DInt, Image3DInt]
|
|
122
131
|
ImageAnyMask = Union[Image2DColorMask, Image3DColorMask, Image2DGrayscaleMask, Image3DGrayscaleMask, Image2DBinaryMask, Image3DBinaryMask]
|
|
123
132
|
|
|
124
133
|
Image2D = Union[Image2DColor, Image2DGrayscale, Image2DBinary]
|
|
@@ -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.dev669
|
|
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>
|
|
@@ -62,6 +62,7 @@ cellprofiler_library/modules/_overlayobjects.py
|
|
|
62
62
|
cellprofiler_library/modules/_overlayoutlines.py
|
|
63
63
|
cellprofiler_library/modules/_reducenoise.py
|
|
64
64
|
cellprofiler_library/modules/_removeholes.py
|
|
65
|
+
cellprofiler_library/modules/_rescaleintensity.py
|
|
65
66
|
cellprofiler_library/modules/_resize.py
|
|
66
67
|
cellprofiler_library/modules/_savecroppedobjects.py
|
|
67
68
|
cellprofiler_library/modules/_shrinktoobjectcenters.py
|
|
@@ -106,6 +107,7 @@ cellprofiler_library/opts/morph.py
|
|
|
106
107
|
cellprofiler_library/opts/objectsizeshapefeatures.py
|
|
107
108
|
cellprofiler_library/opts/overlayoutlines.py
|
|
108
109
|
cellprofiler_library/opts/removeholes.py
|
|
110
|
+
cellprofiler_library/opts/rescaleintensity.py
|
|
109
111
|
cellprofiler_library/opts/resize.py
|
|
110
112
|
cellprofiler_library/opts/shrinktoobjectcenters.py
|
|
111
113
|
cellprofiler_library/opts/smooth.py
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"cellprofiler_library/modules/_overlayoutlines.py",
|
|
60
60
|
"cellprofiler_library/modules/_reducenoise.py",
|
|
61
61
|
"cellprofiler_library/modules/_removeholes.py",
|
|
62
|
+
"cellprofiler_library/modules/_rescaleintensity.py",
|
|
62
63
|
"cellprofiler_library/modules/_resize.py",
|
|
63
64
|
"cellprofiler_library/modules/_savecroppedobjects.py",
|
|
64
65
|
"cellprofiler_library/modules/_shrinktoobjectcenters.py",
|
|
@@ -103,6 +104,7 @@
|
|
|
103
104
|
"cellprofiler_library/opts/objectsizeshapefeatures.py",
|
|
104
105
|
"cellprofiler_library/opts/overlayoutlines.py",
|
|
105
106
|
"cellprofiler_library/opts/removeholes.py",
|
|
107
|
+
"cellprofiler_library/opts/rescaleintensity.py",
|
|
106
108
|
"cellprofiler_library/opts/resize.py",
|
|
107
109
|
"cellprofiler_library/opts/shrinktoobjectcenters.py",
|
|
108
110
|
"cellprofiler_library/opts/smooth.py",
|
{cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/LICENSE
RENAMED
|
File without changes
|
{cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/setup.cfg
RENAMED
|
File without changes
|