improve dicom diff (still needs work)
This commit is contained in:
+24
-14
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user