在进行相关操作时,往往需要对一部分范围的值进行掩膜,以去掉这一部分的值。Earth Engine中已经提供了相关的掩膜操作,下面将会详细的介绍一下mask、selfMask、updateMask。
import ee
import geemap
ee.Initialize()
# 加载一景 Sentinel-2 地面反射率数据
img = ee.Image('COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG')
true_color_viz = {
'bands': ['B4', 'B3', 'B2'],
'min': 0,
'max': 2700,
'gamma': 1.3,
}
相当于是对整幅影像进行一个掩膜,有像素值的区域为1,无像素值区域为0。
Map = geemap.Map()
Map.centerObject(img, 10)
Map.add_layer(img, true_color_viz, 'Sentinel-2 image')
# 获取所有图像波段的 mask,每个波段都是一个独立的mask。 有像素值为 1,无像素值为 0。
multi_band_mask_img = img.mask()
Map.add_layer(multi_band_mask_img, None, 'Multi-band mask image')
# 获取单一波段的 mask
single_band_mask_img = img.select('B1').mask()
Map.add_layer(single_band_mask_img, None, 'Single-band mask image')
Map
这相当于是一个自身掩膜,先选择一个波段构建布尔型值,只包括0和1,然后将掩膜对自身进行掩膜,掩膜中的0值将会变为None。
Map = geemap.Map()
Map.centerObject(img, 10)
# 从 SWIR1 波段创建布尔型陆地掩码,水的值为 0,陆地的值为 1。
land_mask = img.select('B11').gt(100)
display('Land mask', land_mask)
Map.add_layer(land_mask, {'palette': ['blue', 'lightgreen']}, 'Land mask')
# 像素值等于 0(水)的部分将会被掩膜掉,没有数值。
land_mask_masked = land_mask.selfMask()
display('Land mask, masked', land_mask_masked)
Map.add_layer(land_mask_masked, {'palette': ['gold']}, 'Land mask, masked')
Map
这一步是在selfMask的基础上,对原始影像进行更新掩膜,也可以指定特定的波段进行掩膜。
Map = geemap.Map()
Map.centerObject(img, 10)
# 将单波段陆地掩模应用于所有图像波段,掩模中等于 0 的像素值在图像中变得无效。
img_masked = img.updateMask(land_mask)
display('Image, land only', img_masked)
Map.add_layer(img_masked, true_color_viz, 'Image, land only')
# 将mask应用于特定的波段
img_band_subset = img.select(['B4', 'B3', 'B2'])
band_specific_masks = img_band_subset.gt(200)
img_band_subset_masked = img_band_subset.updateMask(band_specific_masks)
display('Multi-band mask image', band_specific_masks)
display('Image, variable band masks', img_band_subset_masked)
Map.add_layer(band_specific_masks, None, 'Multi-band mask image')
Map.add_layer(
img_band_subset_masked, true_color_viz, 'Image, variable band masks'
)
# 0 到 1 之间的浮点数mask将用于定义可视化中的不透明度。
land_mask_float = land_mask.add(0.65)
img_masked_float = img.updateMask(land_mask_float)
display('Image, partially transparent', img_masked_float)
Map.add_layer(img_masked_float, true_color_viz, 'Image, partially transparent')
Map
大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。