|
6 | 6 | import unittest |
7 | 7 | from copy import deepcopy |
8 | 8 |
|
| 9 | +from pydicom.uid import RLELossless |
| 10 | + |
9 | 11 | from deid.config import DeidRecipe |
10 | 12 | from deid.data import get_dataset |
11 | 13 | from deid.dicom import utils |
@@ -229,6 +231,34 @@ def test_pixel_cleaner_keepcoordinates_from(self): |
229 | 231 | compare = inputpixels[0:2000, 0:2000] == outputpixels[0:2000, 0:2000] |
230 | 232 | self.assertTrue(compare.all()) |
231 | 233 |
|
| 234 | + def test_pixel_cleaner_save_compressed(self): |
| 235 | + """Test the pixel cleaner to ensure that saving as compressed works as expected.""" |
| 236 | + from deid.dicom import DicomCleaner |
| 237 | + |
| 238 | + dicom_file = get_file(self.dataset) |
| 239 | + deid = os.path.join(self.deidpath, "remove_coordinates.dicom") |
| 240 | + |
| 241 | + client = DicomCleaner(output_folder=self.tmpdir, deid=deid) |
| 242 | + out = client.detect(dicom_file) |
| 243 | + self.assertTrue(out["flagged"]) |
| 244 | + |
| 245 | + client.clean() |
| 246 | + # Explicitly save as a RLELossless compressed transfer syntax |
| 247 | + cleanedfile = client.save_dicom(compression=RLELossless) |
| 248 | + |
| 249 | + outputfile = utils.dcmread(cleanedfile) |
| 250 | + outputpixels = outputfile.pixel_array |
| 251 | + |
| 252 | + # Assert the pixel values have changed after compression |
| 253 | + inputfile = utils.dcmread(dicom_file) |
| 254 | + inputpixels = inputfile.pixel_array |
| 255 | + compare = inputpixels == outputpixels |
| 256 | + self.assertFalse(compare.all()) |
| 257 | + |
| 258 | + # Assert the transfer syntax has changed |
| 259 | + self.assertEqual(outputfile.file_meta.TransferSyntaxUID, RLELossless) |
| 260 | + self.assertNotEqual(inputfile.file_meta.TransferSyntaxUID, RLELossless) |
| 261 | + |
232 | 262 |
|
233 | 263 | if __name__ == "__main__": |
234 | 264 | unittest.main() |
0 commit comments