large-image 1.27.5.dev69__tar.gz → 1.27.5.dev99__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 (49) hide show
  1. {large-image-1.27.5.dev69/large_image.egg-info → large-image-1.27.5.dev99}/PKG-INFO +1 -1
  2. large-image-1.27.5.dev99/large_image/tilesource/resample.py +129 -0
  3. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99/large_image.egg-info}/PKG-INFO +1 -1
  4. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image.egg-info/SOURCES.txt +1 -0
  5. large-image-1.27.5.dev99/large_image.egg-info/requires.txt +145 -0
  6. large-image-1.27.5.dev69/large_image.egg-info/requires.txt +0 -145
  7. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/LICENSE +0 -0
  8. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/NOTICE +0 -0
  9. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/README.rst +0 -0
  10. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/annotations.rst +0 -0
  11. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/caching.rst +0 -0
  12. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/conf.py +0 -0
  13. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/config_options.rst +0 -0
  14. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/development.rst +0 -0
  15. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/example_usage.rst +0 -0
  16. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/formats.rst +0 -0
  17. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/girder_annotation_config_options.rst +0 -0
  18. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/girder_config_options.rst +0 -0
  19. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/image_conversion.rst +0 -0
  20. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/index.rst +0 -0
  21. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/large_image_examples.ipynb +0 -0
  22. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/make_docs.sh +0 -0
  23. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/multi_source_specification.rst +0 -0
  24. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/notebooks.rst +0 -0
  25. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/static/custom.css +0 -0
  26. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/tilesource_options.rst +0 -0
  27. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/docs/upgrade.rst +0 -0
  28. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/__init__.py +0 -0
  29. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/cache_util/__init__.py +0 -0
  30. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/cache_util/base.py +0 -0
  31. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/cache_util/cache.py +0 -0
  32. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/cache_util/cachefactory.py +0 -0
  33. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/cache_util/memcache.py +0 -0
  34. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/config.py +0 -0
  35. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/constants.py +0 -0
  36. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/exceptions.py +0 -0
  37. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/__init__.py +0 -0
  38. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/base.py +0 -0
  39. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/geo.py +0 -0
  40. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/jupyter.py +0 -0
  41. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/stylefuncs.py +0 -0
  42. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/tiledict.py +0 -0
  43. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/tileiterator.py +0 -0
  44. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image/tilesource/utilities.py +0 -0
  45. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image.egg-info/dependency_links.txt +0 -0
  46. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image.egg-info/not-zip-safe +0 -0
  47. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/large_image.egg-info/top_level.txt +0 -0
  48. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/setup.cfg +0 -0
  49. {large-image-1.27.5.dev69 → large-image-1.27.5.dev99}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image
