impy-array 2.4.9__tar.gz → 2.4.10__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.
- {impy_array-2.4.9 → impy_array-2.4.10}/PKG-INFO +1 -1
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/__init__.py +1 -1
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_filters.py +2 -1
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/__init__.py +2 -2
- impy_array-2.4.10/impy/io/_czi.py +52 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_mrc.py +10 -2
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_utils.py +4 -2
- {impy_array-2.4.9 → impy_array-2.4.10}/.gitignore +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/LICENSE +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/README.md +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/__main__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/_const.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/_types.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/array_api.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_imshow.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_corr.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_deconv.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_docs.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_glcm.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_linalg.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_misc.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_plot.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_process_numba.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_skimage.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_structures.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_transform.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/axesmixin.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/metaarray.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/overload.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/big.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/imgarray.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/label.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/labeledarray.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/lazy.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/phasearray.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/specials.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/tiled.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axes.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axes_tuple.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axis.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_slicer.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/binder.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/collections.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/core.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/correlation.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/frame/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/frame/frames.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_nd2.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_npy.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_registry.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_tiff.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_zarr.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/core.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/random.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/random.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/roi.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/axesop.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/deco.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/gauss.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/misc.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/slicer.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/utilcls.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/__init__.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/utils.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/viewer.py +0 -0
- {impy_array-2.4.9 → impy_array-2.4.10}/pyproject.toml +0 -0
|
@@ -155,7 +155,8 @@ def gabor_filter(img: np.ndarray, ker: np.ndarray, mode="reflect", cval=0.0):
|
|
|
155
155
|
|
|
156
156
|
def skeletonize(img, selem):
|
|
157
157
|
from skimage import morphology
|
|
158
|
-
|
|
158
|
+
|
|
159
|
+
skl = morphology.skeletonize(img)
|
|
159
160
|
if selem is not None:
|
|
160
161
|
skl = morphology.binary_dilation(skl, selem)
|
|
161
162
|
return skl
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from ._registry import imread, imread_dask, imsave, mark_reader, mark_writer, read_header
|
|
2
|
-
from . import _tiff, _mrc, _npy, _zarr, _nd2
|
|
2
|
+
from . import _tiff, _mrc, _npy, _zarr, _nd2, _czi
|
|
3
3
|
|
|
4
|
-
del _tiff, _mrc, _npy, _zarr, _nd2
|
|
4
|
+
del _tiff, _mrc, _npy, _zarr, _nd2, _czi
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
|
7
7
|
"imread",
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
import numpy as np
|
|
5
|
+
from impy.io._registry import IO
|
|
6
|
+
from impy.io._utils import ImageData, ImageMetadata
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from czifile import CziFile
|
|
10
|
+
|
|
11
|
+
@IO.mark_reader(".czi")
|
|
12
|
+
def _(path: str, memmap: bool = False) -> ImageData:
|
|
13
|
+
"""The CZI format reader"""
|
|
14
|
+
import czifile
|
|
15
|
+
|
|
16
|
+
if memmap:
|
|
17
|
+
raise NotImplementedError("CZI reader does not support memmap mode yet.")
|
|
18
|
+
else:
|
|
19
|
+
out = None
|
|
20
|
+
with czifile.CziFile(path) as czi:
|
|
21
|
+
data = np.squeeze(czi.asarray(out=out))
|
|
22
|
+
meta = _parse_czi_meta(czi)
|
|
23
|
+
|
|
24
|
+
return ImageData.from_metadata(data, meta)
|
|
25
|
+
|
|
26
|
+
def _parse_czi_meta(czi: CziFile) -> ImageMetadata:
|
|
27
|
+
"""Parse metadata from a CZI file."""
|
|
28
|
+
axes_all: str = czi.axes
|
|
29
|
+
shape = czi.shape
|
|
30
|
+
axes = "".join(a.lower() for s, a in zip(shape, axes_all) if s > 1)
|
|
31
|
+
try:
|
|
32
|
+
img_meta = czi.metadata(raw=False)["ImageDocument"]["Metadata"]
|
|
33
|
+
scale = {}
|
|
34
|
+
for item in img_meta["Scaling"]["Items"]["Distance"]:
|
|
35
|
+
a = item["Id"].lower()
|
|
36
|
+
if a in axes:
|
|
37
|
+
scale[a] = item.get("Value", 1e-6) * 1e6 # as micron
|
|
38
|
+
try:
|
|
39
|
+
labels = [item["ImageChannelName"] for item in img_meta["Experiment"]["ExperimentBlocks"]["AcquisitionBlock"]["MultiTrackSetup"]["TrackSetup"]["Detectors"]["Detector"]]
|
|
40
|
+
except Exception:
|
|
41
|
+
labels = None
|
|
42
|
+
except KeyError:
|
|
43
|
+
scale = None
|
|
44
|
+
labels = None
|
|
45
|
+
|
|
46
|
+
return ImageMetadata(
|
|
47
|
+
axes=axes,
|
|
48
|
+
scale=scale,
|
|
49
|
+
unit="μm",
|
|
50
|
+
metadata=img_meta,
|
|
51
|
+
labels=labels,
|
|
52
|
+
)
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
import warnings
|
|
6
|
-
import os
|
|
7
6
|
import numpy as np
|
|
8
7
|
from impy.io._registry import IO
|
|
9
8
|
from impy.io._utils import rechunk_to_ones, MemmapArrayWriter, ImpyArray, ImageData, ImageMetadata
|
|
@@ -113,14 +112,23 @@ def _parse_mrcfile(mrc: MrcObject) -> ImageMetadata:
|
|
|
113
112
|
else:
|
|
114
113
|
axes = "zyx"
|
|
115
114
|
|
|
115
|
+
metadata = {}
|
|
116
116
|
scale = dict.fromkeys(axes, 1.0)
|
|
117
117
|
for a in axes:
|
|
118
118
|
scale[a] = mrc.voxel_size[a] / 10
|
|
119
|
+
try:
|
|
120
|
+
orig_x, orig_y, orig_z = mrc.header["origin"].item()
|
|
121
|
+
except Exception:
|
|
122
|
+
pass
|
|
123
|
+
else:
|
|
124
|
+
metadata["origin_nm"] = np.array([orig_z, orig_y, orig_x], dtype=np.float32) / 10
|
|
125
|
+
|
|
126
|
+
metadata["labels"] = mrc.get_labels()
|
|
119
127
|
|
|
120
128
|
return ImageMetadata(
|
|
121
129
|
axes=axes,
|
|
122
130
|
scale=scale,
|
|
123
131
|
unit={a: "nm" for a in axes},
|
|
124
|
-
metadata=
|
|
132
|
+
metadata=metadata,
|
|
125
133
|
labels=None,
|
|
126
134
|
)
|
|
@@ -40,7 +40,7 @@ class MemmapArrayWriter:
|
|
|
40
40
|
chunksize: tuple[int, ...],
|
|
41
41
|
):
|
|
42
42
|
self._path = path
|
|
43
|
-
self._offset = offset
|
|
43
|
+
self._offset = int(offset)
|
|
44
44
|
self._shape = shape # original shape
|
|
45
45
|
self._chunksize = chunksize # chunk size
|
|
46
46
|
# shape = (33, 160, 1000, 1000)
|
|
@@ -56,7 +56,9 @@ class MemmapArrayWriter:
|
|
|
56
56
|
# efficient: shape = (10, 100, 150) and sl = (3:5, 0:100, 0:150)
|
|
57
57
|
# sl = (0:1, 16:32, 0:1000, 0:1000)
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
# if input array is e.g. flipped, we need to make it contiguous
|
|
60
|
+
arr = np.ascontiguousarray(arr)
|
|
61
|
+
offset = sum(int(sl[i].start * arr.strides[i]) for i in range(self._border + 1))
|
|
60
62
|
arr_ravel = arr.ravel()
|
|
61
63
|
mmap = np.memmap(
|
|
62
64
|
self._path,
|
|
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
|