コード例 #1
0
    def test_get_limits(self, dim_order, ranges):
        descriptor = SubImageDescriptor.from_dict({
            "filename": 'TestFileName',
            "suffix": "SUFFIX",
            "index": 0,
            "data_type": "XXXX",
            "template": [],
            "dim_order": dim_order,
            "ranges": ranges,
            "file_format": "mhd",
            "msb": "False",
            "compression": [],
            "voxel_size": [1, 1, 1]
        })

        read_file = Mock()
        global_image_size = len(dim_order) * [50]
        image = create_dummy_image(global_image_size)
        image_wrapper = image
        read_file.read_image.return_value = image_wrapper.image

        file_factory = Mock()
        file_factory.create_read_file.return_value = read_file

        si = SubImage(descriptor, file_factory)

        minv, maxv = si.get_limits()
        actual_min = np.min(image_wrapper.image.get_raw())
        actual_max = np.max(image_wrapper.image.get_raw())
        self.assertEqual(minv, actual_min)
        self.assertEqual(maxv, actual_max)
コード例 #2
0
    def test_read_image(self, dim_order, ranges, start, size):
        descriptor = SubImageDescriptor.from_dict({
            "filename": 'TestFileName', "suffix": "SUFFIX", "index": 0,
            "data_type": "XXXX", "template": [], "dim_order": dim_order,
            "ranges": ranges, "file_format": "mhd", "msb": "False",
            "compression": []})

        read_file = Mock()
        global_image_size = len(dim_order)*[50]
        image = create_dummy_image(global_image_size)
        image_wrapper = image
        sub_image = image_wrapper.get_sub_image(start, size)
        read_file.read_image.return_value = sub_image.image

        file_factory = Mock()
        file_factory.create_read_file.return_value = read_file

        si = SubImage(descriptor, file_factory)

        # CoordinateTransforer is tested elsewhere. Here we do not make sure
        # the coordinates have been transformed, using another
        # CoordinateTransformer to check, but we are not verifying the
        # transformations are correct, since the CoordinateTransformer test
        # should do this
        transformer = CoordinateTransformer(
            descriptor.ranges.origin_start, descriptor.ranges.image_size,
            descriptor.axis)
        expected_start, expected_size = transformer.to_local(start, size)
        test_image = si.read_image(start, size)
        np.testing.assert_array_equal(test_image.image, sub_image.image)
        np.testing.assert_array_equal(read_file.read_image.call_args[0][0], expected_start)
        np.testing.assert_array_equal(read_file.read_image.call_args[0][1], expected_size)
コード例 #3
0
    def test_write_image(self, image_size):

        initial_image = create_empty_image(image_size)
        linear_image_file = MockAbstractLinearImageFile(initial_image)

        dummy_image = create_dummy_image(image_size)
        source = SimpleMockSource(dummy_image)

        linear_image_file.write_image(source, None)
        np.testing.assert_equal(initial_image.image, dummy_image.image)
コード例 #4
0
    def test_set_sub_image(self, main_dim_size, main_origin, sub_dim_size,
                           sub_origin):
        num_dimensions = len(main_dim_size)
        main_image = create_dummy_image(main_dim_size, origin=main_origin)
        main_image_unset = ImageWrapper(main_origin, image_size=main_dim_size)
        sub_image = create_dummy_image(sub_dim_size,
                                       origin=sub_origin,
                                       value_base=1000)
        is_valid = True
        for dim_index in range(0, num_dimensions):
            if sub_origin[dim_index] < main_origin[dim_index] or \
                                    sub_origin[dim_index] + sub_dim_size[dim_index] > \
                                    main_origin[dim_index] + main_dim_size[dim_index]:
                is_valid = False
        if is_valid:
            main_image.set_sub_image(sub_image)
            main_image_unset.set_sub_image(sub_image)
            self.assertTrue(
                np.array_equal(
                    main_image.get_sub_image(sub_origin, sub_dim_size).image,
                    sub_image.image))
            self.assertTrue(
                np.array_equal(
                    main_image_unset.get_sub_image(sub_origin,
                                                   sub_dim_size).image,
                    sub_image.image))

        else:
            try:
                main_image.set_sub_image(sub_image)
                self.fail("Expeced this function call to fail")
            except ValueError:
                pass
            try:
                main_image.get_sub_image(sub_origin, sub_dim_size).image
                self.fail("Expeced this function call to fail")
            except ValueError:
                pass