3
- Version: 1.27.5.dev69
3
+ Version: 1.27.5.dev99
4
4
  Summary: Python modules to work with large, multiresolution images.
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -0,0 +1,129 @@
1
+ from enum import Enum
2
+ from typing import Dict
3
+
4
+ import numpy as np
5
+ from PIL import Image
6
+
7
+
8
+ class ResampleMethod(Enum):
9
+ PIL_NEAREST = Image.Resampling.NEAREST # 0
10
+ PIL_LANCZOS = Image.Resampling.LANCZOS # 1
11
+ PIL_BILINEAR = Image.Resampling.BILINEAR # 2
12
+ PIL_BICUBIC = Image.Resampling.BICUBIC # 3
13
+ PIL_BOX = Image.Resampling.BOX # 4
14
+ PIL_HAMMING = Image.Resampling.HAMMING # 5
15
+ PIL_MAX_ENUM = 5
16
+ NP_MEAN = 6
17
+ NP_MEDIAN = 7
18
+ NP_MODE = 8
19
+ NP_MAX = 9
20
+ NP_MIN = 10
21
+ NP_NEAREST = 11
22
+ NP_MAX_COLOR = 12
23
+ NP_MIN_COLOR = 13
24
+
25
+
26
+ def pilResize(
27
+ tile: np.ndarray,
28
+ new_shape: Dict,
29
+ resample_method: ResampleMethod,
30
+ ) -> np.ndarray:
31
+ # Only NEAREST works for 16 bit images
32
+ img = Image.fromarray(tile)
33
+ resized_img = img.resize(
34
+ (new_shape['width'], new_shape['height']),
35
+ resample=resample_method.value,
36
+ )
37
+ result = np.array(resized_img).astype(tile.dtype)
38
+ return result
39
+
40
+
41
+ def numpyResize(
42
+ tile: np.ndarray,
43
+ new_shape: Dict,
44
+ resample_method: ResampleMethod,
45
+ ) -> np.ndarray:
46
+ if resample_method == ResampleMethod.NP_NEAREST:
47
+ return tile[::2, ::2]
48
+ else:
49
+ if tile.shape[0] % 2 != 0:
50
+ tile = np.append(tile, np.expand_dims(tile[-1], axis=0), axis=0)
51
+ if tile.shape[1] % 2 != 0:
52
+ tile = np.append(tile, np.expand_dims(tile[:, -1], axis=1), axis=1)
53
+
54
+ pixel_selection = None
55
+ subarrays = np.asarray(
56
+ [
57
+ tile[0::2, 0::2],
58
+ tile[1::2, 0::2],
59
+ tile[0::2, 1::2],
60
+ tile[1::2, 1::2],
61
+ ],
62
+ )
63
+
64
+ if resample_method == ResampleMethod.NP_MEAN:
65
+ return np.mean(subarrays, axis=0).astype(tile.dtype)
66
+ elif resample_method == ResampleMethod.NP_MEDIAN:
67
+ return np.median(subarrays, axis=0).astype(tile.dtype)
68
+ elif resample_method == ResampleMethod.NP_MAX:
69
+ return np.max(subarrays, axis=0).astype(tile.dtype)
70
+ elif resample_method == ResampleMethod.NP_MIN:
71
+ return np.min(subarrays, axis=0).astype(tile.dtype)
72
+ elif resample_method == ResampleMethod.NP_MAX_COLOR:
73
+ summed = np.sum(subarrays, axis=3)
74
+ pixel_selection = np.argmax(summed, axis=0)
75
+ elif resample_method == ResampleMethod.NP_MIN_COLOR:
76
+ summed = np.sum(subarrays, axis=3)
77
+ pixel_selection = np.argmin(summed, axis=0)
78
+ elif resample_method == ResampleMethod.NP_MODE:
79
+ # if a pixel occurs twice in a set of four, it is a mode
80
+ # if no mode, default to pixel 0. check for minimal matches 1=2, 1=3, 2=3
81
+ pixel_selection = np.where(
82
+ (
83
+ (subarrays[1] == subarrays[2]).all(axis=2) |
84
+ (subarrays[1] == subarrays[3]).all(axis=2)
85
+ ),
86
+ 1, np.where(
87
+ (subarrays[2] == subarrays[3]).all(axis=2),
88
+ 2, 0,
89
+ ),
90
+ )
91
+
92
+ if pixel_selection is not None:
93
+ if len(tile.shape) > 2:
94
+ pixel_selection = np.expand_dims(pixel_selection, axis=2)
95
+ pixel_selection = np.repeat(pixel_selection, tile.shape[2], axis=2)
96
+ return np.choose(pixel_selection, subarrays).astype(tile.dtype)
97
+ else:
98
+ msg = f'Unknown resample method {resample_method}.'
99
+ raise ValueError(msg)
100
+
101
+
102
+ def downsampleTileHalfRes(
103
+ tile: np.ndarray,
104
+ resample_method: ResampleMethod,
105
+ ) -> np.ndarray:
106
+ new_shape = {
107
+ 'height': (tile.shape[0] + 1) // 2,
108
+ 'width': (tile.shape[1] + 1) // 2,
109
+ 'bands': 1,
110
+ }
111
+ if len(tile.shape) > 2:
112
+ new_shape['bands'] = tile.shape[-1]
113
+ if resample_method.value <= ResampleMethod.PIL_MAX_ENUM.value:
114
+ if new_shape['bands'] > 4:
115
+ result = np.empty(
116
+ (new_shape['height'], new_shape['width'], new_shape['bands']),
117
+ dtype=tile.dtype,
118
+ )
119
+ for band_index in range(new_shape['bands']):
120
+ result[(..., band_index)] = pilResize(
121
+ tile[(..., band_index)],
122
+ new_shape,
123
+ resample_method,
124
+ )
125
+ return result
126
+ else:
127
+ return pilResize(tile, new_shape, resample_method)
128
+ else:
129
+ return numpyResize(tile, new_shape, resample_method)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image
3
- Version: 1.27.5.dev69
3
+ Version: 1.27.5.dev99
4
4
  Summary: Python modules to work with large, multiresolution images.
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -39,6 +39,7 @@ large_image/tilesource/__init__.py
39
39
  large_image/tilesource/base.py
