一、什么是Forel-Ule指数(FUI)?
Forel-Ule指数(FUI)是一种用于描述水体颜色的分类系统,最初由Forel和Ule于19世纪末提出。该指数将水体颜色分为21个等级,从蓝绿色(1级)到棕色(21级),可以有效反映水体的光学特性和水质状况。
在遥感应用中,FUI通常基于多光谱卫星影像的反射率数据计算得出,能够帮助研究人员大规模、长期监测水体颜色变化,进而分析水质变化趋势、富营养化状况等环境问题。
二、研究数据与区域
1. 数据源
本研究使用的是Landsat 5 TM传感器的Level 2级表面反射率数据(LANDSAT/LT05/C02/T1_L2),时间范围为1994-2000年。Landsat 5卫星携带的TM传感器具有7个波段,其中我们主要使用了以下4个光学波段进行FUI计算:
- SR_B1:蓝光波段(0.45-0.52μm)
- SR_B2:绿光波段(0.52-0.60μm)
- SR_B3:红光波段(0.63-0.69μm)
- SR_B4:近红外波段(0.76-0.90μm)
2. 研究区域
研究区域可以通过修改代码中的geometry
变量进行设置,默认使用的是"projects/ee-hllutlu2024/assets/DT2"路径下的矢量数据。实际应用时,只需替换为自己的研究区域矢量数据即可。
三、完整代码解析
1. 研究区域加载
var geometry = ee.FeatureCollection("projects/ee-hllutlu2024/assets/DT2"); // 替换为实际研究区域
Map.centerObject(geometry, 9);
这段代码的作用是加载研究区域的矢量数据,并将地图中心定位到该区域,缩放级别为9级。
2. Landsat 5 TM数据预处理函数
function preprocessL5(image) {
var qaPixel = image.select('QA_PIXEL');
var qaRadsat = image.select('QA_RADSAT');
// 云阴影掩码
var cloudShadowMask = qaPixel.bitwiseAnd(parseInt('11111', 2)).eq(0);
// 饱和度掩码
var saturationMask = qaRadsat.eq(0);
// 光学波段反射率计算(将DN值转换为实际反射率)
var opticalBands = image.select(['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4'])
.multiply(0.0000275)
.add(-0.2);
// 返回处理后的影像
return image.addBands(opticalBands, null, true)
.updateMask(cloudShadowMask)
.updateMask(saturationMask)
.clip(geometry);
}
预处理函数主要完成以下工作:
- 利用QA_PIXEL波段创建云阴影掩码,去除云阴影影响
- 利用QA_RADSAT波段创建饱和度掩码,去除饱和像元
- 将光学波段的DN值转换为实际反射率(应用缩放因子0.0000275和偏移量-0.2)
- 对影像进行裁剪,只保留研究区域内的部分
3. FUI计算核心函数
function calculateFUI(meanImage) {
// 计算归一化水体指数(NDWI)并提取水体
var ndwi = meanImage.normalizedDifference(['SR_B2', 'SR_B4']);
var waterMask = ndwi.gte(0.25).selfMask();
var waterReflectance = meanImage.updateMask(waterMask);
// 计算X、Y、Z三刺激值
var X = waterReflectance.expression(
'11.053 * b1 + 6.950 * b2 + 51.135 * b3 + 34.457 * b4',
{
b1: waterReflectance.select('SR_B1'), b2: waterReflectance.select('SR_B2'),
b3: waterReflectance.select('SR_B3'), b4: waterReflectance.select(