diff --git a/atlas/views.py b/atlas/views.py index 4f396c9b..d63d8968 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -1050,26 +1050,36 @@ def image_diff(request): image_ids = request.POST.getlist("image-id") - first: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[0]) - second: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[1]) + if len(image_ids) == 2: + first: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[0]) + second: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[1]) - first_ds = pydicom.read_file(first.image.file) - #del first_ds.PixelData - #j1 = first_ds.to_json_dict() - f = print_dicom(first_ds, join=False) + first_ds = pydicom.read_file(first.image.file) + #del first_ds.PixelData + #j1 = first_ds.to_json_dict() + f = print_dicom(first_ds, join=False) - second_ds = pydicom.read_file(second.image.file) - #del second_ds.PixelData - #j2 = second_ds.to_json_dict() - s = print_dicom(second_ds, join=False) + second_ds = pydicom.read_file(second.image.file) + #del second_ds.PixelData + #j2 = second_ds.to_json_dict() + s = print_dicom(second_ds, join=False) - diff = difflib.HtmlDiff().make_table(f, s) + diff = difflib.HtmlDiff().make_table(f, s) + + dict_diff = pprint.pformat(compare_dicom_datasets(first_ds, second_ds)) + + #return HttpResponse(diff) + + return HttpResponse(f"
{dict_diff}{dict_diff}{dict_diff}")
return HttpResponse("Fail")
diff --git a/helpers/images.py b/helpers/images.py
index 3960ad51..f87d907f 100644
--- a/helpers/images.py
+++ b/helpers/images.py
@@ -1,4 +1,5 @@
import base64
+from collections import defaultdict
import hashlib
import mimetypes
@@ -258,24 +259,30 @@ def compare_dicom_elements(element1: pydicom.DataElement, element2: pydicom.Data
return differences
-def compare_dicom_datasets(dataset1: pydicom.Dataset, dataset2: pydicom.Dataset):
- differences = {}
+def compare_dicom_datasets(*datasets: pydicom.Dataset):
+ differences = defaultdict(list)
# Compare the dataset elements
- for element1 in dataset1:
- element2 = dataset2.get(element1.tag)
- if element2 is None:
- differences[f"{element1.tag} {element1.name}"] = ('missing', element1.value)
- else:
- element_differences = compare_dicom_elements(element1, element2)
- if element_differences:
- differences[f"{element1.tag} {element1.name}"] = element_differences
+ for i, dataset in enumerate(datasets):
+ for element1 in dataset:
+ for j in range(i+1, len(datasets)):
+ dataset2 = datasets[j]
+ element2 = dataset2.get(element1.tag)
+ if element2 is None:
+ differences[f"{element1.tag} {element1.name}"].append(('missing', element1.value))
+ else:
+ element_differences = compare_dicom_elements(element1, element2)
+ if element_differences:
+ differences[f"{element1.tag} {element1.name}"].append(element_differences)
- # Check for any extra elements in dataset2
- for element2 in dataset2:
- element1 = dataset1.get(element2.tag)
- if element1 is None:
- differences[f"{element1.tag} {element1.name}"] = ('extra', element2.value)
+ # Check for any extra elements in the datasets
+ for i, dataset in enumerate(datasets):
+ for element2 in dataset:
+ for j in range(i+1, len(datasets)):
+ dataset2 = datasets[j]
+ element1 = dataset2.get(element2.tag)
+ if element1 is None:
+ differences[f"{element1.tag} {element1.name}"].append(('extra', element2.value))
return differences