cellprofiler-library-nightly 5.0.0.dev643__tar.gz → 5.0.0.dev644__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 (116) hide show
  1. {cellprofiler_library_nightly-5.0.0.dev643/cellprofiler_library_nightly.egg-info → cellprofiler_library_nightly-5.0.0.dev644}/PKG-INFO +1 -1
  2. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/_version.py +3 -3
  3. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/measurement.py +27 -0
  4. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectintensity.py +8 -9
  5. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644/cellprofiler_library_nightly.egg-info}/PKG-INFO +1 -1
  6. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/LICENSE +0 -0
  7. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/README.md +0 -0
  8. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/__init__.py +0 -0
  9. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/__init__.py +0 -0
  10. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/file_processing.py +0 -0
  11. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/image_processing.py +0 -0
  12. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/object_processing.py +0 -0
  13. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/functions/segmentation.py +0 -0
  14. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/measurement_model.py +0 -0
  15. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/__init__.py +0 -0
  16. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_closing.py +0 -0
  17. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_colortogray.py +0 -0
  18. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_combineobjects.py +0 -0
  19. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_convertimagetoobjects.py +0 -0
  20. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_convertobjectstoimage.py +0 -0
  21. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_correctilluminationapply.py +0 -0
  22. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_crop.py +0 -0
  23. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_dilateimage.py +0 -0
  24. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_dilateobjects.py +0 -0
  25. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_enhanceedges.py +0 -0
  26. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_enhanceorsuppressfeatures.py +0 -0
  27. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_erodeimage.py +0 -0
  28. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_erodeobjects.py +0 -0
  29. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_expandorshrinkobjects.py +0 -0
  30. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_fillobjects.py +0 -0
  31. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_flipandrotate.py +0 -0
  32. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_gaussianfilter.py +0 -0
  33. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_graytocolor.py +0 -0
  34. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_identifydeadworms.py +0 -0
  35. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_identifyprimaryobjects.py +0 -0
  36. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_identifysecondaryobjects.py +0 -0
  37. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_identifytertiaryobjects.py +0 -0
  38. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_imagemath.py +0 -0
  39. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measurecolocalization.py +0 -0
  40. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measuregranularity.py +0 -0
  41. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureimageareaoccupied.py +0 -0
  42. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureimageintensity.py +0 -0
  43. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureimageoverlap.py +0 -0
  44. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureimagequality.py +0 -0
  45. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureimageskeleton.py +0 -0
  46. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectintensitydistribution.py +0 -0
  47. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectneighbors.py +0 -0
  48. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectoverlap.py +0 -0
  49. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectsizeshape.py +0 -0
  50. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measureobjectskeleton.py +0 -0
  51. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_measuretexture.py +0 -0
  52. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_medialaxis.py +0 -0
  53. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_medianfilter.py +0 -0
  54. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_morph.py +0 -0
  55. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_morphologicalskeleton.py +0 -0
  56. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_opening.py +0 -0
  57. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_overlayobjects.py +0 -0
  58. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_overlayoutlines.py +0 -0
  59. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_reducenoise.py +0 -0
  60. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_removeholes.py +0 -0
  61. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_resize.py +0 -0
  62. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_savecroppedobjects.py +0 -0
  63. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_shrinktoobjectcenters.py +0 -0
  64. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_smooth.py +0 -0
  65. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_threshold.py +0 -0
  66. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/modules/_watershed.py +0 -0
  67. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/__init__.py +0 -0
  68. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/colortogray.py +0 -0
  69. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/convertimagetoobjects.py +0 -0
  70. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/convertobjectstoimage.py +0 -0
  71. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/correctilluminationapply.py +0 -0
  72. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/crop.py +0 -0
  73. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/dilateimage.py +0 -0
  74. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/dilateobjects.py +0 -0
  75. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/enhanceedges.py +0 -0
  76. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/enhanceorsuppressfeatures.py +0 -0
  77. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/erodeimage.py +0 -0
  78. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/erodeobjects.py +0 -0
  79. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/flipandrotate.py +0 -0
  80. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/graytocolor.py +0 -0
  81. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/identifydeadworms.py +0 -0
  82. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/identifyprimaryobjects.py +0 -0
  83. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/identifysecondaryobjects.py +0 -0
  84. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/identifytertiaryobjects.py +0 -0
  85. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/imagemath.py +0 -0
  86. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measurecolocalization.py +0 -0
  87. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measuregranularity.py +0 -0
  88. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureimageareaoccupied.py +0 -0
  89. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureimageintensity.py +0 -0
  90. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureimageoverlap.py +0 -0
  91. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureimagequality.py +0 -0
  92. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureimageskeleton.py +0 -0
  93. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureobjectintensity.py +0 -0
  94. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureobjectintensitydistribution.py +0 -0
  95. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureobjectneighbors.py +0 -0
  96. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureobjectoverlap.py +0 -0
  97. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measureobjectskeleton.py +0 -0
  98. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/measuretexture.py +0 -0
  99. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/morph.py +0 -0
  100. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/objectsizeshapefeatures.py +0 -0
  101. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/overlayoutlines.py +0 -0
  102. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/removeholes.py +0 -0
  103. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/resize.py +0 -0
  104. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/shrinktoobjectcenters.py +0 -0
  105. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/smooth.py +0 -0
  106. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/structuring_elements.py +0 -0
  107. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/opts/threshold.py +0 -0
  108. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/py.typed +0 -0
  109. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library/types.py +0 -0
  110. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library_nightly.egg-info/SOURCES.txt +0 -0
  111. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library_nightly.egg-info/dependency_links.txt +0 -0
  112. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library_nightly.egg-info/requires.txt +0 -0
  113. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/cellprofiler_library_nightly.egg-info/top_level.txt +0 -0
  114. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/environment.yml +0 -0
  115. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/pyproject.toml +0 -0
  116. {cellprofiler_library_nightly-5.0.0.dev643 → cellprofiler_library_nightly-5.0.0.dev644}/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.dev643
