dicube 0.1.4__cp311-cp311-win_amd64.whl → 0.2.0__cp311-cp311-win_amd64.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.
- dicube/__init__.py +49 -15
- dicube/codecs/jph/ojph_complete.cp310-win32.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp310-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp311-win32.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp311-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp38-win32.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp38-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp39-win32.pyd +0 -0
- dicube/codecs/jph/ojph_complete.cp39-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp310-win32.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp310-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp311-win32.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp311-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp38-win32.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp38-win_amd64.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp39-win32.pyd +0 -0
- dicube/codecs/jph/ojph_decode_complete.cp39-win_amd64.pyd +0 -0
- dicube/core/image.py +6 -6
- dicube/core/io.py +69 -21
- dicube/core/pixel_header.py +50 -47
- dicube/dicom/dcb_streaming.py +56 -58
- dicube/dicom/dicom_io.py +16 -16
- dicube/storage/dcb_file.py +68 -49
- dicube/storage/pixel_utils.py +151 -33
- {dicube-0.1.4.dist-info → dicube-0.2.0.dist-info}/METADATA +1 -1
- dicube-0.2.0.dist-info/RECORD +41 -0
- dicube-0.1.4.dist-info/RECORD +0 -41
- {dicube-0.1.4.dist-info → dicube-0.2.0.dist-info}/WHEEL +0 -0
dicube/storage/pixel_utils.py
CHANGED
@@ -31,37 +31,37 @@ def derive_pixel_header_from_array(
|
|
31
31
|
dtype = str(image.dtype)
|
32
32
|
if image.dtype in (np.uint16, np.uint8, np.uint32):
|
33
33
|
return image, PixelDataHeader(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
RescaleSlope=1,
|
35
|
+
RescaleIntercept=0,
|
36
|
+
PixelDtype=dtype,
|
37
|
+
OriginalPixelDtype=dtype,
|
38
38
|
)
|
39
39
|
elif image.dtype == np.int16:
|
40
40
|
min_val = int(np.min(image))
|
41
41
|
image = (image - min_val).astype("uint16")
|
42
42
|
return image, PixelDataHeader(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
RescaleSlope=1,
|
44
|
+
RescaleIntercept=min_val,
|
45
|
+
PixelDtype="uint16",
|
46
|
+
OriginalPixelDtype=dtype,
|
47
47
|
)
|
48
48
|
elif image.dtype == np.int8:
|
49
49
|
min_val = int(np.min(image))
|
50
50
|
image = (image - min_val).astype("uint8")
|
51
51
|
return image, PixelDataHeader(
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
RescaleSlope=1,
|
53
|
+
RescaleIntercept=min_val,
|
54
|
+
PixelDtype="uint8",
|
55
|
+
OriginalPixelDtype=dtype,
|
56
56
|
)
|
57
57
|
elif image.dtype == np.int32:
|
58
58
|
min_val = int(np.min(image))
|
59
59
|
image = (image - min_val).astype("uint32")
|
60
60
|
return image, PixelDataHeader(
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
RescaleSlope=1,
|
62
|
+
RescaleIntercept=min_val,
|
63
|
+
PixelDtype="uint32",
|
64
|
+
OriginalPixelDtype=dtype,
|
65
65
|
)
|
66
66
|
elif image.dtype in (np.float16, np.float32, np.float64):
|
67
67
|
if preferred_dtype == "uint8":
|
@@ -78,10 +78,10 @@ def derive_pixel_header_from_array(
|
|
78
78
|
# Set all pixels to 0, slope=0, intercept=min_val
|
79
79
|
# When reading back: i*slope+intercept = min_val
|
80
80
|
header = PixelDataHeader(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
81
|
+
RescaleSlope=1.0,
|
82
|
+
RescaleIntercept=float(min_val),
|
83
|
+
PixelDtype=preferred_dtype,
|
84
|
+
OriginalPixelDtype=dtype,
|
85
85
|
)
|
86
86
|
raw_image = np.zeros_like(image, dtype=preferred_dtype)
|
87
87
|
return raw_image, header
|
@@ -92,12 +92,12 @@ def derive_pixel_header_from_array(
|
|
92
92
|
preferred_dtype
|
93
93
|
)
|
94
94
|
header = PixelDataHeader(
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
95
|
+
RescaleSlope=slope,
|
96
|
+
RescaleIntercept=intercept,
|
97
|
+
PixelDtype=preferred_dtype,
|
98
|
+
OriginalPixelDtype=dtype,
|
99
|
+
MaxVal=max_val,
|
100
|
+
MinVal=min_val,
|
101
101
|
)
|
102
102
|
return raw_image, header
|
103
103
|
else:
|
@@ -132,10 +132,128 @@ def get_float_data(
|
|
132
132
|
|
133
133
|
# Note: Output may be positive or negative depending on original dtype and slope/intercept
|
134
134
|
output_img = raw_image.astype(dtype)
|
135
|
-
if pixel_header.
|
136
|
-
slope = np.array(pixel_header.
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
135
|
+
if pixel_header.RescaleSlope is not None:
|
136
|
+
slope = np.array(pixel_header.RescaleSlope).astype(dtype)
|
137
|
+
if slope != 1.0:
|
138
|
+
output_img *= slope
|
139
|
+
if pixel_header.RescaleIntercept is not None:
|
140
|
+
intercept = np.array(pixel_header.RescaleIntercept).astype(dtype)
|
141
|
+
if intercept != 0.0:
|
142
|
+
output_img += intercept
|
143
|
+
return output_img
|
144
|
+
|
145
|
+
|
146
|
+
def determine_optimal_nifti_dtype(
|
147
|
+
image: np.ndarray, pixel_header: PixelDataHeader
|
148
|
+
) -> Tuple[np.ndarray, str]:
|
149
|
+
"""Determine the optimal data type for saving to NIfTI and return the converted data.
|
150
|
+
|
151
|
+
This function selects the most appropriate data type for NIfTI export based on the value range
|
152
|
+
of the raw image and the rescale slope/intercept. It minimizes unnecessary data conversion and
|
153
|
+
only applies scaling or offset if needed.
|
154
|
+
|
155
|
+
Args:
|
156
|
+
image (np.ndarray): The raw image data (integer type guaranteed).
|
157
|
+
pixel_header (PixelDataHeader): Pixel header containing rescale information.
|
158
|
+
|
159
|
+
Returns:
|
160
|
+
Tuple[np.ndarray, str]:
|
161
|
+
- The image data converted to the optimal type for NIfTI export.
|
162
|
+
- The name of the chosen data type as a string.
|
163
|
+
|
164
|
+
Raises:
|
165
|
+
ValueError: If the data cannot be represented in any supported NIfTI type.
|
166
|
+
|
167
|
+
Example:
|
168
|
+
>>> arr = np.array([0, 100, 200], dtype=np.uint16)
|
169
|
+
>>> header = PixelDataHeader(RescaleSlope=1.0, RescaleIntercept=0.0, OriginalPixelDtype="uint16", PixelDtype="uint16")
|
170
|
+
>>> data, dtype_name = determine_optimal_nifti_dtype(arr, header)
|
171
|
+
>>> print(data.dtype, dtype_name)
|
172
|
+
uint8 uint8
|
173
|
+
"""
|
174
|
+
# 获取slope和intercept
|
175
|
+
slope = pixel_header.RescaleSlope if pixel_header.RescaleSlope is not None else 1.0
|
176
|
+
intercept = pixel_header.RescaleIntercept if pixel_header.RescaleIntercept is not None else 0.0
|
177
|
+
|
178
|
+
# 直接从原始数据计算值域
|
179
|
+
raw_min = float(image.min())
|
180
|
+
raw_max = float(image.max())
|
181
|
+
|
182
|
+
# 计算应用slope和intercept后的值域
|
183
|
+
min_val = raw_min * slope + intercept
|
184
|
+
max_val = raw_max * slope + intercept
|
185
|
+
|
186
|
+
# 如果斜率为负,需要交换min和max
|
187
|
+
if slope < 0:
|
188
|
+
min_val, max_val = max_val, min_val
|
189
|
+
|
190
|
+
# 检查原始数据类型
|
191
|
+
original_dtype = pixel_header.OriginalPixelDtype
|
192
|
+
is_signed_original = original_dtype in ("int8", "int16", "int32", "int64")
|
193
|
+
|
194
|
+
# 检查slope和intercept是否为整数值
|
195
|
+
has_integer_transform = (
|
196
|
+
np.isclose(slope % 1, 0) and
|
197
|
+
np.isclose(intercept % 1, 0)
|
198
|
+
)
|
199
|
+
|
200
|
+
# 准备最终数据 - 仅在确定dtype后执行一次转换
|
201
|
+
result_dtype = None
|
202
|
+
result_dtype_name = None
|
203
|
+
|
204
|
+
# 如果slope和intercept都是整数,则可以使用整数类型
|
205
|
+
if has_integer_transform:
|
206
|
+
# 尊重原始数据类型的符号属性
|
207
|
+
if is_signed_original or min_val < 0:
|
208
|
+
# 有符号整数
|
209
|
+
if min_val >= -128 and max_val <= 127:
|
210
|
+
result_dtype = np.int8
|
211
|
+
result_dtype_name = "int8"
|
212
|
+
elif min_val >= -32768 and max_val <= 32767:
|
213
|
+
result_dtype = np.int16
|
214
|
+
result_dtype_name = "int16"
|
215
|
+
elif min_val >= -2147483648 and max_val <= 2147483647:
|
216
|
+
result_dtype = np.int32
|
217
|
+
result_dtype_name = "int32"
|
218
|
+
elif max_val <= 2147483647: # 值域在int32范围内,但原始类型是int32
|
219
|
+
result_dtype = np.int32
|
220
|
+
result_dtype_name = "int32"
|
221
|
+
else:
|
222
|
+
# 无符号整数
|
223
|
+
if max_val <= 255:
|
224
|
+
result_dtype = np.uint8
|
225
|
+
result_dtype_name = "uint8"
|
226
|
+
elif max_val <= 65535:
|
227
|
+
result_dtype = np.uint16
|
228
|
+
result_dtype_name = "uint16"
|
229
|
+
elif max_val <= 4294967295:
|
230
|
+
result_dtype = np.uint32
|
231
|
+
result_dtype_name = "uint32"
|
232
|
+
|
233
|
+
# 如果没有找到合适的整数类型,使用浮点类型
|
234
|
+
if result_dtype is None:
|
235
|
+
if np.issubdtype(image.dtype, np.float64) or min_val < -3.4e38 or max_val > 3.4e38:
|
236
|
+
result_dtype = np.float64
|
237
|
+
result_dtype_name = "float64"
|
238
|
+
else:
|
239
|
+
result_dtype = np.float32
|
240
|
+
result_dtype_name = "float32"
|
241
|
+
|
242
|
+
if has_integer_transform:
|
243
|
+
intercept = int(intercept)
|
244
|
+
else:
|
245
|
+
intercept = np.array(intercept,dtype=result_dtype)
|
246
|
+
|
247
|
+
if slope == 1.0:
|
248
|
+
# 只要加法
|
249
|
+
return image.astype(result_dtype) + intercept, result_dtype_name
|
250
|
+
else:
|
251
|
+
# 需要乘法,生成最终数据
|
252
|
+
if result_dtype in (np.float32, np.float64):
|
253
|
+
# 浮点类型,直接使用浮点运算
|
254
|
+
result = image.astype(result_dtype) * slope + intercept
|
255
|
+
else:
|
256
|
+
# 整数类型,先做浮点运算再转换
|
257
|
+
result = (image.astype(np.float32) * slope + intercept).astype(result_dtype)
|
258
|
+
|
259
|
+
return result, result_dtype_name
|
@@ -0,0 +1,41 @@
|
|
1
|
+
dicube/__init__.py,sha256=XI_Zeif8FOQ-i_G7LabwVFpubzDniXSFb-8H_WdYW8c,5059
|
2
|
+
dicube/codecs/__init__.py,sha256=Tqw2vmQML-pcaNtnyTtj4W4kBqGhV2FTiVAT5bW5FgA,3905
|
3
|
+
dicube/codecs/jph/__init__.py,sha256=pWYkTNWYeGZx3khsJBAKRdB2Vgyr0BX5aLDKaanfe_o,407
|
4
|
+
dicube/codecs/jph/codec.py,sha256=BMZM3ReemQheraSIYn19aqH-1NrbjQTPAx3iCTms7KU,5620
|
5
|
+
dicube/codecs/jph/ojph_complete.cp310-win32.pyd,sha256=OQXH1naFlfAvI8YxSyVTBp283w2Rutcdf9VVQBk-syk,507904
|
6
|
+
dicube/codecs/jph/ojph_complete.cp310-win_amd64.pyd,sha256=_CWtaFatb_fKoho6VniTI7rrHkaYZvgV9LJBQY3ZvO4,601600
|
7
|
+
dicube/codecs/jph/ojph_complete.cp311-win32.pyd,sha256=eut4wirUngtvETMSqbycD9c-BYLDs-DMKGUf845CaGk,510464
|
8
|
+
dicube/codecs/jph/ojph_complete.cp311-win_amd64.pyd,sha256=DKd-ukJ3oPsdxeEHDthV3ulQsUhxguORE3M8jKqkbWw,604160
|
9
|
+
dicube/codecs/jph/ojph_complete.cp38-win32.pyd,sha256=Y3Nterl5act9QSkyfny-K0u6OkJnDg6KVMob14XdzQs,507904
|
10
|
+
dicube/codecs/jph/ojph_complete.cp38-win_amd64.pyd,sha256=vjlAPdq-rTif10Ya8hRuj1KUrlU7djCMrwz3i1Z9egY,601600
|
11
|
+
dicube/codecs/jph/ojph_complete.cp39-win32.pyd,sha256=kEecz7Uixzn3CMawNsaYWQfyu0asV4hCNIMnvE2zjkw,507904
|
12
|
+
dicube/codecs/jph/ojph_complete.cp39-win_amd64.pyd,sha256=ddRbfp0hZsgtvZocoUi_-VThW6IRC652C-NtsCXXqTs,601600
|
13
|
+
dicube/codecs/jph/ojph_decode_complete.cp310-win32.pyd,sha256=mhGLqPbJ5CmrfM22Azb769s2HgY-jzJ9Qp3eqR2Uu3U,543744
|
14
|
+
dicube/codecs/jph/ojph_decode_complete.cp310-win_amd64.pyd,sha256=5XQMaFven0b_3mks6FW8uV4XcJhO4C4uwvrOWkDAJ4o,639488
|
15
|
+
dicube/codecs/jph/ojph_decode_complete.cp311-win32.pyd,sha256=pJD_-yZQrMNk25Pg1-g60TNALAvTRu8LEsE6t84RAVo,546304
|
16
|
+
dicube/codecs/jph/ojph_decode_complete.cp311-win_amd64.pyd,sha256=z7pJRIrPLcdn-tkzxoAfZcNIQgP1YMlM2pIAQJWB09c,641536
|
17
|
+
dicube/codecs/jph/ojph_decode_complete.cp38-win32.pyd,sha256=Drd29pmHMr6xKAEOYHbxIOzvvKi7HwUqphVFkBDUDcY,543232
|
18
|
+
dicube/codecs/jph/ojph_decode_complete.cp38-win_amd64.pyd,sha256=KxoPWOvvtfNJD0mhiTLL6rjiGHRDS5tNTLz3gygYEiY,639488
|
19
|
+
dicube/codecs/jph/ojph_decode_complete.cp39-win32.pyd,sha256=_VR1xg2e90wHJQNoH50JDiEy2ZjGRU3SYU50DWMuxbE,543232
|
20
|
+
dicube/codecs/jph/ojph_decode_complete.cp39-win_amd64.pyd,sha256=3G4xvyYCFAjzssGskezMAjzMMiexSr2P2r1v539CmC8,638976
|
21
|
+
dicube/core/__init__.py,sha256=TJBS1xA2qVS7xxH6vZKPrd7YiQYtyLfNSs48tlmBCD8,676
|
22
|
+
dicube/core/image.py,sha256=WR9GKat0st0ior7zw1wi_5Bpd5cZoHWvsPzjYJAwpcg,14525
|
23
|
+
dicube/core/io.py,sha256=kMGiT20Gmkb55tFXxIDiU6RS3owHkqF7xk4IVq78eNU,15915
|
24
|
+
dicube/core/pixel_header.py,sha256=gikXfkjTGVQUqTWUk8Q2xAPsDfWm0iRPcwdIxIImr94,4124
|
25
|
+
dicube/dicom/__init__.py,sha256=OGnAHS3pCbb94Vpsc0x3d2gjv5UBAM9oUR3mxQVruYQ,383
|
26
|
+
dicube/dicom/dcb_streaming.py,sha256=6b50m5SEHFkdkWYKl6_ClzvPZZJKlJlVNR08sWF-Xdo,9335
|
27
|
+
dicube/dicom/dicom_io.py,sha256=EWR-VYXUYEF066dxucSb9E7xPpIReN-BbCeIZSsNskU,5069
|
28
|
+
dicube/dicom/dicom_meta.py,sha256=PgVeIWoYE7udQ3M26ytX1r3ic9leL35MMVfEJhTk-3Q,27552
|
29
|
+
dicube/dicom/dicom_status.py,sha256=VYp6q6UbxPkGwJ8_udEBRGSCFeSWedwRuEB4vfREOaE,10375
|
30
|
+
dicube/dicom/dicom_tags.py,sha256=BRw099dC-9FvAJ43QKESHBxtGtsGSSodcijJKXcCnsE,4065
|
31
|
+
dicube/dicom/merge_utils.py,sha256=ji0twDUBpR261l0pS2i8knetZI5Jg-OEaYsc2G_SBzk,9594
|
32
|
+
dicube/dicom/space_from_meta.py,sha256=i6zIXbFaNyz0g6z2oeoO5lzsfaeo4sgz_FI-PrEmqsg,2489
|
33
|
+
dicube/exceptions.py,sha256=VNnW7Dd9MwKzSK_y9GQITrsaHYiL-Crwmntzf-YS1sY,6877
|
34
|
+
dicube/storage/__init__.py,sha256=6WG1hdok-TkKShXCKFvH9ShoNILq3qvyZ6sNEO_urW4,481
|
35
|
+
dicube/storage/dcb_file.py,sha256=tt7aYi4x_gxf4s6De6tSkpiwyoCp1ZcG-Piixai1Jw8,32055
|
36
|
+
dicube/storage/pixel_utils.py,sha256=_KrsMoKHsgGc9QFSkmpx5YlDNcTOYPkCSu-zGt3WS7k,10017
|
37
|
+
dicube/utils/__init__.py,sha256=r4wAqNWphzYWaeYN9fcoFCX7mTcOtNACzZ4O-dDCQ10,154
|
38
|
+
dicube/validation.py,sha256=aFu2lKW9NDl13eKedYhOjw1g50uOf_x0wx3y3g9cLsA,12857
|
39
|
+
dicube-0.2.0.dist-info/METADATA,sha256=xDYbYiX9NKyLH0bAbBNOsziAxvXHyyQyELP8RlGA5ys,10581
|
40
|
+
dicube-0.2.0.dist-info/WHEEL,sha256=RKWfL8d6R7y9dzb5_AyhPLMoBaKZaDpOTwy7YMg9zGI,106
|
41
|
+
dicube-0.2.0.dist-info/RECORD,,
|
dicube-0.1.4.dist-info/RECORD
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
dicube/__init__.py,sha256=CwVdLfPEkB6t5szG1eZnpF0JIbuOR1dC6WZ4pwNd0lI,4328
|
2
|
-
dicube/codecs/__init__.py,sha256=Tqw2vmQML-pcaNtnyTtj4W4kBqGhV2FTiVAT5bW5FgA,3905
|
3
|
-
dicube/codecs/jph/__init__.py,sha256=pWYkTNWYeGZx3khsJBAKRdB2Vgyr0BX5aLDKaanfe_o,407
|
4
|
-
dicube/codecs/jph/codec.py,sha256=BMZM3ReemQheraSIYn19aqH-1NrbjQTPAx3iCTms7KU,5620
|
5
|
-
dicube/codecs/jph/ojph_complete.cp310-win32.pyd,sha256=i2p1vJSrWjq_txiD4EHY76C_nyitew3FagVwqZIrHm0,507904
|
6
|
-
dicube/codecs/jph/ojph_complete.cp310-win_amd64.pyd,sha256=0ZCRjZM7ydUEaai5PQrodUP8mJwPlIplvCCDetYxOz8,601600
|
7
|
-
dicube/codecs/jph/ojph_complete.cp311-win32.pyd,sha256=RK3iGIxXocUa7Oiw7SaotoLlEs9EKPWOoqb9OnxNi3I,510464
|
8
|
-
dicube/codecs/jph/ojph_complete.cp311-win_amd64.pyd,sha256=PIPUA_BG5zDhIZEB5WFrLKvDpypgp8msozjIjdBx2wc,604160
|
9
|
-
dicube/codecs/jph/ojph_complete.cp38-win32.pyd,sha256=g3NgC2GHqAEi85rd5OII7y9ecntQIJs3b0eOz_kImOk,507904
|
10
|
-
dicube/codecs/jph/ojph_complete.cp38-win_amd64.pyd,sha256=18JF5Nd1AECJFgkkAUsimUJCAoeaSMp3CIo57EV7fV8,601600
|
11
|
-
dicube/codecs/jph/ojph_complete.cp39-win32.pyd,sha256=M8Xd5KcPJUsYANUzG913DSH-rSk3tYyWOaZry2LhxOQ,507904
|
12
|
-
dicube/codecs/jph/ojph_complete.cp39-win_amd64.pyd,sha256=v1mnIZ8T4ovtIysP3BcU-IG2yPTbI3XSbgt8rcNkPik,601600
|
13
|
-
dicube/codecs/jph/ojph_decode_complete.cp310-win32.pyd,sha256=COfALkBP0f7dZ_kly8o3lPT6ilmSlWqacfsV3og1Boo,543744
|
14
|
-
dicube/codecs/jph/ojph_decode_complete.cp310-win_amd64.pyd,sha256=Km461A6biNIjaQ1tvGlg8_99y5aV3c0kDL_e2UYthKU,639488
|
15
|
-
dicube/codecs/jph/ojph_decode_complete.cp311-win32.pyd,sha256=82A3WIDO8o-tq79oNVqt0BUEyoMXmY-0RJbhO9ybN-s,546304
|
16
|
-
dicube/codecs/jph/ojph_decode_complete.cp311-win_amd64.pyd,sha256=O7yB0hkOjukg0eoIm6VMmbkPEah1nQvuW7iYexma3cc,641536
|
17
|
-
dicube/codecs/jph/ojph_decode_complete.cp38-win32.pyd,sha256=HoJrMZc_Na-I2oRc0NKyBKuBOzHd98-S0I4MHz_jvoY,543232
|
18
|
-
dicube/codecs/jph/ojph_decode_complete.cp38-win_amd64.pyd,sha256=wt4cGlqv5DYqVJjGKQaxSJzg8gtqtuSqzciaa9tRK_Q,639488
|
19
|
-
dicube/codecs/jph/ojph_decode_complete.cp39-win32.pyd,sha256=v1ChiPI65TLCDYTT_4X82xduM_-MN7s7L_ruYrnvkO8,543232
|
20
|
-
dicube/codecs/jph/ojph_decode_complete.cp39-win_amd64.pyd,sha256=5ztslxsLawb-_g7Rn0azqQFg9zqIVoaaJgNWQECdukA,638976
|
21
|
-
dicube/core/__init__.py,sha256=TJBS1xA2qVS7xxH6vZKPrd7YiQYtyLfNSs48tlmBCD8,676
|
22
|
-
dicube/core/image.py,sha256=24oBY6sjW52yuJ2DS4Cq8cyvCY1vdT-WmkXsUehV4qI,14530
|
23
|
-
dicube/core/io.py,sha256=yvN7eCmJr6OarJz1m-YTE6yw_xinqvGqNCLnPpnAcco,14116
|
24
|
-
dicube/core/pixel_header.py,sha256=KM61i3ZPAQYcu-IKgou8DruDJIjcbq5qSsTL0sFMtro,4045
|
25
|
-
dicube/dicom/__init__.py,sha256=OGnAHS3pCbb94Vpsc0x3d2gjv5UBAM9oUR3mxQVruYQ,383
|
26
|
-
dicube/dicom/dcb_streaming.py,sha256=MSPLTfUYQF1Wb4ut5I3xuxPjum1xW5DgZRGhMPX9Lq4,9291
|
27
|
-
dicube/dicom/dicom_io.py,sha256=7TPfDz3f4qlvYhmweacT5GURRj2aZu3Tc6F8N7Yn1Hc,5093
|
28
|
-
dicube/dicom/dicom_meta.py,sha256=PgVeIWoYE7udQ3M26ytX1r3ic9leL35MMVfEJhTk-3Q,27552
|
29
|
-
dicube/dicom/dicom_status.py,sha256=VYp6q6UbxPkGwJ8_udEBRGSCFeSWedwRuEB4vfREOaE,10375
|
30
|
-
dicube/dicom/dicom_tags.py,sha256=BRw099dC-9FvAJ43QKESHBxtGtsGSSodcijJKXcCnsE,4065
|
31
|
-
dicube/dicom/merge_utils.py,sha256=ji0twDUBpR261l0pS2i8knetZI5Jg-OEaYsc2G_SBzk,9594
|
32
|
-
dicube/dicom/space_from_meta.py,sha256=i6zIXbFaNyz0g6z2oeoO5lzsfaeo4sgz_FI-PrEmqsg,2489
|
33
|
-
dicube/exceptions.py,sha256=VNnW7Dd9MwKzSK_y9GQITrsaHYiL-Crwmntzf-YS1sY,6877
|
34
|
-
dicube/storage/__init__.py,sha256=6WG1hdok-TkKShXCKFvH9ShoNILq3qvyZ6sNEO_urW4,481
|
35
|
-
dicube/storage/dcb_file.py,sha256=yl1fIgkP_qbCR_jj-rTt9FmHuVI9S2NSvJ3M1xunWeQ,31183
|
36
|
-
dicube/storage/pixel_utils.py,sha256=Wspas9QyH5GUoGpVzs9DAB1PtO1jo0sDUvYjwQ8RVpM,5276
|
37
|
-
dicube/utils/__init__.py,sha256=r4wAqNWphzYWaeYN9fcoFCX7mTcOtNACzZ4O-dDCQ10,154
|
38
|
-
dicube/validation.py,sha256=aFu2lKW9NDl13eKedYhOjw1g50uOf_x0wx3y3g9cLsA,12857
|
39
|
-
dicube-0.1.4.dist-info/METADATA,sha256=lLPPqXaJcIOIHhGuU3buJPhmi3GCMeKi5KW0FhlY0nk,10581
|
40
|
-
dicube-0.1.4.dist-info/WHEEL,sha256=RKWfL8d6R7y9dzb5_AyhPLMoBaKZaDpOTwy7YMg9zGI,106
|
41
|
-
dicube-0.1.4.dist-info/RECORD,,
|
File without changes
|