40
40
  large_image/tilesource/geo.py
41
41
  large_image/tilesource/jupyter.py
42
+ large_image/tilesource/resample.py
42
43
  large_image/tilesource/stylefuncs.py
43
44
  large_image/tilesource/tiledict.py
44
45
  large_image/tilesource/tileiterator.py
@@ -0,0 +1,145 @@
1
+ cachetools
2
+ palettable
3
+ Pillow
4
+ numpy
5
+ typing-extensions
6
+
7
+ [all]
8
+ large-image-source-mapnik>=1.27.5.dev99
9
+ large-image-source-rasterio>=1.27.5.dev99
10
+ large-image-source-deepzoom>=1.27.5.dev99
11
+ psutil>=4.2.0
12
+ matplotlib
13
+ large-image-source-multi[all]>=1.27.5.dev99
14
+ large-image-source-dummy>=1.27.5.dev99
15
+ large-image-source-vips>=1.27.5.dev99
16
+ large-image-source-gdal>=1.27.5.dev99
17
+ simplejpeg
18
+ large-image-converter>=1.27.5.dev99
19
+ pyvips
20
+ large-image-source-test>=1.27.5.dev99
21
+ large-image-source-multi>=1.27.5.dev99
22
+ large-image-source-openslide>=1.27.5.dev99
23
+ large-image-source-tifffile>=1.27.5.dev99
24
+ large-image-source-ometiff>=1.27.5.dev99
25
+ large-image-source-pil[all]>=1.27.5.dev99
26
+ large-image-source-rasterio[all]>=1.27.5.dev99
27
+ large-image-source-bioformats>=1.27.5.dev99
28
+ large-image-source-zarr>=1.27.5.dev99
29
+ large-image-source-nd2>=1.27.5.dev99
30
+ large-image-source-dicom>=1.27.5.dev99
31
+ large-image-source-openjpeg>=1.27.5.dev99
32
+ large-image-source-tiff>=1.27.5.dev99
33
+ large-image-source-pil>=1.27.5.dev99
34
+
35
+ [all:platform_system != "Windows"]
36
+ pylibmc>=1.5.1
37
+
38
+ [bioformats]
39
+ large-image-source-bioformats>=1.27.5.dev99
40
+
41
+ [colormaps]
42
+ matplotlib
43
+
44
+ [common]
45
+ large-image-source-test>=1.27.5.dev99
46
+ large-image-source-multi>=1.27.5.dev99
47
+ large-image-source-pil[all]>=1.27.5.dev99
48
+ large-image-source-tifffile>=1.27.5.dev99
49
+ large-image-source-rasterio[all]>=1.27.5.dev99
50
+ large-image-source-zarr>=1.27.5.dev99
51
+ large-image-source-nd2>=1.27.5.dev99
52
+ large-image-source-dicom>=1.27.5.dev99
53
+ large-image-source-deepzoom>=1.27.5.dev99
54
+ psutil>=4.2.0
55
+ matplotlib
56
+ simplejpeg
57
+
58
+ [common:platform_system != "Windows"]
59
+ pylibmc>=1.5.1
60
+
61
+ [converter]
62
+ large-image-converter>=1.27.5.dev99
63
+
64
+ [deepzoom]
65
+ large-image-source-deepzoom>=1.27.5.dev99
66
+
67
+ [dicom]
68
+ large-image-source-dicom>=1.27.5.dev99
69
+
70
+ [dummy]
71
+ large-image-source-dummy>=1.27.5.dev99
72
+
73
+ [gdal]
74
+ large-image-source-gdal>=1.27.5.dev99
75
+
76
+ [mapnik]
77
+ large-image-source-mapnik>=1.27.5.dev99
78
+
79
+ [memcached]
80
+
81
+ [memcached:platform_system != "Windows"]
82
+ pylibmc>=1.5.1
83
+
84
+ [multi]
85
+ large-image-source-multi>=1.27.5.dev99
86
+
87
+ [nd2]
88
+ large-image-source-nd2>=1.27.5.dev99
89
+
90
+ [ometiff]
91
+ large-image-source-ometiff>=1.27.5.dev99
92
+
93
+ [openjpeg]
94
+ large-image-source-openjpeg>=1.27.5.dev99
95
+
96
+ [openslide]
97
+ large-image-source-openslide>=1.27.5.dev99
98
+
99
+ [performance]
100
+ psutil>=4.2.0
101
+ simplejpeg
102
+
103
+ [pil]
104
+ large-image-source-pil>=1.27.5.dev99
105
+
106
+ [rasterio]
107
+ large-image-source-rasterio>=1.27.5.dev99
108
+
109
+ [sources]
110
+ large-image-source-openjpeg>=1.27.5.dev99
111
+ large-image-source-vips>=1.27.5.dev99
112
+ large-image-source-test>=1.27.5.dev99
113
+ large-image-source-mapnik>=1.27.5.dev99
114
+ large-image-source-multi>=1.27.5.dev99
115
+ large-image-source-ometiff>=1.27.5.dev99
116
+ large-image-source-openslide>=1.27.5.dev99
117
+ large-image-source-tiff>=1.27.5.dev99
118
+ large-image-source-tifffile>=1.27.5.dev99
119
+ large-image-source-bioformats>=1.27.5.dev99
120
+ large-image-source-zarr>=1.27.5.dev99
121
+ large-image-source-rasterio>=1.27.5.dev99
122
+ large-image-source-deepzoom>=1.27.5.dev99
123
+ large-image-source-dicom>=1.27.5.dev99
124
+ large-image-source-nd2>=1.27.5.dev99
125
+ large-image-source-dummy>=1.27.5.dev99
126
+ large-image-source-gdal>=1.27.5.dev99
127
+ large-image-source-pil>=1.27.5.dev99
128
+
129
+ [test]
130
+ large-image-source-test>=1.27.5.dev99
131
+
132
+ [tiff]
133
+ large-image-source-tiff>=1.27.5.dev99
134
+
135
+ [tifffile]
136
+ large-image-source-tifffile>=1.27.5.dev99
137
+
138
+ [tiledoutput]
139
+ pyvips
140
+
141
+ [vips]
142
+ large-image-source-vips>=1.27.5.dev99
143
+
144
+ [zarr]
145
+ large-image-source-zarr>=1.27.5.dev99
@@ -1,145 +0,0 @@
1
- cachetools
2
- palettable
3
- Pillow
4
- numpy
5
- typing-extensions
6
-
7
- [all]
8
- large-image-source-mapnik>=1.27.5.dev69
9
- psutil>=4.2.0
10
- large-image-source-vips>=1.27.5.dev69
11
- large-image-source-pil[all]>=1.27.5.dev69
12
- large-image-source-rasterio[all]>=1.27.5.dev69
13
- large-image-source-multi[all]>=1.27.5.dev69
14
- large-image-source-dicom>=1.27.5.dev69
15
- large-image-source-rasterio>=1.27.5.dev69
16
- matplotlib
17
- large-image-source-pil>=1.27.5.dev69
18
- large-image-source-test>=1.27.5.dev69
19
- large-image-source-nd2>=1.27.5.dev69
20
- large-image-source-tiff>=1.27.5.dev69
21
- large-image-converter>=1.27.5.dev69
22
- pyvips
23
- large-image-source-ometiff>=1.27.5.dev69
24
- large-image-source-deepzoom>=1.27.5.dev69
25
- large-image-source-openslide>=1.27.5.dev69
26
- large-image-source-bioformats>=1.27.5.dev69
27
- large-image-source-zarr>=1.27.5.dev69
28
- simplejpeg
29
- large-image-source-dummy>=1.27.5.dev69
30
- large-image-source-multi>=1.27.5.dev69
31
- large-image-source-gdal>=1.27.5.dev69
32
- large-image-source-openjpeg>=1.27.5.dev69
33
- large-image-source-tifffile>=1.27.5.dev69
34
-
35
- [all:platform_system != "Windows"]
36
- pylibmc>=1.5.1
37
-
38
- [bioformats]
39
- large-image-source-bioformats>=1.27.5.dev69
40
-
41
- [colormaps]
42
- matplotlib
43
-
44
- [common]
45
- psutil>=4.2.0
46
- large-image-source-deepzoom>=1.27.5.dev69
47
- large-image-source-test>=1.27.5.dev69
48
- large-image-source-pil[all]>=1.27.5.dev69
49
- large-image-source-rasterio[all]>=1.27.5.dev69
50
- large-image-source-dicom>=1.27.5.dev69
51
- large-image-source-zarr>=1.27.5.dev69
52
- simplejpeg
53
- matplotlib
54
- large-image-source-multi>=1.27.5.dev69
55
- large-image-source-nd2>=1.27.5.dev69
56
- large-image-source-tifffile>=1.27.5.dev69
57
-
58
- [common:platform_system != "Windows"]
59
- pylibmc>=1.5.1
60
-
61
- [converter]
62
- large-image-converter>=1.27.5.dev69
63
-
64
- [deepzoom]
65
- large-image-source-deepzoom>=1.27.5.dev69
66
-
67
- [dicom]
68
- large-image-source-dicom>=1.27.5.dev69
69
-
70
- [dummy]
71
- large-image-source-dummy>=1.27.5.dev69
72
-
73
- [gdal]
74
- large-image-source-gdal>=1.27.5.dev69
75
-
76
- [mapnik]
77
- large-image-source-mapnik>=1.27.5.dev69
78
-
79
- [memcached]
80
-
81
- [memcached:platform_system != "Windows"]
82
- pylibmc>=1.5.1
83
-
84
- [multi]
85
- large-image-source-multi>=1.27.5.dev69
86
-
87
- [nd2]
88
- large-image-source-nd2>=1.27.5.dev69
89
-
90
- [ometiff]
91
- large-image-source-ometiff>=1.27.5.dev69
92
-
93
- [openjpeg]
94
- large-image-source-openjpeg>=1.27.5.dev69
95
-
96
- [openslide]
97
- large-image-source-openslide>=1.27.5.dev69
98
-
99
- [performance]
100
- psutil>=4.2.0
101
- simplejpeg
102
-
103
- [pil]
104
- large-image-source-pil>=1.27.5.dev69
105
-
106
- [rasterio]
107
- large-image-source-rasterio>=1.27.5.dev69
108
-
109
- [sources]
110
- large-image-source-mapnik>=1.27.5.dev69
111
- large-image-source-vips>=1.27.5.dev69
112
- large-image-source-ometiff>=1.27.5.dev69
113
- large-image-source-deepzoom>=1.27.5.dev69
114
- large-image-source-test>=1.27.5.dev69
115
- large-image-source-tiff>=1.27.5.dev69
116
- large-image-source-openslide>=1.27.5.dev69
117
- large-image-source-dicom>=1.27.5.dev69
118
- large-image-source-bioformats>=1.27.5.dev69
119
- large-image-source-rasterio>=1.27.5.dev69
120
- large-image-source-zarr>=1.27.5.dev69
121
- large-image-source-dummy>=1.27.5.dev69
122
- large-image-source-pil>=1.27.5.dev69
123
- large-image-source-multi>=1.27.5.dev69
124
- large-image-source-nd2>=1.27.5.dev69
125
- large-image-source-gdal>=1.27.5.dev69
126
- large-image-source-openjpeg>=1.27.5.dev69
127
- large-image-source-tifffile>=1.27.5.dev69
128
-
129
- [test]
130
- large-image-source-test>=1.27.5.dev69
131
-
132
- [tiff]
133
- large-image-source-tiff>=1.27.5.dev69
134
-
135
- [tifffile]
136
- large-image-source-tifffile>=1.27.5.dev69
137
-
138
- [tiledoutput]
139
- pyvips
140
-
141
- [vips]
142
- large-image-source-vips>=1.27.5.dev69
143
-
144
- [zarr]
145
- large-image-source-zarr>=1.27.5.dev69