dbdicom 0.3.2__py3-none-any.whl → 0.3.4__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.
Potentially problematic release.
This version of dbdicom might be problematic. Click here for more details.
- dbdicom/api.py +46 -36
- dbdicom/database.py +4 -0
- dbdicom/dataset.py +19 -26
- dbdicom/dbd.py +251 -119
- dbdicom/external/__pycache__/__init__.cpython-311.pyc +0 -0
- dbdicom/external/dcm4che/__pycache__/__init__.cpython-311.pyc +0 -0
- dbdicom/external/dcm4che/bin/__pycache__/__init__.cpython-311.pyc +0 -0
- dbdicom/register.py +146 -404
- dbdicom/sop_classes/mr_image.py +34 -13
- dbdicom/utils/image.py +3 -4
- {dbdicom-0.3.2.dist-info → dbdicom-0.3.4.dist-info}/METADATA +1 -1
- {dbdicom-0.3.2.dist-info → dbdicom-0.3.4.dist-info}/RECORD +15 -15
- {dbdicom-0.3.2.dist-info → dbdicom-0.3.4.dist-info}/WHEEL +0 -0
- {dbdicom-0.3.2.dist-info → dbdicom-0.3.4.dist-info}/licenses/LICENSE +0 -0
- {dbdicom-0.3.2.dist-info → dbdicom-0.3.4.dist-info}/top_level.txt +0 -0
dbdicom/sop_classes/mr_image.py
CHANGED
|
@@ -23,33 +23,54 @@ def pixel_data(ds):
|
|
|
23
23
|
if [0x2005, 0x100E] in ds: # 'Philips Rescale Slope'
|
|
24
24
|
slope = ds[(0x2005, 0x100E)].value
|
|
25
25
|
intercept = ds[(0x2005, 0x100D)].value
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
if (intercept == 0) and (slope == 1):
|
|
27
|
+
array = array.astype(np.int16)
|
|
28
|
+
else:
|
|
29
|
+
array = array.astype(np.float32)
|
|
30
|
+
array -= intercept
|
|
31
|
+
array /= slope
|
|
28
32
|
else:
|
|
29
33
|
slope = float(getattr(ds, 'RescaleSlope', 1))
|
|
30
34
|
intercept = float(getattr(ds, 'RescaleIntercept', 0))
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
if (intercept == 0) and (slope == 1):
|
|
36
|
+
array = array.astype(np.int16)
|
|
37
|
+
else:
|
|
38
|
+
array = array.astype(np.float32)
|
|
39
|
+
array *= slope
|
|
40
|
+
array += intercept
|
|
33
41
|
return np.transpose(array)
|
|
34
42
|
|
|
35
43
|
|
|
36
44
|
def set_pixel_data(ds, array):
|
|
37
45
|
|
|
46
|
+
# Delete 'Philips Rescale Slope'
|
|
38
47
|
if (0x2005, 0x100E) in ds:
|
|
39
|
-
del ds[0x2005, 0x100E]
|
|
48
|
+
del ds[0x2005, 0x100E]
|
|
40
49
|
if (0x2005, 0x100D) in ds:
|
|
41
50
|
del ds[0x2005, 0x100D]
|
|
42
51
|
|
|
52
|
+
ds.BitsAllocated = 16
|
|
53
|
+
ds.BitsStored = 16
|
|
54
|
+
ds.HighBit = 15
|
|
55
|
+
|
|
43
56
|
# clipping may slow down a lot
|
|
44
|
-
array = image.clip(array.astype(np.float32))
|
|
45
|
-
array
|
|
46
|
-
array
|
|
57
|
+
#array = image.clip(array.astype(np.float32))
|
|
58
|
+
array = image.clip(array) # remove nan and infs
|
|
59
|
+
if array.dtype==np.int16:
|
|
60
|
+
ds.PixelRepresentation = 1
|
|
61
|
+
ds.RescaleSlope = 1
|
|
62
|
+
ds.RescaleIntercept = 0
|
|
63
|
+
elif array.dtype==np.uint16:
|
|
64
|
+
ds.PixelRepresentation = 0
|
|
65
|
+
ds.RescaleSlope = 1
|
|
66
|
+
ds.RescaleIntercept = 0
|
|
67
|
+
else:
|
|
68
|
+
array, slope, intercept = image.scale_to_range(array, ds.BitsStored)
|
|
69
|
+
ds.PixelRepresentation = 0
|
|
70
|
+
ds.RescaleSlope = 1 / slope
|
|
71
|
+
ds.RescaleIntercept = - intercept / slope
|
|
47
72
|
|
|
48
|
-
|
|
49
|
-
ds.RescaleSlope = 1 / slope
|
|
50
|
-
ds.RescaleIntercept = - intercept / slope
|
|
51
|
-
# ds.WindowCenter = (maximum + minimum) / 2
|
|
52
|
-
# ds.WindowWidth = maximum - minimum
|
|
73
|
+
array = np.transpose(array)
|
|
53
74
|
ds.Rows = array.shape[0]
|
|
54
75
|
ds.Columns = array.shape[1]
|
|
55
76
|
ds.PixelData = array.tobytes()
|
dbdicom/utils/image.py
CHANGED
|
@@ -54,14 +54,13 @@ def dismantle_affine_matrix(affine):
|
|
|
54
54
|
# ImagePositionPatient_i = ImagePositionPatient + i * SpacingBetweenSlices * slice_cosine
|
|
55
55
|
column_spacing = np.linalg.norm(affine[:3, 0])
|
|
56
56
|
row_spacing = np.linalg.norm(affine[:3, 1])
|
|
57
|
-
|
|
57
|
+
slice_spacing = np.linalg.norm(affine[:3, 2])
|
|
58
58
|
row_cosine = affine[:3, 0] / column_spacing
|
|
59
59
|
column_cosine = affine[:3, 1] / row_spacing
|
|
60
|
-
slice_cosine = affine[:3, 2] /
|
|
60
|
+
slice_cosine = affine[:3, 2] / slice_spacing
|
|
61
61
|
return {
|
|
62
62
|
'PixelSpacing': [row_spacing, column_spacing],
|
|
63
|
-
|
|
64
|
-
'SliceThickness': slice_thickness,
|
|
63
|
+
'SpacingBetweenSlices': slice_spacing,
|
|
65
64
|
'ImageOrientationPatient': row_cosine.tolist() + column_cosine.tolist(),
|
|
66
65
|
'ImagePositionPatient': affine[:3, 3].tolist(), # first slice for a volume
|
|
67
66
|
'slice_cosine': slice_cosine.tolist()}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dbdicom
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: A pythonic interface for reading and writing DICOM databases
|
|
5
5
|
Author-email: Steven Sourbron <s.sourbron@sheffield.ac.uk>, Ebony Gunwhy <e.gunwhy@sheffield.ac.uk>
|
|
6
6
|
Project-URL: Homepage, https://openmiblab.github.io/dbdicom/
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
dbdicom/__init__.py,sha256=DyogeTraV6o-FgWdBCbtVEaMmdkMQHkYkraDIE0t8OA,25
|
|
2
|
-
dbdicom/api.py,sha256=
|
|
2
|
+
dbdicom/api.py,sha256=gBBOgzg54zWA_Rf4392OyNBQUEHt3FYYTLq_QA75bUc,9596
|
|
3
3
|
dbdicom/const.py,sha256=BqBiRRjeiSqDr1W6YvaayD8WKCjG4Cny2NT0GeLM6bI,4269
|
|
4
|
-
dbdicom/database.py,sha256=
|
|
5
|
-
dbdicom/dataset.py,sha256=
|
|
6
|
-
dbdicom/dbd.py,sha256=
|
|
7
|
-
dbdicom/register.py,sha256=
|
|
4
|
+
dbdicom/database.py,sha256=_LUbH7gc9l7j_63AC71DjwxgTUwbEjHSy5kuvRw75Hw,4764
|
|
5
|
+
dbdicom/dataset.py,sha256=hLAyFlN7zQ-dOzI9V67aHfTq3VtpvCI7_83tnBqXObE,21880
|
|
6
|
+
dbdicom/dbd.py,sha256=6ewuLQwiYGI5EtzWQskxk4CKoprc2gU-m-iSIMPNTv8,31090
|
|
7
|
+
dbdicom/register.py,sha256=_NyNbOEAN_hkwjxupNpr9F5DWUwARCsci8knK41-EsA,13931
|
|
8
8
|
dbdicom/external/__init__.py,sha256=XNQqfspyf6vFGedXlRKZsUB8k8E-0W19Uamwn8Aioxo,316
|
|
9
|
-
dbdicom/external/__pycache__/__init__.cpython-311.pyc,sha256=
|
|
9
|
+
dbdicom/external/__pycache__/__init__.cpython-311.pyc,sha256=pXAQ35ixd92fm6YcuHgzR1t6RcASQ-cHhU1wOA5b8sw,542
|
|
10
10
|
dbdicom/external/dcm4che/README.md,sha256=0aAGRs36W3_0s5LzWHRGf_tqariS_JP4iJggaxnD4Xw,8987
|
|
11
11
|
dbdicom/external/dcm4che/__init__.py,sha256=YwpeMCLrxffGOkchsGjgAuB6ia3VX_tx9Y7ru9EWtoY,35
|
|
12
|
-
dbdicom/external/dcm4che/__pycache__/__init__.cpython-311.pyc,sha256=
|
|
12
|
+
dbdicom/external/dcm4che/__pycache__/__init__.cpython-311.pyc,sha256=FB8wyWqXDUt_1P-QmE4yt9uD6dDm5YqYWjqVuRwGdSo,256
|
|
13
13
|
dbdicom/external/dcm4che/bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
dbdicom/external/dcm4che/bin/deidentify,sha256=64MNIEpp-CWzFSb6TV0KtyCBvD7XyEsovRjBeyxDqSc,1698
|
|
15
15
|
dbdicom/external/dcm4che/bin/deidentify.bat,sha256=kVXUkcy1C4Y3KjC2NJwmmR0pufSJWmaof_LR5CTAxMg,1455
|
|
16
16
|
dbdicom/external/dcm4che/bin/emf2sf,sha256=svCzkZ-QhdVTV0NNHOpBiwNBMODVWZHJIFA7cWaN2bM,1622
|
|
17
17
|
dbdicom/external/dcm4che/bin/emf2sf.bat,sha256=Vh0ry9KNJX_WXcyCrLSxbJ_6Crot9rjmwi__u2GZqLY,1375
|
|
18
|
-
dbdicom/external/dcm4che/bin/__pycache__/__init__.cpython-311.pyc,sha256=
|
|
18
|
+
dbdicom/external/dcm4che/bin/__pycache__/__init__.cpython-311.pyc,sha256=GYcm47ETjYvRUN5RPTe5R-c0prd14GP8gm96eJcy0uQ,203
|
|
19
19
|
dbdicom/external/dcm4che/etc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
dbdicom/external/dcm4che/etc/emf2sf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
dbdicom/external/dcm4che/etc/emf2sf/log4j.properties,sha256=3hHcBFt2oNRjvHtix5bfuEsnKfdv5IYOkbsyoY9g7cM,223
|
|
@@ -36,7 +36,7 @@ dbdicom/external/dcm4che/lib/windows-x86/opencv_java.dll,sha256=QanyzLy0Cd79-aOV
|
|
|
36
36
|
dbdicom/external/dcm4che/lib/windows-x86-64/opencv_java.dll,sha256=TmjW2SbG4MR3GQ95T8xCVVDLgsdKukgaHBPUvWkfXp8,11039232
|
|
37
37
|
dbdicom/sop_classes/ct_image.py,sha256=16PNv_0e1_7cfxE12JWlx5YQeaTAQVzwtXTjxs3aonk,2812
|
|
38
38
|
dbdicom/sop_classes/enhanced_mr_image.py,sha256=13j4EGXniBpJxpzzL3Xa4y3g5OKhMd5Ct7cjPGOYQY4,35496
|
|
39
|
-
dbdicom/sop_classes/mr_image.py,sha256=
|
|
39
|
+
dbdicom/sop_classes/mr_image.py,sha256=kNcrWXZ3VC3hhfqjMRjrlZOVqZH3Q5KfWXYLfLD-bEY,10913
|
|
40
40
|
dbdicom/sop_classes/parametric_map.py,sha256=2OKBuC2bo03OEpKqimQS-nVGFp1cKRPYwVgmDGVf1JU,12288
|
|
41
41
|
dbdicom/sop_classes/secondary_capture.py,sha256=wgNRX8qyhV7HR7Jq2tQWPPuGpiRzYl6qPOgK6qFbPUc,4541
|
|
42
42
|
dbdicom/sop_classes/segmentation.py,sha256=I8-PciIoIz27_-dZ4esBZSw0TBBbO8KbNYTiTmVe62g,11465
|
|
@@ -45,10 +45,10 @@ dbdicom/sop_classes/xray_angiographic_image.py,sha256=nWysCGaEWKVNItnOgyJfcGMpS3
|
|
|
45
45
|
dbdicom/utils/arrays.py,sha256=wiqCczLXlNl0qIePVOwCYvbAJhPveNorplkhtGleS48,1121
|
|
46
46
|
dbdicom/utils/dcm4che.py,sha256=Vxq8NYWWK3BuqJkzhBQ89oMqzJlnxqTxgsgTo_Frznc,2317
|
|
47
47
|
dbdicom/utils/files.py,sha256=qhWNJqeWnRjDNbERpC6Mz962_TW9mFdvd2lnBbK3xt4,2259
|
|
48
|
-
dbdicom/utils/image.py,sha256=
|
|
48
|
+
dbdicom/utils/image.py,sha256=D46CD_ezpp2uq8VMqug5Z09fAyoJ9U6VwuxIFNJK8zg,4048
|
|
49
49
|
dbdicom/utils/variables.py,sha256=vUh5cDnmCft5hoXDYXUvfkg5Cy5WlgMAogU38Y_BKRo,5753
|
|
50
|
-
dbdicom-0.3.
|
|
51
|
-
dbdicom-0.3.
|
|
52
|
-
dbdicom-0.3.
|
|
53
|
-
dbdicom-0.3.
|
|
54
|
-
dbdicom-0.3.
|
|
50
|
+
dbdicom-0.3.4.dist-info/licenses/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
|
|
51
|
+
dbdicom-0.3.4.dist-info/METADATA,sha256=DPuzyZj81SfdTQGR_qogbbI1BxeG6StqSLM_pgnck44,1030
|
|
52
|
+
dbdicom-0.3.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
53
|
+
dbdicom-0.3.4.dist-info/top_level.txt,sha256=nJWxXg4YjD6QblfmhrzTMXcr8FSKNc0Yk-CAIDUsYkQ,8
|
|
54
|
+
dbdicom-0.3.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|