def test_raster_math_mean(self):
        for is_3d in [True, False]:
            rM = processing.RasterMath(raster,
                                       return_3d=is_3d,
                                       verbose=is_3d,
                                       in_image_mask=mask,
                                       n_jobs=is_3d + 1)
            if is_3d is False:
                # test without compression with reading/writing pixel per pixel, very slow...
                rM.custom_block_size(10, 10)  # to have full masked block
                rM.add_function(np.mean,
                                '/tmp/mean.tif',
                                axis=is_3d + 1,
                                dtype=np.int16)
                rM.run()
            else:
                # test using default block size and high compressio of raster
                rM.add_function(np.mean,
                                '/tmp/mean.tif',
                                axis=is_3d + 1,
                                dtype=np.int16,
                                compress='high')
                rM.run()
            assert (gdal.Open('/tmp/mean.tif').RasterCount == 1)
            assert (gdal.Open('/tmp/mean.tif').RasterXSize == rM.n_columns)
            assert (gdal.Open('/tmp/mean.tif').RasterYSize == rM.n_lines)

            os.remove('/tmp/mean.tif')
    def test_mask(self):
        for is_3d in [True, False]:
            mask = '/tmp/mask.tif'
            processing.image_mask_from_vector(vector, raster, mask)
            mask_src = gdal.Open(mask)
            raster_src = gdal.Open(raster)
            mask_proj = osr.SpatialReference(wkt=mask_src.GetProjection())
            raster_proj = osr.SpatialReference(wkt=raster_src.GetProjection())
            assert (raster_proj.GetAttrValue('projcs') ==
                    mask_proj.GetAttrValue('projcs'))
            assert (mask_src.RasterCount == 1)
            assert (mask_src.RasterXSize == raster_src.RasterXSize)
            assert (mask_src.RasterYSize == raster_src.RasterYSize)
            rM_band = processing.RasterMath(raster, return_3d=is_3d)
            for idx, band in enumerate(rM_band.read_band_per_band()):
                pass
            rM_band.add_function(np.mean,
                                 axis=is_3d + 1,
                                 out_image='/tmp/mean.tif')
            rM_band.run()

            self.assertRaises(MemoryError, rM_band.run, '1K')

            assert (idx + 1 == rM_band.n_bands)
            x = rM_band.get_random_block()
            assert (x.ndim == is_3d + 2)
            os.remove('/tmp/mean.tif')
    def test_3d(self):
        rM_3d = processing.RasterMath(raster, return_3d=True)
        self.assertRaises(ValueError, rM_3d.get_block, 100)
        assert (rM_3d.get_random_block().ndim == 3)
        for block in rM.read_block_per_block():
            pass
        for band in rM.read_band_per_band():
            pass
        rM.custom_block_size(128, 256)
        assert (rM.y_block_size == 256)
        assert (rM.x_block_size == 128)

        rM.custom_block_size(-1, -1)
        assert (rM.x_block_size == rM.n_columns)
        assert (rM.y_block_size == rM.n_lines)
        rM.custom_block_size(1 / 2, 1 / 3)
        assert (rM.x_block_size == np.ceil(1 / 2 * rM.n_columns))
        assert (rM.y_block_size == np.ceil(1 / 3 * rM.n_lines))

        rM.add_image(raster)
        self.assertRaises(ValueError, rM.add_image, '/tmp/100x100size.tif')
        return_x = lambda x: x[0].astype(np.int16)
        rM.add_function(return_x, '/tmp/test_double.tif')
        rM.run()
        os.remove('/tmp/test_double.tif')
        assert (np.all(rM.get_random_block(random_state=12)) == np.all(
            rM.get_random_block(random_state=12)))
Esempio n. 4
0
 def test_readPerBand(self):
     for is_3d in [True,False]:
         rM_band = processing.RasterMath(raster,return_3d=is_3d,in_image_mask=mask)
         for idx,band in enumerate(rM_band.read_band_per_band()):
             print(band.ndim)
             if is_3d is True:
                 assert(band.ndim == 2)
             else:
                 assert(band.ndim == 2)
         del rM_band
