large-image 1.27.5.dev71__tar.gz → 1.27.5.dev100__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.dev71/large_image.egg-info → large-image-1.27.5.dev100}/PKG-INFO +1 -1
  2. large-image-1.27.5.dev100/large_image/tilesource/resample.py +129 -0
  3. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100/large_image.egg-info}/PKG-INFO +1 -1
  4. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image.egg-info/SOURCES.txt +1 -0
  5. large-image-1.27.5.dev100/large_image.egg-info/requires.txt +145 -0
  6. large-image-1.27.5.dev71/large_image.egg-info/requires.txt +0 -145
  7. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/LICENSE +0 -0
  8. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/NOTICE +0 -0
  9. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/README.rst +0 -0
  10. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/annotations.rst +0 -0
  11. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/caching.rst +0 -0
  12. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/conf.py +0 -0
  13. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/config_options.rst +0 -0
  14. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/development.rst +0 -0
  15. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/example_usage.rst +0 -0
  16. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/formats.rst +0 -0
  17. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/girder_annotation_config_options.rst +0 -0
  18. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/girder_config_options.rst +0 -0
  19. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/image_conversion.rst +0 -0
  20. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/index.rst +0 -0
  21. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/large_image_examples.ipynb +0 -0
  22. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/make_docs.sh +0 -0
  23. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/multi_source_specification.rst +0 -0
  24. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/notebooks.rst +0 -0
  25. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/static/custom.css +0 -0
  26. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/tilesource_options.rst +0 -0
  27. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/docs/upgrade.rst +0 -0
  28. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/__init__.py +0 -0
  29. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/cache_util/__init__.py +0 -0
  30. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/cache_util/base.py +0 -0
  31. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/cache_util/cache.py +0 -0
  32. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/cache_util/cachefactory.py +0 -0
  33. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/cache_util/memcache.py +0 -0
  34. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/config.py +0 -0
  35. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/constants.py +0 -0
  36. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/exceptions.py +0 -0
  37. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/__init__.py +0 -0
  38. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/base.py +0 -0
  39. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/geo.py +0 -0
  40. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/jupyter.py +0 -0
  41. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/stylefuncs.py +0 -0
  42. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/tiledict.py +0 -0
  43. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/tileiterator.py +0 -0
  44. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image/tilesource/utilities.py +0 -0
  45. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image.egg-info/dependency_links.txt +0 -0
  46. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image.egg-info/not-zip-safe +0 -0
  47. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/large_image.egg-info/top_level.txt +0 -0
  48. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/setup.cfg +0 -0
  49. {large-image-1.27.5.dev71 → large-image-1.27.5.dev100}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image
