赞
踩
引用: Cai Yaotong, Qian Shi, Xiaoping Liu. Spatiotemporal mapping of surface water using Landsat images and spectral mixture analysis on Google Earth Engine. (2024) Journal of Remote Sensing
NDWFI
landsat图像
应用缩放因子:applyScaleFactors 函数用于调整 Landsat 影像的光学波段和热波段的比例。
获取 Landsat 影像数据:从 GEE 的 Landsat 8 影像集合中筛选特定时间和地点的影像,并应用缩放因子。
去除山体阴影:使用 SRTM(Shuttle Radar Topography Mission)数据和太阳方位角、高度角来生成山体阴影遮罩。
光谱混合分析(SMA):定义了五种地表类型(绿色植被、非光合植被、土壤、暗物质、亮物质)的光谱端元,并使用这些端元对 Landsat 影像进行光谱解混。
计算 NDWFI:使用光谱解混的结果来计算 NDWFI,这是一种用于区分水体和非水体的指数。代码中还提到了使用地形校正和不透水数据来提高映射精度,以及使用 GAUD(Global Artificial Impervious Area Dataset)作为不透水源。
可视化:设置了用于 Landsat 影像和 NDWFI 的可视化参数,并将它们添加到地图上进行显示。
// Function to apply scaling factors.
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true);
}
ST_B.*
):指的是热红外波段,用于分析地表温度等。SR_B.
):包括可见光和近红外波段,用于分析地表特征如植被、水体等。ST_B.*
和 SR_B.
的含义:
ST_B.*
:选择所有热红外波段,*
是通配符,表示匹配所有以 ST_B
开头的波段。
SR_B.
:选择所有光学波段,.
在这里足以表示选择以 SR_B
开头的所有波段。
.
和 *
的区别:
*
是通配符,用于匹配任何字符。.
在这个上下文中用作选择特定前缀的所有项,功能类似于通配符。// Get Landsat imagery
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2021-05-01', '2021-06-01')
.filterBounds(ee.Geometry.Point(-122.0808, 37.3947))
.sort('CLOUD_COVER')
.map(applyScaleFactors)
.first();
这一串代码非常常用:先选择影像集合,再筛选日期【filterdate】,以及选中ROI【filterbounds】
.sort('CLOUD_COVER')
:对筛选出的影像按照云覆盖度进行排序。云覆盖度较低的影像排在前,优先选择云量较少的影像,以便获得更清晰、更准确的地表信息。
sort('CLOUD_COVER', false)
// 修改这里,将云覆盖度从高到低排序.map(applyScaleFactors)
:这一步是对每个影像应用 applyScaleFactors
函数。这个函数的作用是对影像中的光学波段和热波段数据进行缩放处理,将原始的数字量化值转换为反射率和温度等更有用的物理量。
map
函数: 是对影像集合中的每个影像执行指定的操作或函数。.first()
:从经过排序和处理的影像集合中选择第一个影像。这里选择的是云覆盖度最低的那个影像。// remove hillshadow using SRTM, azimuth and zenith var dem = ee.Image("USGS/SRTMGL1_003").select('elevation') //hillshadow函数 function hillshadow (img){ var shadowMap = ee.Terrain.hillShadow({ image: dem.clip(img.geometry()), azimuth: img.get('SUN_AZIMUTH'), zenith: img.get('SUN_ELEVATION'), neighborhoodSize: 200, hysteresis: true }) return shadowMap } var shadow_mask = hillshadow(dataset);
美国地质调查局(USGS)的 SRTM(Shuttle Radar Topography Mission)全球1弧秒数字高程模型(DEM)。这个模型提供了地表的高程信息。
L1_003:
首先在SRTM中选择了高程数据,命名为dem
传入img
作为参数,设置一个变量为shadowmap
ee.Terrain.hillShadow 是 Google Earth Engine (GEE) 中的一个方法。这个方法用于根据给定的参数(如数字高程模型、太阳方位和高度角)生成一个表示山体阴影的影像。这里的 hillShadow 是 GEE 的一个内置函数,用于特定的地形分析任务。
dem.clip(img.geometry())
中,img.geometry()
被用于获取 img 影像的几何形状。然后,这个几何形状被用作 clip 方法的参数,以裁剪 dem 影像。azimuth
: 太阳的方位角,从输入图像 img
中获取。zenith
: 太阳的天顶角,也是从输入图像 img
中获取。neighborhoodSize
: 用于计算阴影的邻域大小。精度hysteresis
: 一个布尔值,用于指定是否应用滞后效应以改善阴影的连续性。稳定性hillshadow函数返回shadowmap
ee.Terrain.hillShadow 函数的参数是一个 JavaScript 对象,它在语法和用途上类似于字典。在 JavaScript 中,对象是一种复合数据类型,它存储的是键值对(key-value pairs)。这些键值对可以包含各种数据类型,如字符串、数字、数组、甚至是其他对象或函数。
传入dataset作为hillshadow函数的参数,最后返回一个遮罩
光谱解混:用于从混合的像素光谱中估计地表覆盖类型的比例。这种方法基于假设一个像素的光谱可以表示为几种基本地表类型(称为端元)光谱的线性组合。
/ /******** parameters for spectral mixture analysis (SMA)************** // 'gv', 'npv', 'soil', 'dark', 'bright' are the endmembers. // ******************************************************************/ var endmembers = ee.Dictionary({ 'gv': [0.019, 0.036, 0.0222, 0.303, 0.144, 0.054], 'npv': [0.028, 0.068, 0.0044, 0.403, 0.224, 0.095], 'soil': [0.034, 0.069, 0.074, 0.335, 0.274, 0.133], 'dark': [0.064, 0.097, 0.087, 0.088, 0.046, 0.031], 'bright': [0.066, 0.087, 0.088, 0.128, 0.123, 0.104], }); var gv = endmembers.get('gv'); var npv = endmembers.get('npv'); var soil = endmembers.get('soil'); var dark = endmembers.get('dark'); var bright = endmembers.get('bright'); // /******** parameters for spectral mixture analysis (SMA)************** // 'gv', 'npv', 'soil', 'dark', 'bright' are the endmembers. // ******************************************************************/ var endmembers = ee.Dictionary({ 'gv': [0.019, 0.036, 0.0222, 0.303, 0.144, 0.054], 'npv': [0.028, 0.068, 0.0044, 0.403, 0.224, 0.095], 'soil': [0.034, 0.069, 0.074, 0.335, 0.274, 0.133], 'dark': [0.064, 0.097, 0.087, 0.088, 0.046, 0.031], 'bright': [0.066, 0.087, 0.088, 0.128, 0.123, 0.104], }); var gv = endmembers.get('gv'); var npv = endmembers.get('npv'); var soil = endmembers.get('soil'); var dark = endmembers.get('dark'); var bright = endmembers.get('bright'); // spectral mixture analysis (SMA)光谱解混分析 var unmixi = ee.Image(dataset)//从dataset的影像集合中创建unmixi .select(['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B7']) .unmix([gv, dark, npv, soil, bright],true,true) .rename(['GV','Dark', 'NPV','Soil','Bright']);
unmix
方法基于线性混合模型,该模型假设每个像素的光谱是其组成端元光谱的加权和。这意味着一个像素的反射率可以表示为不同端元反射率的线性组合。接受几个参数:
[gv, dark, npv, soil, bright]
,分别代表不同的地表类型(如绿色植被、暗物质、非光合植被、土壤、亮物质)true
或 false
),指定是否对解混结果应用非负约束。如果设置为 true
,则所有解混得到的端元比例都不会小于零。true
,则每个像素的所有端元比例之和将等于一。如果在 unmix 方法之后不使用 rename 方法,解混后的影像波段将保留默认的命名或没有明确的命名。
NDWFI的原理是利用水体的暗端元比例较高
公式
/ ************************Calculate NDWFI************************** // 1. Please use terrain corrections and impervious data to improve mapping accuracy. // 2. The GAUD was selected as the impervious source in our study. // 3. Please refer to terrain corrections in Poortinga et al. (2019). // 4. Zero is recommended as the threshold for discriminating water and non-water. // 5. You can also use the OTSU method to determine the optimal threshold when conducting a regional study. // ******************************************************************/ var NDWFI = unmixi.expression( '(dark-bright-soil-gv-npv)/(dark+bright+soil+gv+npv)', { 'dark':unmixi.select('Dark'), 'soil':unmixi.select('Soil'), 'npv':unmixi.select('NPV'), 'gv':unmixi.select('GV'), 'bright':unmixi.select('Bright'), }).rename('NDWFI') .updateMask(shadow_mask); var visualization = { bands: ['SR_B5', 'SR_B4', 'SR_B3'], min: 0.0, max: 0.2, }; var palette = ['e8ebef','fd6f7c','fc8129','b3c120','4da910','1e7d83','001c83'] Map.setOptions('SATELLITE') Map.setCenter(-122.0077, 37.4454, 12); Map.addLayer(dataset, visualization, 'Landsat imagery'); Map.addLayer(NDWFI,{min:0,max:1,palette:palette},'NDWFI')
expression
方法:用途:expression
方法用于对影像应用一个数学表达式。允许您对影像中的像素值进行复杂的数学运算。
参数:
'(dark-bright-soil-gv-npv)/(dark+bright+soil+gv+npv)'
。dark
, soil
, npv
, gv
, bright
)分别对应于 unmixi
影像中的不同波段。作用:在这个例子中,expression
方法用于计算标准化差异水体分数指数(NDWFI)。这个指数是通过特定波段的线性组合计算得出的,用于区分水体和非水体区域。
updateMask
方法:用途:用于应用一个掩膜(mask)到影像上。掩膜决定了影像的哪些部分应该被保留,哪些部分应该被忽略或隐藏。
参数:接受一个影像作为参数,这个影像的像素值决定了原始影像的哪些部分被保留。像素值为 1(或真)的地方被保留,像素值为 0(或假)的地方被忽略。
作用:在您的代码中,updateMask(shadow_mask)
使用 shadow_mask
作为掩膜来更新 NDWFI
影像。这意味着只有在 shadow_mask
中值为 1 的区域(即没有山体阴影的区域)的 NDWFI
值会被保留,而其他区域(山体阴影区域)则会被忽略。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。