def test_landsat_c1_toa_cloud_mask_cirrus(img_value, cirrus, expected): input_img = ee.Image.constant(int(img_value, 2)).rename(['BQA']) input_args = {'input_img': input_img} if cirrus is not None: input_args['cirrus_flag'] = cirrus output_img = common.landsat_c1_toa_cloud_mask(**input_args) assert utils.constant_image_value(ee.Image(output_img))['BQA'] == expected
def from_landsat_c1_toa(cls, toa_image, cloudmask_args={}, **kwargs): """Returns a SSEBop Image instance from a Landsat Collection 1 TOA image Parameters ---------- toa_image : ee.Image A raw Landsat Collection 1 TOA image. cloudmask_args : dict keyword arguments to pass through to cloud mask function kwargs : dict Keyword arguments to pass through to Image init function Returns ------- Image """ toa_image = ee.Image(toa_image) # Use the SPACECRAFT_ID property identify each Landsat type spacecraft_id = ee.String(toa_image.get('SPACECRAFT_ID')) # Rename bands to generic names # Rename thermal band "k" coefficients to generic names input_bands = ee.Dictionary({ # 'LANDSAT_4': ['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'BQA'], 'LANDSAT_5': ['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'BQA'], 'LANDSAT_7': ['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6_VCID_1', 'BQA'], 'LANDSAT_8': ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'BQA'] }) output_bands = [ 'blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'lst', 'BQA' ] k1 = ee.Dictionary({ # 'LANDSAT_4': 'K1_CONSTANT_BAND_6', 'LANDSAT_5': 'K1_CONSTANT_BAND_6', 'LANDSAT_7': 'K1_CONSTANT_BAND_6_VCID_1', 'LANDSAT_8': 'K1_CONSTANT_BAND_10' }) k2 = ee.Dictionary({ # 'LANDSAT_4': 'K2_CONSTANT_BAND_6', 'LANDSAT_5': 'K2_CONSTANT_BAND_6', 'LANDSAT_7': 'K2_CONSTANT_BAND_6_VCID_1', 'LANDSAT_8': 'K2_CONSTANT_BAND_10' }) prep_image = toa_image\ .select(input_bands.get(spacecraft_id), output_bands)\ .set('k1_constant', ee.Number(toa_image.get(k1.get(spacecraft_id))))\ .set('k2_constant', ee.Number(toa_image.get(k2.get(spacecraft_id)))) # Build the input image input_image = ee.Image([ landsat.lst(prep_image), landsat.ndvi(prep_image), ]) # Apply the cloud mask and add properties input_image = input_image\ .updateMask(common.landsat_c1_toa_cloud_mask( toa_image, **cloudmask_args))\ .set({ 'system:index': toa_image.get('system:index'), 'system:time_start': toa_image.get('system:time_start'), 'system:id': toa_image.get('system:id'), }) # Instantiate the class return cls(ee.Image(input_image), **kwargs)
def test_landsat_c1_toa_cloud_mask(img_value, expected): input_img = ee.Image.constant(int(img_value, 2)).rename(['BQA']) output_img = common.landsat_c1_toa_cloud_mask(input_img) assert utils.constant_image_value(ee.Image(output_img))['BQA'] == expected