3
+ Version: 5.0.0.dev644
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>
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '5.0.0.dev643'
32
- __version_tuple__ = version_tuple = (5, 0, 0, 'dev643')
31
+ __version__ = version = '5.0.0.dev644'
32
+ __version_tuple__ = version_tuple = (5, 0, 0, 'dev644')
33
33
 
34
- __commit_id__ = commit_id = 'g229e6671e'
34
+ __commit_id__ = commit_id = 'g02a8b5144'
@@ -1692,6 +1692,33 @@ def measure_quartile_intensity(indices:NDArray[numpy.int_], areas: NDArray[numpy
1692
1692
  dest_no_upper = limg[order[qindex[qmask_no_upper]]]
1693
1693
  return qmask, _dest, qmask_no_upper, dest_no_upper
1694
1694
 
1695
+ def measure_mad_intensity(
1696
+ limg: NDArray[Pixel],
1697
+ llabels: NDArray[ObjectLabel],
1698
+ lindexes: NDArray[numpy.int_],
1699
+ median_intensity: NDArray[numpy.float_],
1700
+ ) -> NDArray[numpy.float64]:
1701
+ """Compute the median absolute deviation (MAD) of intensity per object.
1702
+
1703
+ MAD is defined as median(|x_i - median(x)|). Unlike the quartile measurements,
1704
+ this is computed as a true per-object median of the absolute deviations rather
1705
+ than via interpolated quartile indexing, which would otherwise interpolate
1706
+ across value boundaries for odd-sized objects and yield an incorrect result.
1707
+
1708
+ Args:
1709
+ limg: 1D array of object pixel intensities
1710
+ llabels: 1D array of object labels, aligned with ``limg``
1711
+ lindexes: object label indices to compute over
1712
+ median_intensity: per-object median intensity, indexed by label - 1
1713
+
1714
+ Returns:
1715
+ Array of MAD values, one per entry in ``lindexes``.
1716
+ """
1717
+ madimg = numpy.abs(limg - median_intensity[llabels - 1])
1718
+ return centrosome.cpmorphology.fixup_scipy_ndimage_result(
1719
+ scipy.ndimage.median(madimg, llabels, lindexes)
1720
+ )
1721
+
1695
1722
  ###############################################################################
1696
1723
  # MeasureObjectOverlap
1697
1724
  ###############################################################################
@@ -7,7 +7,7 @@ from pydantic import Field, validate_call, ConfigDict, BaseModel
7
7
  from cellprofiler_core.utilities.core.object import crop_labels_and_image
8
8
  from cellprofiler_library.types import ImageGrayscale, ImageGrayscaleMask, ObjectLabelSet, Pixel, ObjectLabel
9
9
  from cellprofiler_library.measurement_model import LibraryMeasurements
10
- from cellprofiler_library.functions.measurement import measure_object_area_occupied, measure_integrated_intensity, measure_mean_intensity, measure_std_intensity, measure_min_intensity, measure_max_intensity, measure_max_position, measure_center_of_mass_binary, measure_center_of_mass_intensity, measure_mass_displacement, measure_quartile_intensity
10
+ from cellprofiler_library.functions.measurement import measure_object_area_occupied, measure_integrated_intensity, measure_mean_intensity, measure_std_intensity, measure_min_intensity, measure_max_intensity, measure_max_position, measure_center_of_mass_binary, measure_center_of_mass_intensity, measure_mass_displacement, measure_quartile_intensity, measure_mad_intensity
11
11
  from cellprofiler_library.opts.measureobjectintensity import TemplateMeasurementFormat, IntensityFeature
12
12
 
13
13
 
@@ -216,15 +216,14 @@ def measure_object_intensity(
216
216
  dest[lindexes[qmask_no_upper] - 1] = _dest_no_upper
217
217
 
218
218
  #
219
- # Once again, for the MAD
219
+ # The MAD = median(|x_i - median(x)|). Compute it as a true
220
+ # per-object median of the absolute deviations. Reusing the
221
+ # quartile machinery here would interpolate across value
222
+ # boundaries for odd-sized objects and give a wrong result.
220
223
  #
221
- fraction = 1.0/ image_dimensions
222
- madimg = numpy.abs(limg - median_intensity[llabels - 1])
223
- order = numpy.lexsort((madimg, llabels))
224
-
225
- qmask, _mad_intensity, qmask_no_upper, _mad_intensity_no_upper = measure_quartile_intensity(indices, areas, fraction, madimg, order)
226
- mad_intensity[lindexes[qmask] - 1] = _mad_intensity
227
- mad_intensity[lindexes[qmask_no_upper] - 1] = _mad_intensity_no_upper
224
+ mad_intensity[lindexes - 1] = measure_mad_intensity(
225
+ limg, llabels, lindexes, median_intensity
226
+ )
228
227
 
229
228
  emask = masked_outlines > 0
230
229
  eimg = img[emask]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cellprofiler-library-nightly
3
- Version: 5.0.0.dev643
3
+ Version: 5.0.0.dev644
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>