Esempio n. 5
0
 def test_mask(self)            :
     for is_3d in [True, False]:
         mask = '/tmp/mask.tif'
         processing.image_mask_from_vector(vector,raster,mask)
         mask_src = gdal.Open(mask)
         raster_src = gdal.Open(raster)
         assert(mask_src.GetProjection() == raster_src.GetProjection())
         assert(mask_src.RasterCount == 1)
         assert(mask_src.RasterXSize == raster_src.RasterXSize)
         assert(mask_src.RasterYSize == raster_src.RasterYSize)
         rM_band = processing.RasterMath(raster,return_3d=is_3d)
         for idx,band in enumerate(rM_band.read_band_per_band()):
             pass
         rM_band.add_function(np.mean,axis=1,out_image='/tmp/mean.tif')
         rM_band.run()
         assert(idx+1 == rM_band.n_bands)                        
         x = rM_band.get_random_block()
         assert(x.ndim == is_3d+2)
         os.remove('/tmp/mean.tif')
Esempio n. 6
0
 def test_3d(self)            :
     rM_3d = processing.RasterMath(raster,return_3d=True)
     self.assertRaises(ValueError,rM_3d.get_block,100)
     assert(rM_3d.get_random_block().ndim == 3)
     for block in rM.read_block_per_block():
         pass
     for band in rM.read_band_per_band():
         pass
     rM.custom_block_size(128,256)
     assert(rM.y_block_size==256)
     assert(rM.x_block_size==128)
     
     rM.custom_block_size(-1,-1)
     assert(rM.x_block_size == rM.n_columns)
     assert(rM.y_block_size == rM.n_lines)
     rM.custom_block_size(1/2,1/3)
     assert(rM.x_block_size == np.ceil(1/2*rM.n_columns))
     assert(rM.y_block_size == np.ceil(1/3*rM.n_lines))
     
     rM.add_image(raster)
     
     assert(np.all(rM.get_random_block(random_state=12))== np.all(rM.get_random_block(random_state=12)))
Esempio n. 7
0
# -*- coding: utf-8 -*-
import unittest
from shutil import copyfile
import numpy as np
from museotoolbox import processing
from museotoolbox.datasets import load_historical_data
from osgeo import gdal

import os

raster,vector = load_historical_data()
rM = processing.RasterMath(raster)
mask = processing.image_mask_from_vector(vector,raster,'/tmp/mask.tif')

class TestRaster(unittest.TestCase):
    def test_convert_datatype(self):
        
        self._assert_np_gdt(np.dtype('uint8').name,gdal.GDT_Byte)
        self._assert_np_gdt(np.dtype('int16').name,gdal.GDT_Int16)
        self._assert_np_gdt(np.dtype('uint16').name,gdal.GDT_UInt16)
        self._assert_np_gdt(np.dtype('int32').name,gdal.GDT_Int32)
        self._assert_np_gdt(np.dtype('uint32').name,gdal.GDT_UInt32)
        
        self._assert_np_gdt(np.dtype('int64').name,gdal.GDT_Int32)
        self._assert_np_gdt(np.dtype('uint64').name,gdal.GDT_Int32)
        
        self._assert_np_gdt(np.dtype('uint16').name,gdal.GDT_UInt16)
        self._assert_np_gdt(np.dtype('float32').name,gdal.GDT_Float32)
        self._assert_np_gdt(np.dtype('float64').name,gdal.GDT_Float64)
        
        self._assert_np_gdt(gdal.GDT_Byte,np.uint8)
 def test_get_parameter(self):
     rM = processing.RasterMath(raster)
     assert (isinstance(rM.get_raster_parameters(), dict))
     rM.custom_raster_parameters(['TILED=NO'])
     assert (rM.get_raster_parameters() == ['TILED=NO'])