Exemple #1
0
    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)
Exemple #3
0
    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)