Esempio n. 1
0
    def test_export2tiff_data_band_tuple_time_tuple(self):
        data = np.arange(10 * 3 * 2 * 6, dtype=float).reshape(10, 3, 2, 6)
        bands = (1, 4)
        times = (2, 8)
        bands_selection = np.arange(bands[0], bands[1] + 1)
        times_selection = np.arange(times[0], times[1] + 1)

        subset = data[times_selection][..., bands_selection].squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.data['data'] = data

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.DATA, 'data'),
                                folder=tmp_dir_name,
                                band_indices=bands,
                                date_indices=times,
                                image_dtype=data.dtype)
            task.execute(eop, filename=tmp_file_name)

            # split times and bands in raster and mimic the initial shape
            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            raster = raster.reshape(raster.shape[0], raster.shape[1],
                                    len(times_selection), len(bands_selection))
            raster = np.moveaxis(raster, -2, 0)

            self.assertTrue(np.all(subset == raster))
Esempio n. 2
0
    def test_export2tiff_order(self):
        data = np.arange(10 * 3 * 2 * 6, dtype=float).reshape(10, 3, 2, 6)
        bands = [2, 3, 0]
        times = [1, 7]

        # create ordered subset
        ordered_subset = []
        for t in times:
            for b in bands:
                ordered_subset.append(data[t][..., b])
        ordered_subset = np.array(ordered_subset)
        ordered_subset = np.moveaxis(ordered_subset, 0, -1)

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.data['data'] = data

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.DATA, 'data'),
                                folder=tmp_dir_name,
                                band_indices=bands,
                                date_indices=times,
                                image_dtype=data.dtype)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            self.assertTrue(np.all(ordered_subset == raster))
Esempio n. 3
0
    def setUpClass(cls):
        geojson = read_data(os.path.join(cls.INPUT_FOLDER,
                                         'cies_islands.json'))
        cls.area = shape(geojson)

        cls.test_cases = [
            cls.SplitterTestCase('BBoxSplitter',
                                 BBoxSplitter([cls.area],
                                              CRS.WGS84,
                                              5,
                                              reduce_bbox_sizes=True),
                                 bbox_len=19),
            cls.SplitterTestCase('OsmSplitter',
                                 OsmSplitter([cls.area],
                                             CRS.WGS84,
                                             15,
                                             reduce_bbox_sizes=True),
                                 bbox_len=24),
            cls.SplitterTestCase('TileSplitter',
                                 TileSplitter(
                                     [cls.area],
                                     CRS.WGS84, ('2017-10-01', '2018-03-01'),
                                     tile_split_shape=40,
                                     data_source=DataSource.SENTINEL2_L1C,
                                     instance_id=cls.INSTANCE_ID,
                                     reduce_bbox_sizes=True),
                                 bbox_len=13)
        ]
Esempio n. 4
0
    def test_export2tiff_mask_tuple_string(self):
        eop = EOPatch.load(self.PATCH_FILENAME)
        dates = np.array(eop.timestamp)

        mask = np.arange(len(dates) * 3 * 2 * 1).reshape(len(dates), 3, 2, 1)
        eop.mask['mask'] = mask

        indices = [2, 4]

        # day time gets floored
        times = (datetime_to_iso(dates[indices[0]]),
                 datetime_to_iso(dates[indices[1]]))

        selection = np.nonzero(
            np.where((dates >= iso_to_datetime(times[0])) &
                     (dates <= iso_to_datetime(times[1])), dates, 0))

        subset = mask[selection].squeeze()

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.MASK, 'mask'),
                                folder=tmp_dir_name,
                                date_indices=times)
            task.execute(eop, filename=tmp_file_name)

            # rasterio saves `bands` to the last dimension, move it up front
            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            raster = np.moveaxis(raster, -1, 0)

            self.assertTrue(np.all(subset == raster))
Esempio n. 5
0
    def test_img_read(self):
        W, H = 2048, 2048
        formats = [('tif', 13577.49), ('jpg', 52.41), ('png', 52.34), ('jp2', 47.09)]
        for ext, exp_mean in formats:
            with self.subTest(msg=ext):
                filename = os.path.join(self.INPUT_FOLDER, 'ml.{}'.format(ext))
                img = read_data(filename)
                self.assertEqual(np.shape(img), (W, H, 3) if ext != 'jp2' else (343, 343, 3),
                                 "{} image dimension mismatch".format(ext))
                self.assertAlmostEqual(np.mean(img), exp_mean, delta=1e-1,
                                       msg="{} image has incorrect values".format(ext))

                new_filename = os.path.join(self.OUTPUT_FOLDER, os.path.split(filename)[-1])
                write_data(new_filename, img)
                new_img = read_data(new_filename)
                if ext != 'jpg':
                    self.assertTrue(np.array_equal(img, new_img), msg="Original and new image are not the same")