3
- Version: 1.27.5.dev71
3
+ Version: 1.27.5.dev100
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.dev71
3
+ Version: 1.27.5.dev100
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-pil[all]>=1.27.5.dev100
9
+ large-image-source-openjpeg>=1.27.5.dev100
10
+ large-image-source-ometiff>=1.27.5.dev100
11
+ large-image-source-rasterio[all]>=1.27.5.dev100
12
+ large-image-source-dummy>=1.27.5.dev100
13
+ pyvips
14
+ simplejpeg
15
+ large-image-source-mapnik>=1.27.5.dev100
16
+ large-image-source-test>=1.27.5.dev100
17
+ psutil>=4.2.0
18
+ large-image-source-zarr>=1.27.5.dev100
19
+ large-image-source-rasterio>=1.27.5.dev100
20
+ large-image-source-nd2>=1.27.5.dev100
21
+ large-image-source-gdal>=1.27.5.dev100
22
+ large-image-source-deepzoom>=1.27.5.dev100
23
+ large-image-source-multi>=1.27.5.dev100
24
+ large-image-source-tifffile>=1.27.5.dev100
25
+ large-image-source-openslide>=1.27.5.dev100
26
+ large-image-converter>=1.27.5.dev100
27
+ large-image-source-vips>=1.27.5.dev100
28
+ matplotlib
29
+ large-image-source-bioformats>=1.27.5.dev100
30
+ large-image-source-dicom>=1.27.5.dev100
31
+ large-image-source-tiff>=1.27.5.dev100
32
+ large-image-source-multi[all]>=1.27.5.dev100
33
+ large-image-source-pil>=1.27.5.dev100
34
+
35
+ [all:platform_system != "Windows"]
36
+ pylibmc>=1.5.1
37
+
38
+ [bioformats]
39
+ large-image-source-bioformats>=1.27.5.dev100
40
+
41
+ [colormaps]
42
+ matplotlib
43
+
44
+ [common]
45
+ psutil>=4.2.0
46
+ large-image-source-zarr>=1.27.5.dev100
47
+ large-image-source-pil[all]>=1.27.5.dev100
48
+ large-image-source-nd2>=1.27.5.dev100
49
+ large-image-source-deepzoom>=1.27.5.dev100
50
+ large-image-source-rasterio[all]>=1.27.5.dev100
51
+ large-image-source-multi>=1.27.5.dev100
52
+ large-image-source-tifffile>=1.27.5.dev100
53
+ simplejpeg
54
+ matplotlib
55
+ large-image-source-dicom>=1.27.5.dev100
56
+ large-image-source-test>=1.27.5.dev100
57
+
58
+ [common:platform_system != "Windows"]
59
+ pylibmc>=1.5.1
60
+
61
+ [converter]
62
+ large-image-converter>=1.27.5.dev100
63
+
64
+ [deepzoom]
65
+ large-image-source-deepzoom>=1.27.5.dev100
66
+
67
+ [dicom]
68
+ large-image-source-dicom>=1.27.5.dev100
69
+
70
+ [dummy]
71
+ large-image-source-dummy>=1.27.5.dev100
72
+
73
+ [gdal]
74
+ large-image-source-gdal>=1.27.5.dev100
75
+
76
+ [mapnik]
77
+ large-image-source-mapnik>=1.27.5.dev100
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.dev100
86
+
87
+ [nd2]
88
+ large-image-source-nd2>=1.27.5.dev100
89
+
90
+ [ometiff]
91
+ large-image-source-ometiff>=1.27.5.dev100
92
+
93
+ [openjpeg]
94
+ large-image-source-openjpeg>=1.27.5.dev100
95
+
96
+ [openslide]
97
+ large-image-source-openslide>=1.27.5.dev100
98
+
99
+ [performance]
100
+ psutil>=4.2.0
101
+ simplejpeg
102
+
103
+ [pil]
104
+ large-image-source-pil>=1.27.5.dev100
105
+
106
+ [rasterio]
107
+ large-image-source-rasterio>=1.27.5.dev100
108
+
109
+ [sources]
110
+ large-image-source-zarr>=1.27.5.dev100
111
+ large-image-source-openjpeg>=1.27.5.dev100
112
+ large-image-source-nd2>=1.27.5.dev100
113
+ large-image-source-rasterio>=1.27.5.dev100
114
+ large-image-source-gdal>=1.27.5.dev100
115
+ large-image-source-ometiff>=1.27.5.dev100
116
+ large-image-source-deepzoom>=1.27.5.dev100
117
+ large-image-source-multi>=1.27.5.dev100
118
+ large-image-source-test>=1.27.5.dev100
119
+ large-image-source-dummy>=1.27.5.dev100
120
+ large-image-source-openslide>=1.27.5.dev100
121
+ large-image-source-tifffile>=1.27.5.dev100
122
+ large-image-source-vips>=1.27.5.dev100
123
+ large-image-source-mapnik>=1.27.5.dev100
124
+ large-image-source-bioformats>=1.27.5.dev100
125
+ large-image-source-dicom>=1.27.5.dev100
126
+ large-image-source-tiff>=1.27.5.dev100
127
+ large-image-source-pil>=1.27.5.dev100
128
+
129
+ [test]
130
+ large-image-source-test>=1.27.5.dev100
131
+
132
+ [tiff]
133
+ large-image-source-tiff>=1.27.5.dev100
134
+
135
+ [tifffile]
136
+ large-image-source-tifffile>=1.27.5.dev100
137
+
138
+ [tiledoutput]
139
+ pyvips
140
+
141
+ [vips]
142
+ large-image-source-vips>=1.27.5.dev100
143
+
144
+ [zarr]
145
+ large-image-source-zarr>=1.27.5.dev100
@@ -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.dev71
9
- psutil>=4.2.0
10
- large-image-source-dicom>=1.27.5.dev71
11
- large-image-source-zarr>=1.27.5.dev71
12
- large-image-source-pil[all]>=1.27.5.dev71
13
- large-image-source-tiff>=1.27.5.dev71
14
- large-image-source-dummy>=1.27.5.dev71
15
- large-image-source-rasterio>=1.27.5.dev71
16
- large-image-converter>=1.27.5.dev71
17
- large-image-source-pil>=1.27.5.dev71
18
- matplotlib
19
- large-image-source-bioformats>=1.27.5.dev71
20
- large-image-source-openslide>=1.27.5.dev71
21
- large-image-source-test>=1.27.5.dev71
22
- large-image-source-nd2>=1.27.5.dev71
23
- large-image-source-gdal>=1.27.5.dev71
24
- large-image-source-multi[all]>=1.27.5.dev71
25
- simplejpeg
26
- large-image-source-openjpeg>=1.27.5.dev71
27
- large-image-source-tifffile>=1.27.5.dev71
28
- large-image-source-rasterio[all]>=1.27.5.dev71
29
- large-image-source-multi>=1.27.5.dev71
30
- pyvips
31
- large-image-source-deepzoom>=1.27.5.dev71
32
- large-image-source-ometiff>=1.27.5.dev71
33
- large-image-source-vips>=1.27.5.dev71
34
-
35
- [all:platform_system != "Windows"]
36
- pylibmc>=1.5.1
37
-
38
- [bioformats]
39
- large-image-source-bioformats>=1.27.5.dev71
40
-
41
- [colormaps]
42
- matplotlib
43
-
44
- [common]
45
- large-image-source-nd2>=1.27.5.dev71
46
- psutil>=4.2.0
47
- large-image-source-dicom>=1.27.5.dev71
48
- large-image-source-zarr>=1.27.5.dev71
49
- simplejpeg
50
- large-image-source-tifffile>=1.27.5.dev71
51
- large-image-source-pil[all]>=1.27.5.dev71
52
- large-image-source-rasterio[all]>=1.27.5.dev71
53
- large-image-source-multi>=1.27.5.dev71
54
- matplotlib
55
- large-image-source-deepzoom>=1.27.5.dev71
56
- large-image-source-test>=1.27.5.dev71
57
-
58
- [common:platform_system != "Windows"]
59
- pylibmc>=1.5.1
60
-
61
- [converter]
62
- large-image-converter>=1.27.5.dev71
63
-
64
- [deepzoom]
65
- large-image-source-deepzoom>=1.27.5.dev71
66
-
67
- [dicom]
68
- large-image-source-dicom>=1.27.5.dev71
69
-
70
- [dummy]
71
- large-image-source-dummy>=1.27.5.dev71
72
-
73
- [gdal]
74
- large-image-source-gdal>=1.27.5.dev71
75
-
76
- [mapnik]
77
- large-image-source-mapnik>=1.27.5.dev71
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.dev71
86
-
87
- [nd2]
88
- large-image-source-nd2>=1.27.5.dev71
89
-
90
- [ometiff]
91
- large-image-source-ometiff>=1.27.5.dev71
92
-
93
- [openjpeg]
94
- large-image-source-openjpeg>=1.27.5.dev71
95
-
96
- [openslide]
97
- large-image-source-openslide>=1.27.5.dev71
98
-
99
- [performance]
100
- psutil>=4.2.0
101
- simplejpeg
102
-
103
- [pil]
104
- large-image-source-pil>=1.27.5.dev71
105
-
106
- [rasterio]
107
- large-image-source-rasterio>=1.27.5.dev71
108
-
109
- [sources]
110
- large-image-source-nd2>=1.27.5.dev71
111
- large-image-source-mapnik>=1.27.5.dev71
112
- large-image-source-gdal>=1.27.5.dev71
113
- large-image-source-dicom>=1.27.5.dev71
114
- large-image-source-zarr>=1.27.5.dev71
115
- large-image-source-test>=1.27.5.dev71
116
- large-image-source-openjpeg>=1.27.5.dev71
117
- large-image-source-tiff>=1.27.5.dev71
118
- large-image-source-dummy>=1.27.5.dev71
119
- large-image-source-rasterio>=1.27.5.dev71
120
- large-image-source-multi>=1.27.5.dev71
121
- large-image-source-tifffile>=1.27.5.dev71
122
- large-image-source-pil>=1.27.5.dev71
123
- large-image-source-bioformats>=1.27.5.dev71
124
- large-image-source-openslide>=1.27.5.dev71
125
- large-image-source-deepzoom>=1.27.5.dev71
126
- large-image-source-ometiff>=1.27.5.dev71
127
- large-image-source-vips>=1.27.5.dev71
128
-
129
- [test]
130
- large-image-source-test>=1.27.5.dev71
131
-
132
- [tiff]
133
- large-image-source-tiff>=1.27.5.dev71
134
-
135
- [tifffile]
136
- large-image-source-tifffile>=1.27.5.dev71
137
-
138
- [tiledoutput]
139
- pyvips
140
-
141
- [vips]
142
- large-image-source-vips>=1.27.5.dev71
143
-
144
- [zarr]
145
- large-image-source-zarr>=1.27.5.dev71