improve dicom diff (still needs work)

This commit is contained in:
Ross
2024-02-12 08:39:16 +00:00
parent 20d05772e6
commit c3f7913402
2 changed files with 47 additions and 30 deletions
+24 -14
View File
@@ -1050,26 +1050,36 @@ def image_diff(request):
image_ids = request.POST.getlist("image-id") image_ids = request.POST.getlist("image-id")
first: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[0]) if len(image_ids) == 2:
second: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[1]) 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) first_ds = pydicom.read_file(first.image.file)
#del first_ds.PixelData #del first_ds.PixelData
#j1 = first_ds.to_json_dict() #j1 = first_ds.to_json_dict()
f = print_dicom(first_ds, join=False) f = print_dicom(first_ds, join=False)
second_ds = pydicom.read_file(second.image.file) second_ds = pydicom.read_file(second.image.file)
#del second_ds.PixelData #del second_ds.PixelData
#j2 = second_ds.to_json_dict() #j2 = second_ds.to_json_dict()
s = print_dicom(second_ds, join=False) 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)) dict_diff = pprint.pformat(compare_dicom_datasets(first_ds, second_ds))
#return HttpResponse(diff) #return HttpResponse(diff)
return HttpResponse(f"<pre>{dict_diff}</pre><br/>{diff}") return HttpResponse(f"<pre>{dict_diff}</pre><br/>{diff}")
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))
dict_diff = pprint.pformat(compare_dicom_datasets(*ds_set))
return HttpResponse(f"<pre>{dict_diff}</pre>")
return HttpResponse("Fail") return HttpResponse("Fail")
+22 -15
View File
@@ -1,4 +1,5 @@
import base64 import base64
from collections import defaultdict
import hashlib import hashlib
import mimetypes import mimetypes
@@ -258,24 +259,30 @@ def compare_dicom_elements(element1: pydicom.DataElement, element2: pydicom.Data
return differences return differences
def compare_dicom_datasets(dataset1: pydicom.Dataset, dataset2: pydicom.Dataset): def compare_dicom_datasets(*datasets: pydicom.Dataset):
differences = {} differences = defaultdict(list)
# Compare the dataset elements # Compare the dataset elements
for element1 in dataset1: for i, dataset in enumerate(datasets):
element2 = dataset2.get(element1.tag) for element1 in dataset:
if element2 is None: for j in range(i+1, len(datasets)):
differences[f"{element1.tag} {element1.name}"] = ('missing', element1.value) dataset2 = datasets[j]
else: element2 = dataset2.get(element1.tag)
element_differences = compare_dicom_elements(element1, element2) if element2 is None:
if element_differences: differences[f"{element1.tag} {element1.name}"].append(('missing', element1.value))
differences[f"{element1.tag} {element1.name}"] = element_differences 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 # Check for any extra elements in the datasets
for element2 in dataset2: for i, dataset in enumerate(datasets):
element1 = dataset1.get(element2.tag) for element2 in dataset:
if element1 is None: for j in range(i+1, len(datasets)):
differences[f"{element1.tag} {element1.name}"] = ('extra', element2.value) dataset2 = datasets[j]
element1 = dataset2.get(element2.tag)
if element1 is None:
differences[f"{element1.tag} {element1.name}"].append(('extra', element2.value))
return differences return differences