本节的主要的内容是介绍earth engine中的线性卷积,主要的函数是image.convolve(),主要的操作包括低通滤波器和拉普拉斯算子。
import ee
import geemap
ee.Initialize()
卷积的唯一参数是 ee.Kernel,它由内核中的形状和权重指定。convolve() 输出图像的每个像素都是内核值和内核覆盖的输入图像像素的线性组合。 核独立应用于每个波段。
例如,可以使用低通(平滑)滤波来删除高频信息。下面介绍了应用于 Landsat 8 图像的 15x15 低通滤波:
# 创建一个地图 (lat, lon).
Map = geemap.Map(center=[40, -100], zoom=4)
# 加载并展示图像.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')
Map.setCenter(-121.9785, 37.8694, 11)
Map.addLayer(image, {'bands': ['B5', 'B4', 'B3'], 'max': 0.5}, 'input image')
# 定义一个 boxcar 或 low-pass 核
boxcar = ee.Kernel.square(**{
'radius': 7, 'units': 'pixels', 'normalize': True
})
# 通过与 boxcar 核卷积来平滑图像。
smooth = image.convolve(boxcar)
Map.addLayer(smooth, {'bands': ['B5', 'B4', 'B3'], 'max': 0.5}, 'smoothed')
Map
低通滤波器的卷积输出如下图所示。观察核的参数决定其大小和系数。 具体来说,当 ‘units’ 参数设置为 ‘pixels’ 时,‘radius’ 参数指定内核将覆盖的距离中心的像素数。 如果 ‘normalize’ 设置为 True,则内核系数的总和将为 1。 如果设置了 ‘magnitude’ 参数,则内核系数将乘以 ‘magnitude’(如果 ‘normalize’ 也为真,则系数将与 ‘magnitude’ 相加)。 如果任何内核系数存在负值,则将 ‘normalize’ 设置为 True 将使系数总和为零。
使用其他内核可以达到理想的图像处理效果。此示例使用拉普拉斯核进行各向同性边缘检测:
# 定义拉普拉斯算子或边缘检测核。
laplacian = ee.Kernel.laplacian8(1, False)
# 应用边缘检测核
edgy = image.convolve(laplacian)
Map.addLayer(edgy,
{'bands': ['B5', 'B4', 'B3'], 'max': 0.5},
'edges')
# Display the map.
Map
大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。