Esempio n. 6
0
 def test_img_read(self):
     W, H = 2048, 2048
     exts = frozenset(['tif', 'jpg', 'png'])
     for ext in exts:
         with self.subTest(msg=ext):
             filepath = '{}/ml.{}'.format(self.INPUT_FOLDER, ext)
             img = read_data(filepath)
             w, h, d = np.shape(img)
             self.assertEqual(w, W, "Width mismatch")
             self.assertEqual(h, H, "Height mismatch")
             self.assertEqual(d, 3, "Expected RGB")
Esempio n. 7
0
    def test_export2tiff_mask_timeless(self):
        mask_timeless = np.arange(3 * 3 * 1).reshape(3, 3, 1)
        subset = mask_timeless.squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.mask_timeless['mask_timeless'] = mask_timeless

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.MASK_TIMELESS, 'mask_timeless'),
                                folder=tmp_dir_name)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            self.assertTrue(np.all(subset == raster))
Esempio n. 8
0
 def test_img_read(self):
     W, H = 2048, 2048
     formats = [('tif', 13577.49), ('jpg', 52.41), ('png', 52.34),
                ('jp2', 47.09)]
     for ext, exp_mean in formats:
         with self.subTest(msg=ext):
             filepath = '{}/ml.{}'.format(self.INPUT_FOLDER, ext)
             img = read_data(filepath)
             self.assertEqual(np.shape(img), (W, H, 3) if ext != 'jp2' else
                              (343, 343, 3),
                              "{} image dimension mismatch".format(ext))
             self.assertAlmostEqual(
                 np.mean(img),
                 exp_mean,
                 delta=1e-1,
                 msg="{} image has incorrect values".format(ext))
Esempio n. 9
0
    def test_export2tiff_mask_single(self):
        mask = np.arange(5 * 3 * 3 * 1).reshape(5, 3, 3, 1)
        times = [4]
        subset = mask[times].squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.mask['mask'] = mask

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.MASK, 'mask'),
                                folder=tmp_dir_name,
                                date_indices=times)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            self.assertTrue(np.all(subset == raster))
Esempio n. 10
0
    def test_export2tiff_scalar_timeless_list(self):
        scalar_timeless = np.arange(5)
        bands = [3, 0, 2]
        subset = scalar_timeless[bands]

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.scalar_timeless['scalar_timeless'] = scalar_timeless

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff(
                (FeatureType.SCALAR_TIMELESS, 'scalar_timeless'),
                folder=tmp_dir_name,
                band_indices=bands)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            self.assertTrue(np.all(subset == raster))
Esempio n. 11
0
    def test_export2tiff_data_timeless_band_list(self):
        data_timeless = np.arange(3 * 2 * 5, dtype=float).reshape(3, 2, 5)
        bands = [2, 4, 1, 0]
        subset = data_timeless[..., bands].squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.data_timeless['data_timeless'] = data_timeless

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.DATA_TIMELESS, 'data_timeless'),
                                folder=tmp_dir_name,
                                band_indices=bands,
                                image_dtype=data_timeless.dtype)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))

            self.assertTrue(np.all(subset == raster))
Esempio n. 12
0
    def test_export2tiff_mask_list(self):
        mask = np.arange(5 * 3 * 2 * 1).reshape(5, 3, 2, 1)
        times = [4, 2]
        subset = mask[times].squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.mask['mask'] = mask

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.MASK, 'mask'),
                                folder=tmp_dir_name,
                                date_indices=times)
            task.execute(eop, filename=tmp_file_name)

            # rasterio saves `bands` to the last dimension, move it up front
            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))
            raster = np.moveaxis(raster, -1, 0)

            self.assertTrue(np.all(subset == raster))
Esempio n. 13
0
    def test_export2tiff_scalar_band_single_time_single(self):
        scalar = np.arange(10 * 6, dtype=float).reshape(10, 6)
        bands = [3]
        times = [7]

        subset = scalar[times][..., bands].squeeze()

        eop = EOPatch.load(self.PATCH_FILENAME)
        eop.scalar['scalar'] = scalar

        with tempfile.TemporaryDirectory() as tmp_dir_name:
            tmp_file_name = 'temp_file.tiff'
            task = ExportToTiff((FeatureType.SCALAR, 'scalar'),
                                folder=tmp_dir_name,
                                band_indices=bands,
                                date_indices=times,
                                image_dtype=scalar.dtype)
            task.execute(eop, filename=tmp_file_name)

            raster = read_data(os.path.join(tmp_dir_name, tmp_file_name))

            self.assertTrue(np.all(subset == raster))
Esempio n. 14
0
 def load_truth(self):
     return [tuple(item) for item in read_data(self.get_filename())]