def test_write_4d_itk(self): log = logging.getLogger("TestWritePlugin.test_write_4d_itk") log.debug("test_write_4d_itk") si = Series( [os.path.join('data', 'itk', 'time', 'Image_00000.mha'), os.path.join('data', 'itk', 'time', 'Image_00001.mha'), os.path.join('data', 'itk', 'time', 'Image_00002.mha')], imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si.dtype, np.uint16) self.assertEqual(si.shape, (3, 3, 192, 152)) import copy deep_si = copy.deepcopy(si) np.testing.assert_array_equal(si, deep_si) si.sort_on = imagedata.formats.SORT_ON_SLICE # si.sort_on = imagedata.formats.SORT_ON_TAG log.debug("test_write_4d_itk: si.sort_on {}".format( imagedata.formats.sort_on_to_str(si.sort_on))) si.output_dir = 'single' # si.output_dir = 'multi' with tempfile.TemporaryDirectory() as d: si.write(d, formats=['itk'], opts=self.opts) np.testing.assert_array_equal(si, deep_si) # Read back the DICOM data and verify the header si2 = Series( d, imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si.shape, si2.shape) compare_headers(self, si, si2, uid=False) np.testing.assert_array_almost_equal(si, si2, decimal=4)
def test_write_4d_nifti(self): si1 = Series( os.path.join('data', 'dicom', 'time'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 3, 192, 152)) si1.sort_on = imagedata.formats.SORT_ON_SLICE logging.debug("test_write_4d_nifti: si1.sort_on {}".format( imagedata.formats.sort_on_to_str(si1.sort_on))) si1.output_dir = 'single' # si1.output_dir = 'multi' with tempfile.TemporaryDirectory() as d: si1.write(d, formats=['nifti'], opts=self.opts) # Read back the NIfTI data and verify that the header was modified si2 = Series( d, imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.shape, si2.shape) np.testing.assert_array_equal(si1, si2)
def test_write_4d_itk(self): log = logging.getLogger("TestWritePlugin.test_write_4d_itk") log.debug("test_write_4d_itk") si = Series( [os.path.join('data', 'itk', 'time', 'Image_00000.mha'), os.path.join('data', 'itk', 'time', 'Image_00001.mha'), os.path.join('data', 'itk', 'time', 'Image_00002.mha')], imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si.dtype, np.uint16) self.assertEqual(si.shape, (3, 3, 192, 152)) # np.testing.assert_array_almost_equal(np.arange(0, 10*2.256, 2.256), hdr.getTimeline(), decimal=2) # log.debug("test_write_4d_itk: sliceLocations", hdr.sliceLocations) # log.debug("test_write_4d_itk: tags {}".format(hdr.tags)) # log.debug("test_write_4d_itk: spacing", hdr.spacing) # log.debug("test_write_4d_itk: imagePositions", hdr.imagePositions) # log.debug("test_write_4d_itk: orientation", hdr.orientation) # Modify header si.sliceLocations = (1, 2, 3) si.spacing = (3, 2, 1) for slice in range(si.shape[1]): si.imagePositions = { slice: np.array([slice, 1, 0]) } si.orientation = np.array([0, 0, 1, 0, 1, 0]) for slice in range(si.shape[1]): si.imagePositions = { slice: si.getPositionForVoxel(np.array([slice, 0, 0])).reshape((3, 1)) } si.sort_on = imagedata.formats.SORT_ON_TAG log.debug("test_write_4d_itk: hdr.sort_on {}".format( imagedata.formats.sort_on_to_str(si.sort_on))) si.output_dir = 'single' with tempfile.TemporaryDirectory() as d: si.write(d, self.opts) # Read back the ITK data and verify that the header was modified si2 = Series( d, imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual((3, 3, 192, 152), si2.shape) # np.testing.assert_array_equal(si, si2) # np.testing.assert_array_equal(hdr.sliceLocations, hdr2.sliceLocations) # log.debug("hdr2.tags.keys(): {}".format(hdr2.tags.keys())) tags = {} for slice in range(3): tags[slice] = np.arange(3) self.assertEqual(tags.keys(), si2.tags.keys()) for k in si2.tags.keys(): np.testing.assert_array_equal(tags[k], si2.tags[k]) np.testing.assert_array_equal(si.spacing, si2.spacing) image_positions = {} for slice in range(3): image_positions[slice] = np.array([0, 1 + 3 * slice, 0]) self.assertEqual(image_positions.keys(), si2.imagePositions.keys()) np.testing.assert_array_equal(si.orientation, si2.orientation)