コード例 #5
0
    def test_write_image(self, dim_order, ranges, start, size):
        descriptor = SubImageDescriptor.from_dict({
            "filename": 'TestFileName',
            "suffix": "SUFFIX",
            "index": 0,
            "data_type": "XXXX",
            "template": [],
            "dim_order": dim_order,
            "ranges": ranges,
            "file_format": "mhd",
            "msb": "False",
            "compression": [],
            "voxel_size": [1, 1, 1]
        })

        file_factory = Mock()
        out_file = Mock()
        file_factory.create_write_file.return_value = out_file

        # This test verifies that the read source supplied to the output file
        # correctly converts from the file coordinate system to the global
        # coordinate system
        source = Mock()
        dummy_image = create_dummy_image(len(size) * [20])
        source.read_image.return_value = dummy_image

        si = SubImage(descriptor, file_factory)
        si.write_image(source, None)

        # CoordinateTransforer is tested elsewhere.
        transformer = CoordinateTransformer(descriptor.ranges.origin_start,
                                            descriptor.ranges.image_size,
                                            descriptor.axis)
        local_start, local_size = transformer.to_local(start, size)

        # Fetch the local data source provided to the file write method
        local_data_source = out_file.write_image.call_args[0][0]

        # Read from the local data source to trigger a read in the global source
        input_image = local_data_source.read_image(local_start,
                                                   local_size).image
        input_image = local_data_source.read_image(local_start,
                                                   local_size).image

        # Get the arguments
        test_start = source.read_image.call_args[0][0]
        test_size = source.read_image.call_args[0][1]

        np.testing.assert_array_equal(test_start, local_start)
        np.testing.assert_array_equal(test_size, local_size)
コード例 #6
0
    def test_close(self):
        descriptor = SubImageDescriptor.from_dict({
            "filename":
            'TestFileName',
            "ranges": [[0, 10, 0, 0], [0, 10, 0, 0], [0, 10, 0, 0]],
            "suffix":
            "SUFFIX",
            "index":
            0,
            "dim_order": [1, 2, 3],
            "data_type":
            "XXXX",
            "template": [],
            "file_format":
            "mhd",
            "msb":
            "False",
            "compression": [],
            "voxel_size": [1, 1, 1]
        })

        # Check that reading creates only one read file and it is left open
        file_factory = FakeFileFactory(create_dummy_image([11, 11, 11]))
        self.assertEqual(len(file_factory.read_files), 0)
        self.assertEqual(len(file_factory.write_files), 0)
        si = SubImage(descriptor, file_factory)
        si.read_image([1, 1, 1], [1, 1, 1])
        self.assertEqual(len(file_factory.read_files), 1)
        self.assertTrue(file_factory.read_files[0].open)
        self.assertEqual(len(file_factory.write_files), 0)
        self.assertTrue(file_factory.read_files[0].open)
        si.read_image([1, 1, 1], [2, 2, 2])
        self.assertEqual(len(file_factory.read_files), 1)
        self.assertEqual(len(file_factory.write_files), 0)

        # Check that close() closes the read image
        self.assertTrue(file_factory.read_files[0].open)
        si.close()
        self.assertEqual(len(file_factory.read_files), 1)
        self.assertEqual(len(file_factory.write_files), 0)
        self.assertFalse(file_factory.read_files[0].open)

        # Check that file is closed after writing
        source = FakeImageFileReader(descriptor)
        self.assertEqual(len(file_factory.write_files), 0)
        si.write_image(source, None)
        self.assertEqual(len(file_factory.write_files), 1)
        self.assertFalse(file_factory.write_files[0].open)
コード例 #7
0
    def test_local_source(self, origin, global_size, dim_order, dim_flip, start, size):
        transformer = CoordinateTransformer(origin, global_size, Axis(dim_order, dim_flip))
        data_source = Mock()
        test_image = create_dummy_image(global_size)
        data_source.read_image.return_value = test_image
        source = LocalSource(data_source, transformer)
        local_image = source.read_image(start, size).image
        global_start, t_global_size = transformer.to_global(start, size)
        np.testing.assert_array_equal(data_source.read_image.call_args[0][0],
                                      start)
        np.testing.assert_array_equal(data_source.read_image.call_args[0][1],
                                      size)

        self.assertEqual(data_source.close.call_count, 0)
        source.close()
        self.assertEqual(data_source.close.call_count, 1)

        global_image = transformer.image_to_global(local_image)
        np.testing.assert_array_equal(local_image, test_image.image)
