cellprofiler-library-nightly 5.0.0.dev321__py3-none-any.whl → 5.0.0.dev324__py3-none-any.whl
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/_version.py +2 -2
- cellprofiler_library/functions/image_processing.py +43 -1
- cellprofiler_library/modules/_erodeimage.py +36 -0
- cellprofiler_library/opts/erodeimage.py +14 -0
- cellprofiler_library/opts/structuring_elements.py +12 -0
- cellprofiler_library/types.py +2 -0
- {cellprofiler_library_nightly-5.0.0.dev321.dist-info → cellprofiler_library_nightly-5.0.0.dev324.dist-info}/METADATA +1 -1
- {cellprofiler_library_nightly-5.0.0.dev321.dist-info → cellprofiler_library_nightly-5.0.0.dev324.dist-info}/RECORD +11 -8
- {cellprofiler_library_nightly-5.0.0.dev321.dist-info → cellprofiler_library_nightly-5.0.0.dev324.dist-info}/WHEEL +0 -0
- {cellprofiler_library_nightly-5.0.0.dev321.dist-info → cellprofiler_library_nightly-5.0.0.dev324.dist-info}/licenses/LICENSE +0 -0
- {cellprofiler_library_nightly-5.0.0.dev321.dist-info → cellprofiler_library_nightly-5.0.0.dev324.dist-info}/top_level.txt +0 -0
cellprofiler_library/_version.py
CHANGED
|
@@ -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.
|
|
32
|
-
__version_tuple__ = version_tuple = (5, 0, 0, '
|
|
31
|
+
__version__ = version = '5.0.0.dev324'
|
|
32
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev324')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -7,9 +7,10 @@ import scipy
|
|
|
7
7
|
import matplotlib
|
|
8
8
|
import math
|
|
9
9
|
from typing import Any, Optional, Tuple, Callable, Union, List
|
|
10
|
-
from cellprofiler_library.types import ImageGrayscale, ImageGrayscaleMask, Image2DColor, Image2DGrayscale, ImageAny, ObjectSegmentation, Image2D, Image2DMask
|
|
10
|
+
from cellprofiler_library.types import ImageGrayscale, ImageGrayscaleMask, Image2DColor, Image2DGrayscale, ImageAny, ObjectSegmentation, Image2D, Image2DMask, StructuringElement
|
|
11
11
|
from cellprofiler_library.opts import threshold as Threshold
|
|
12
12
|
from cellprofiler_library.opts.crop import RemovalMethod
|
|
13
|
+
from cellprofiler_library.opts.structuring_elements import StructuringElementShape2D, StructuringElementShape3D
|
|
13
14
|
|
|
14
15
|
def rgb_to_greyscale(image):
|
|
15
16
|
if image.shape[-1] == 4:
|
|
@@ -119,6 +120,47 @@ def morphological_skeleton_3d(image):
|
|
|
119
120
|
return skimage.morphology.skeletonize_3d(image)
|
|
120
121
|
|
|
121
122
|
|
|
123
|
+
################################################################################
|
|
124
|
+
# Morphological Operations Helpers
|
|
125
|
+
################################################################################
|
|
126
|
+
|
|
127
|
+
def get_structuring_element(shape: Union[StructuringElementShape2D, StructuringElementShape3D], size: int) -> StructuringElement:
|
|
128
|
+
return getattr(skimage.morphology, shape.value.lower())(size)
|
|
129
|
+
|
|
130
|
+
################################################################################
|
|
131
|
+
# ErodeImage
|
|
132
|
+
################################################################################
|
|
133
|
+
|
|
134
|
+
def morphology_erosion(image: ImageAny, structuring_element: StructuringElement) -> ImageAny:
|
|
135
|
+
"""Apply morphological erosion to an image.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
image: Input image (2D or 3D)
|
|
139
|
+
structuring_element: Structuring element for erosion
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
Eroded image with same dimensions as input
|
|
143
|
+
"""
|
|
144
|
+
is_strel_2d = structuring_element.ndim == 2
|
|
145
|
+
is_img_2d = image.ndim == 2
|
|
146
|
+
|
|
147
|
+
if is_strel_2d and not is_img_2d:
|
|
148
|
+
# Apply 2D structuring element to 3D image planewise
|
|
149
|
+
y_data = numpy.zeros_like(image)
|
|
150
|
+
for index, plane in enumerate(image):
|
|
151
|
+
y_data[index] = skimage.morphology.erosion(plane, structuring_element)
|
|
152
|
+
return y_data
|
|
153
|
+
|
|
154
|
+
if not is_strel_2d and is_img_2d:
|
|
155
|
+
raise NotImplementedError(
|
|
156
|
+
"A 3D structuring element cannot be applied to a 2D image."
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# Apply erosion directly for matching dimensions
|
|
160
|
+
y_data = skimage.morphology.erosion(image, structuring_element)
|
|
161
|
+
return y_data
|
|
162
|
+
|
|
163
|
+
|
|
122
164
|
def median_filter(image, window_size, mode):
|
|
123
165
|
return scipy.ndimage.median_filter(image, size=window_size, mode=mode)
|
|
124
166
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
ErodeImage module for the CellProfiler library.
|
|
5
|
+
|
|
6
|
+
This module contains the core algorithms for morphological erosion operations.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pydantic import validate_call, ConfigDict, Field
|
|
10
|
+
from typing import Union, Tuple, Annotated
|
|
11
|
+
from cellprofiler_library.types import ImageAny, StructuringElement
|
|
12
|
+
from cellprofiler_library.functions.image_processing import morphology_erosion, get_structuring_element
|
|
13
|
+
from cellprofiler_library.opts.structuring_elements import StructuringElementShape2D, StructuringElementShape3D
|
|
14
|
+
|
|
15
|
+
StructuringElementSize = Annotated[int, Field(description="Size of structuring element", gt=0)]
|
|
16
|
+
StructuringElementParameters = Tuple[Union[StructuringElementShape2D, StructuringElementShape3D], StructuringElementSize]
|
|
17
|
+
@validate_call(config=ConfigDict(arbitrary_types_allowed=True))
|
|
18
|
+
def erode_image(
|
|
19
|
+
image: Annotated[ImageAny, Field(description="Input image to perform erosion on")],
|
|
20
|
+
structuring_element: Annotated[Union[StructuringElement, StructuringElementParameters], Field(description="Structuring element for erosion operation as either an NDArray or a tuple of (StructuringElement[N]D, size)")]
|
|
21
|
+
) -> ImageAny:
|
|
22
|
+
"""Apply morphological erosion to an image.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
image: Input image (2D or 3D grayscale)
|
|
26
|
+
structuring_element: Structuring element for erosion operation as an NDArray or a tuple of (StructuringElement[N]D, size)
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Eroded image with same dimensions and type as input
|
|
30
|
+
|
|
31
|
+
Raises:
|
|
32
|
+
NotImplementedError: If trying to apply 3D structuring element to 2D image
|
|
33
|
+
"""
|
|
34
|
+
if isinstance(structuring_element, tuple):
|
|
35
|
+
structuring_element = get_structuring_element(structuring_element[0], structuring_element[1])
|
|
36
|
+
return morphology_erosion(image, structuring_element)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Options and enums for ErodeImage module
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# Note: ErodeImage is a simple morphological operation module that doesn't require
|
|
8
|
+
# complex enums. The main configuration is handled through the StructuringElement
|
|
9
|
+
# setting which is managed by the core framework. This file is created for
|
|
10
|
+
# consistency with the refactoring pattern but may be minimal.
|
|
11
|
+
|
|
12
|
+
# Currently no custom enums needed for ErodeImage as it uses standard
|
|
13
|
+
# StructuringElement configuration from cellprofiler_core. For structuring element shapes,
|
|
14
|
+
# see cellprofiler_library.opts.structuring_elements
|
cellprofiler_library/types.py
CHANGED
|
@@ -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.dev324
|
|
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>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
cellprofiler_library/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
cellprofiler_library/_version.py,sha256=
|
|
2
|
+
cellprofiler_library/_version.py,sha256=X_dsIS438JBC3vSFB9YEnaGPIPrvCqTB7mibbwXlkv0,721
|
|
3
3
|
cellprofiler_library/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
cellprofiler_library/types.py,sha256=
|
|
4
|
+
cellprofiler_library/types.py,sha256=cU38AwLLsMiI3XCwfrmWmDNpGWgLfpCpsuwnijaT8vU,8559
|
|
5
5
|
cellprofiler_library/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
cellprofiler_library/functions/file_processing.py,sha256=jumpdgxReyV5xzF4YXZWhkei9CQ9GtWD-VUCuFh-FZM,5168
|
|
7
|
-
cellprofiler_library/functions/image_processing.py,sha256=
|
|
7
|
+
cellprofiler_library/functions/image_processing.py,sha256=SMt7vykb0nvEEFoo0VGNRDORSjLAZuxW2AQZOND-jjw,34874
|
|
8
8
|
cellprofiler_library/functions/measurement.py,sha256=8pXcEb1fLgwOEDiTJho1_O-fFGTtIp-Qn1lStjQBjbo,29221
|
|
9
9
|
cellprofiler_library/functions/object_processing.py,sha256=3cKNq5ewBf_HWz6rdX3XR4WUbd6SklbHZ_H40xt9ODM,19443
|
|
10
10
|
cellprofiler_library/functions/segmentation.py,sha256=LNE22ByY0X7GepQaHqLdxkzlmIXjD3EglAYJjtT2dGo,25257
|
|
@@ -17,6 +17,7 @@ cellprofiler_library/modules/_convertobjectstoimage.py,sha256=PMYjH_prBKma4LNgUx
|
|
|
17
17
|
cellprofiler_library/modules/_correctilluminationapply.py,sha256=8bZC3AnQv3vpUrNSnLvcc_s0E-P63XbrfwMv7OZNjt4,2084
|
|
18
18
|
cellprofiler_library/modules/_crop.py,sha256=0T0sQsK7o5dHVXMZ4OqvAJkskkyez1MXcnPlU5yqsV4,2422
|
|
19
19
|
cellprofiler_library/modules/_enhanceedges.py,sha256=PaXZck8fPcxRf-IXCstu-OWmsvM_rDDPMMQ3cZFfVZc,2951
|
|
20
|
+
cellprofiler_library/modules/_erodeimage.py,sha256=nFHn4hdpjXJaPvnpSyfPAxWgd7UXi0fUUgPqEl26CCY,1802
|
|
20
21
|
cellprofiler_library/modules/_expandorshrinkobjects.py,sha256=A1oeW_O8C5NLJr-xU1R9pSulDau8XUeWaKiilpr-85g,856
|
|
21
22
|
cellprofiler_library/modules/_fillobjects.py,sha256=1zvlZNJhG8kEzAnVyiSLGPNE338EB5wopD2eK0BVWrc,469
|
|
22
23
|
cellprofiler_library/modules/_gaussianfilter.py,sha256=zVt562oviuoyy6l85Tgg_rjyQdOFCEnYLuykHYnYni8,174
|
|
@@ -37,11 +38,13 @@ cellprofiler_library/opts/convertimagetoobjects.py,sha256=9e3VOdpjd4084ATZyFtSQg
|
|
|
37
38
|
cellprofiler_library/opts/convertobjectstoimage.py,sha256=U3jeVtKYFgfxbO7NYndanAyZFoEvbyScOq4T8cpjfX8,188
|
|
38
39
|
cellprofiler_library/opts/correctilluminationapply.py,sha256=IkAqjMjaRdsoY2aXw5_dLI1iRYqCwvcNwCWEpWNZrN4,96
|
|
39
40
|
cellprofiler_library/opts/crop.py,sha256=GaArWq3WZd_Ykunj1SSbFOYkqDQ6TXy2MDKxG4fA6ZE,879
|
|
41
|
+
cellprofiler_library/opts/erodeimage.py,sha256=T3LCqu83rTqTDlc_7ebuPBKnr-FKomRHA8WD0uA9Y1g,584
|
|
40
42
|
cellprofiler_library/opts/measureimageoverlap.py,sha256=uopQCJTX1Uk-NNDAISsdYEOuOtiEBYOyCwu57ZT7X84,134
|
|
41
43
|
cellprofiler_library/opts/objectsizeshapefeatures.py,sha256=3GIntOH3qXs7F16Tpjmtg7opHYAmmOjEdEwW6q3ht_Y,6306
|
|
44
|
+
cellprofiler_library/opts/structuring_elements.py,sha256=Q4pBdCgDmjPx05t61Zqi40Iof8Nj3UR5k-F7brImLZY,263
|
|
42
45
|
cellprofiler_library/opts/threshold.py,sha256=yg_i5to22Nd9hTakaRxo9UIQZRYWFpavJimjl5JONx4,938
|
|
43
|
-
cellprofiler_library_nightly-5.0.0.
|
|
44
|
-
cellprofiler_library_nightly-5.0.0.
|
|
45
|
-
cellprofiler_library_nightly-5.0.0.
|
|
46
|
-
cellprofiler_library_nightly-5.0.0.
|
|
47
|
-
cellprofiler_library_nightly-5.0.0.
|
|
46
|
+
cellprofiler_library_nightly-5.0.0.dev324.dist-info/licenses/LICENSE,sha256=QLWaBS7kAioYx7PmJNXAMJaY8NODcFAag60YlUWuyz0,2276
|
|
47
|
+
cellprofiler_library_nightly-5.0.0.dev324.dist-info/METADATA,sha256=v47gHLjhRnydgeEgCJO2nxodQTAvyIRGVILWkhb2CXs,5534
|
|
48
|
+
cellprofiler_library_nightly-5.0.0.dev324.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
49
|
+
cellprofiler_library_nightly-5.0.0.dev324.dist-info/top_level.txt,sha256=LXq0ApDeDD4gotb6YFTySzdyScvHfS_pqoTg1QsNLBs,21
|
|
50
|
+
cellprofiler_library_nightly-5.0.0.dev324.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|