求图像的梯度,一般是指在灰度图像或者彩?图像上的操作。数字图像是离散的点值谱,也可以叫?维离散函数。图像的梯度就是这个?维离散函数的求导。下面将详细介绍earth engine中单波段图像的梯度计算。
import ee
import geemap
ee.Initialize()
# Sentinel-2表面反射率图像。
img = ee.Image('COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG')
# 选取两个波段并将它们显示在地图上。
swir_1 = img.select('B11')
swir_2 = img.select('B12')
Map = geemap.Map()
Map.set_center(-122.276, 37.456, 12)
Map.add_layer(swir_1, {'min': 0, 'max': 3000}, 'swir_1')
Map.add_layer(swir_2, {'min': 0, 'max': 3000}, 'swir_2')
# 下面的例子则是展示两个单波段(ee.Image)之间的常用的运算方法
# swir_1+swir_2 相加
addition = swir_1.add(swir_2)
Map.add_layer(addition, {'min': 100, 'max': 6000}, 'addition')
# swir_1-swir_2 相减
subtraction = swir_1.subtract(swir_2)
Map.add_layer(subtraction, {'min': 0, 'max': 1500}, 'subtraction')
# swir_1*swir_2 相乘
multiplication = swir_1.multiply(swir_2)
Map.add_layer(multiplication, {'min': 1.9e5, 'max': 9.4e6}, 'multiplication')
# swir_1/swir_2 相除,除以0,则返回0
division = swir_1.divide(swir_2)
Map.add_layer(division, {'min': 0, 'max': 3}, 'division')
# swir_1除以swir_2的余数
remainder = swir_1.mod(swir_2)
Map.add_layer(remainder, {'min': 0, 'max': 1500}, 'remainder')
# 进行幂次方运算
exponent = swir_1.pow(3)
Map.add_layer(exponent, {'min': 0, 'max': 2e10}, 'exponent')
# 平方根运算
sqrter = swir_1.sqrt()
Map.add_layer(sqrter, {'min': 1, 'max': 123}, 'sqrter')
# 梯度方向计算
direction = swir_1.atan2(swir_2)
Map.add_layer(direction, {'min': 0, 'max': 1.6}, 'direction')
Map
运算结果
Map = geemap.Map(center=[40, -100], zoom=4)
#加载Landsat 8图像并选择全色波段。
image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318').select('B8')
#计算图像在X和Y方向上的梯度
xyGrad = image.gradient()
#计算梯度的大小。波段'x'的平方加上波段'y'的平方,然后开平方根
gradient = xyGrad.select('x').pow(2) \
.add(xyGrad.select('y').pow(2)).sqrt()
#计算梯度的方向。计算波段向量'y'与波段向量'x'形成的角度
direction = xyGrad.select('y').atan2(xyGrad.select('x'))
#展示结果
Map.setCenter(-122.054, 37.7295, 10)
Map.addLayer(direction, {'min': -2, 'max': 2}, 'direction')
Map.addLayer(gradient, {'min': -7, 'max': 7}, 'gradient')
Map
运算结果
大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。