Source code for deid.tests.test_clean_pixel_dimensions

#!/usr/bin/env python

__author__ = "Vanessa Sochat"
__copyright__ = "Copyright 2016-2022, Vanessa Sochat"
__license__ = "MIT"


import os
import shutil
import tempfile
import unittest

from pydicom import read_file

from deid.data import get_dataset
from deid.utils import get_installdir


[docs]class TestCleanPizelDimensions(unittest.TestCase):
[docs] def setUp(self): self.pwd = get_installdir() self.deidpath = os.path.abspath("%s/tests/resources/" % self.pwd) self.dataset = get_dataset("ultrasounds") self.tmpdir = tempfile.mkdtemp() print("\n######################START######################")
[docs] def tearDown(self): shutil.rmtree(self.tmpdir) print("\n######################END########################")
[docs] def test_4d_RGB_cine_clip(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified on "4D" images - RGB cine clips. Pixel data will have the shape (frames, X, Y, channel) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "RGB_CINE.zip", self.tmpdir) deid = os.path.join(self.deidpath, "remove_coordinates_us.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, 0:500, 0:500, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_3d_Greyscale_cine_clip(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified on "3D" images - greyscale cine clips. Pixel data will have the shape (frames, X, Y) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "GREYSCALE_CINE.zip", self.tmpdir) deid = os.path.join(self.deidpath, "remove_coordinates_us.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, 0:500, 0:500] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_3d_RGB_image(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified on "3D" images - RGB images. Pixel data will have the shape (X, Y, channel) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "RGB_IMAGE.dcm") deid = os.path.join(self.deidpath, "remove_coordinates_us.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[0:500, 0:500, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_2d_Greyscale_image(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified on "2D" images - Greyscale images. Pixel data will have the shape (X, Y) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "GREYSCALE_IMAGE.dcm") deid = os.path.join(self.deidpath, "remove_coordinates_us.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[0:500, 0:500] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_4d_RGB_cine_clip_all(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified - all keyword - on "4D" images - RGB cine clips. Pixel data will have the shape (frames, X, Y, channel) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "RGB_CINE.zip", self.tmpdir) deid = os.path.join(self.deidpath, "remove_coordinates_us_all.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, :, :, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_3d_Greyscale_cine_clip_all(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified - all keyword - on "3D" images - greyscale cine clips. Pixel data will have the shape (frames, X, Y) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "GREYSCALE_CINE.zip", self.tmpdir) deid = os.path.join(self.deidpath, "remove_coordinates_us_all.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, :, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_3d_RGB_image_all(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified - all keyword - on "3D" images - RGB images. Pixel data will have the shape (X, Y, channel) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "RGB_IMAGE.dcm") deid = os.path.join(self.deidpath, "remove_coordinates_us_all.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, :, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs] def test_2d_Greyscale_image_all(self): """ Test the pixel cleaner to ensure pixels are appropriately deidentified - all keyword - on "2D" images - Greyscale images. Pixel data will have the shape (X, Y) """ from deid.dicom import DicomCleaner dicom_file = get_file(self.dataset, "GREYSCALE_IMAGE.dcm") deid = os.path.join(self.deidpath, "remove_coordinates_us_all.dicom") client = DicomCleaner(output_folder=self.tmpdir, deid=deid) out = client.detect(dicom_file) self.assertTrue(out["flagged"]) client.clean() cleanedfile = client.save_dicom() outputfile = read_file(cleanedfile) outputpixels = outputfile.pixel_array inputfile = read_file(dicom_file) inputpixels = inputfile.pixel_array compare = inputpixels == outputpixels self.assertFalse(compare.all()) inputpixels[:, :] = 0 compare = inputpixels == outputpixels self.assertTrue(compare.all())
[docs]def get_file(dataset, image, tempdir=None): """ Helper to get a dicom file """ from deid.dicom import get_files dicom_files = get_files(dataset, pattern=image, tempdir=tempdir) return next(dicom_files)
if __name__ == "__main__": unittest.main()