コード例 #8
0
    def test_combined_image(self):
        d1 = self._make_descriptor( 1,  [[ 0, 11, 0, 2], [ 0, 11, 0, 2], [ 0, 11, 0, 2]])
        d2 = self._make_descriptor( 2,  [[ 0, 11, 0, 2], [ 0, 11, 0, 2], [ 8, 21, 2, 2]])
        d3 = self._make_descriptor( 3,  [[ 0, 11, 0, 2], [ 0, 11, 0, 2], [18, 29, 2, 0]])
        d4 = self._make_descriptor( 4,  [[ 0, 11, 0, 2], [ 8, 21, 2, 2], [ 0, 11, 0, 2]])
        d5 = self._make_descriptor( 5,  [[ 0, 11, 0, 2], [ 8, 21, 2, 2], [ 8, 21, 2, 2]])
        d6 = self._make_descriptor( 6,  [[ 0, 11, 0, 2], [ 8, 21, 2, 2], [18, 29, 2, 0]])
        d7 = self._make_descriptor( 7,  [[ 0, 11, 0, 2], [18, 29, 2, 0], [ 0, 11, 0, 2]])
        d8 = self._make_descriptor( 8,  [[ 0, 11, 0, 2], [18, 29, 2, 0], [ 8, 21, 2, 2]])
        d9 = self._make_descriptor( 9,  [[ 0, 11, 0, 2], [18, 29, 2, 0], [18, 29, 2, 0]])

        d11 = self._make_descriptor(11, [[ 8, 21, 2, 2], [ 0, 11, 0, 2], [ 0, 11, 0, 2]])
        d12 = self._make_descriptor(12, [[ 8, 21, 2, 2], [ 0, 11, 0, 2], [ 8, 21, 2, 2]])
        d13 = self._make_descriptor(13, [[ 8, 21, 2, 2], [ 0, 11, 0, 2], [18, 29, 2, 0]])
        d14 = self._make_descriptor(14, [[ 8, 21, 2, 2], [ 8, 21, 2, 2], [ 0, 11, 0, 2]])
        d15 = self._make_descriptor(15, [[ 8, 21, 2, 2], [ 8, 21, 2, 2], [ 8, 21, 2, 2]])
        d16 = self._make_descriptor(16, [[ 8, 21, 2, 2], [ 8, 21, 2, 2], [18, 29, 2, 0]])
        d17 = self._make_descriptor(17, [[ 8, 21, 2, 2], [18, 29, 2, 0], [ 0, 11, 0, 2]])
        d18 = self._make_descriptor(18, [[ 8, 21, 2, 2], [18, 29, 2, 0], [ 8, 21, 2, 2]])
        d19 = self._make_descriptor(19, [[ 8, 21, 2, 2], [18, 29, 2, 0], [18, 29, 2, 0]])

        d21 = self._make_descriptor(21, [[18, 29, 2, 0], [ 0, 11, 0, 2], [ 0, 11, 0, 2]])
        d22 = self._make_descriptor(22, [[18, 29, 2, 0], [ 0, 11, 0, 2], [ 8, 21, 2, 2]])
        d23 = self._make_descriptor(23, [[18, 29, 2, 0], [ 0, 11, 0, 2], [18, 29, 2, 0]])
        d24 = self._make_descriptor(24, [[18, 29, 2, 0], [ 8, 21, 2, 2], [ 0, 11, 0, 2]])
        d25 = self._make_descriptor(25, [[18, 29, 2, 0], [ 8, 21, 2, 2], [ 8, 21, 2, 2]])
        d26 = self._make_descriptor(26, [[18, 29, 2, 0], [ 8, 21, 2, 2], [18, 29, 2, 0]])
        d27 = self._make_descriptor(27, [[18, 29, 2, 0], [18, 29, 2, 0], [ 0, 11, 0, 2]])
        d28 = self._make_descriptor(28, [[18, 29, 2, 0], [18, 29, 2, 0], [ 8, 21, 2, 2]])
        d29 = self._make_descriptor(29, [[18, 29, 2, 0], [18, 29, 2, 0], [18, 29, 2, 0]])

        descriptors = [d1, d2, d3, d4, d5, d6, d7, d8, d9,
                       d11, d12, d13, d14, d15, d16, d17, d18, d19,
                       d21, d22, d23, d24, d25, d26, d27, d28, d29]

        image = create_dummy_image([30, 30, 30])
        file_factory = FakeFileFactory(image=image)

        ci = CombinedImage(descriptors, file_factory)
        source = Mock()
        self.assertEqual(len(file_factory.write_files), 0)
        ci.write_image(source, False)
        self.assertEqual(len(file_factory.write_files), 27)
        for descriptor, write_file in zip(descriptors, file_factory.write_files):
            self.assertEqual(descriptor.ranges.ranges, write_file.descriptor.ranges.ranges)
            self.assertFalse(write_file.open)

        self.assertEqual(len(file_factory.read_files), 0)

        # Test reading and assembling the whole image
        read_image = ci.read_image([0, 0, 0], [30, 30, 30], global_coordinate_transformer([30, 30, 30]))
        np.testing.assert_array_equal(image.image, read_image.image)

        # Test reading part of the image excluding some of the subimages
        read_image = ci.read_image([0, 0, 0], [5, 5, 5], global_coordinate_transformer([30, 30, 30]))
        np.testing.assert_array_equal(image.get_sub_image([0, 0, 0], [5, 5, 5]).image, read_image.image)

        # Test file closing
        self.assertEqual(len(file_factory.read_files), 27)
        for read_file in file_factory.read_files:
            self.assertTrue(read_file.open)
        ci.close()
        for read_file in file_factory.read_files:
            self.assertFalse(read_file.open)

        limits = ci.get_limits()
        self.assertEqual(limits.min, np.min(image.image.get_raw()))
        self.assertEqual(limits.max, np.max(image.image.get_raw()))
コード例 #9
0
 def test_read_image(self, image_size, start, size):
     dummy_image = create_dummy_image(image_size)
     linear_image_file = MockAbstractLinearImageFile(dummy_image)
     read_image = linear_image_file.read_image(start, size)
     test_image = dummy_image.get_sub_image(start, size)
     np.testing.assert_equal(read_image, test_image.image)