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}

{diff}") - dict_diff = pprint.pformat(compare_dicom_datasets(first_ds, second_ds)) + else: + ds_set = [] + for pk in image_ids: + series_image = get_object_or_404(SeriesImage, pk=pk) + ds_set.append(pydicom.read_file(series_image.image.file)) - #return HttpResponse(diff) - - return HttpResponse(f"
{dict_diff}

{diff}") + dict_diff = pprint.pformat(compare_dicom_datasets(*ds_set)) + return HttpResponse(f"
{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