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.
Files changed (125) hide show
  1. {cellprofiler_library_nightly-5.0.0.dev661/cellprofiler_library_nightly.egg-info → cellprofiler_library_nightly-5.0.0.dev669}/PKG-INFO +1 -1
  2. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/_version.py +3 -3
  3. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/image_processing.py +205 -2
  4. cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library/modules/_rescaleintensity.py +60 -0
  5. cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library/opts/rescaleintensity.py +39 -0
  6. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/types.py +14 -5
  7. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library_nightly.egg-info}/PKG-INFO +1 -1
  8. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/SOURCES.txt +2 -0
  9. {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
  10. cellprofiler_library_nightly-5.0.0.dev669/cellprofiler_library_nightly.egg-info/scm_version.json +8 -0
  11. cellprofiler_library_nightly-5.0.0.dev661/cellprofiler_library_nightly.egg-info/scm_version.json +0 -8
  12. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/LICENSE +0 -0
  13. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/README.md +0 -0
  14. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/__init__.py +0 -0
  15. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/__init__.py +0 -0
  16. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/file_processing.py +0 -0
  17. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/measurement.py +0 -0
  18. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/object_processing.py +0 -0
  19. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/functions/segmentation.py +0 -0
  20. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/measurement_model.py +0 -0
  21. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/__init__.py +0 -0
  22. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_align.py +0 -0
  23. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_closing.py +0 -0
  24. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_colortogray.py +0 -0
  25. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_combineobjects.py +0 -0
  26. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_convertimagetoobjects.py +0 -0
  27. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_convertobjectstoimage.py +0 -0
  28. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_correctilluminationapply.py +0 -0
  29. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_crop.py +0 -0
  30. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_dilateimage.py +0 -0
  31. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_dilateobjects.py +0 -0
  32. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_enhanceedges.py +0 -0
  33. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_enhanceorsuppressfeatures.py +0 -0
  34. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_erodeimage.py +0 -0
  35. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_erodeobjects.py +0 -0
  36. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_expandorshrinkobjects.py +0 -0
  37. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_fillobjects.py +0 -0
  38. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_filterobjects.py +0 -0
  39. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_flipandrotate.py +0 -0
  40. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_gaussianfilter.py +0 -0
  41. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_graytocolor.py +0 -0
  42. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifydeadworms.py +0 -0
  43. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifyprimaryobjects.py +0 -0
  44. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifysecondaryobjects.py +0 -0
  45. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_identifytertiaryobjects.py +0 -0
  46. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_imagemath.py +0 -0
  47. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measurecolocalization.py +0 -0
  48. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measuregranularity.py +0 -0
  49. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageareaoccupied.py +0 -0
  50. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageintensity.py +0 -0
  51. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageoverlap.py +0 -0
  52. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimagequality.py +0 -0
  53. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureimageskeleton.py +0 -0
  54. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectintensity.py +0 -0
  55. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectintensitydistribution.py +0 -0
  56. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectneighbors.py +0 -0
  57. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectoverlap.py +0 -0
  58. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectsizeshape.py +0 -0
  59. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measureobjectskeleton.py +0 -0
  60. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_measuretexture.py +0 -0
  61. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_medialaxis.py +0 -0
  62. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_medianfilter.py +0 -0
  63. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_morph.py +0 -0
  64. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_morphologicalskeleton.py +0 -0
  65. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_opening.py +0 -0
  66. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_overlayobjects.py +0 -0
  67. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_overlayoutlines.py +0 -0
  68. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_reducenoise.py +0 -0
  69. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_removeholes.py +0 -0
  70. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_resize.py +0 -0
  71. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_savecroppedobjects.py +0 -0
  72. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_shrinktoobjectcenters.py +0 -0
  73. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_smooth.py +0 -0
  74. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_threshold.py +0 -0
  75. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/modules/_watershed.py +0 -0
  76. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/__init__.py +0 -0
  77. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/align.py +0 -0
  78. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/colortogray.py +0 -0
  79. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/convertimagetoobjects.py +0 -0
  80. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/convertobjectstoimage.py +0 -0
  81. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/correctilluminationapply.py +0 -0
  82. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/crop.py +0 -0
  83. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/dilateimage.py +0 -0
  84. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/dilateobjects.py +0 -0
  85. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/enhanceedges.py +0 -0
  86. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/enhanceorsuppressfeatures.py +0 -0
  87. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/erodeimage.py +0 -0
  88. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/erodeobjects.py +0 -0
  89. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/filterobjects.py +0 -0
  90. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/flipandrotate.py +0 -0
  91. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/graytocolor.py +0 -0
  92. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifydeadworms.py +0 -0
  93. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifyprimaryobjects.py +0 -0
  94. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifysecondaryobjects.py +0 -0
  95. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/identifytertiaryobjects.py +0 -0
  96. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/imagemath.py +0 -0
  97. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measurecolocalization.py +0 -0
  98. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measuregranularity.py +0 -0
  99. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageareaoccupied.py +0 -0
  100. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageintensity.py +0 -0
  101. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageoverlap.py +0 -0
  102. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimagequality.py +0 -0
  103. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureimageskeleton.py +0 -0
  104. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectintensity.py +0 -0
  105. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectintensitydistribution.py +0 -0
  106. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectneighbors.py +0 -0
  107. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectoverlap.py +0 -0
  108. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measureobjectskeleton.py +0 -0
  109. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/measuretexture.py +0 -0
  110. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/morph.py +0 -0
  111. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/objectsizeshapefeatures.py +0 -0
  112. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/overlayoutlines.py +0 -0
  113. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/removeholes.py +0 -0
  114. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/resize.py +0 -0
  115. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/shrinktoobjectcenters.py +0 -0
  116. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/smooth.py +0 -0
  117. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/structuring_elements.py +0 -0
  118. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/opts/threshold.py +0 -0
  119. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library/py.typed +0 -0
  120. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/dependency_links.txt +0 -0
  121. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/requires.txt +0 -0
  122. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/cellprofiler_library_nightly.egg-info/top_level.txt +0 -0
  123. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/environment.yml +0 -0
  124. {cellprofiler_library_nightly-5.0.0.dev661 → cellprofiler_library_nightly-5.0.0.dev669}/pyproject.toml +0 -0
  125. {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.dev661
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.dev661'
22
- __version_tuple__ = version_tuple = (5, 0, 0, 'dev661')
21
+ __version__ = version = '5.0.0.dev669'
22
+ __version_tuple__ = version_tuple = (5, 0, 0, 'dev669')
23
23
 
24
- __commit_id__ = commit_id = 'g222155826'
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, Union[np.float32, np.float64]))]
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, Union[np.float32, np.float64]))]
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, Union[np.float32, np.float64]))]
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, Union[np.float32, np.float64]))]
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[Image2DColor, Image3DColor, Image2DGrayscale, Image3DGrayscale, Image2DBinary, Image3DBinary, Image2DInt, Image3DInt]
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.dev661
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",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "5.0.0.dev0",
3
+ "distance": 669,
4
+ "node": "g51250caf343cdf434f15b90b277ba794c7510c79",
5
+ "dirty": true,
6
+ "branch": "main",
7
+ "node_date": "2026-08-21"
8
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "5.0.0.dev0",
3
- "distance": 661,
4
- "node": "g222155826b53073e015588d1def75edb54970ad2",
5
- "dirty": true,
6
- "branch": "main",
7
- "node_date": "2026-08-19"
8
- }