遥感生态指数(RSEI):理论发展、方法论争与实践进展
所以给大家更新文章吧,这事好久不做了,好多年不做了。啊~谢谢谢谢,献丑了献丑了。

摘要
遥感生态指数(RSEI)是一种基于多光谱遥感数据,通过主成分分析(PCA)耦合绿度、湿度、热度和干度四个指标,以实现区域生态环境快速、客观、可视化评价的综合指数。本文系统回顾了RSEI从2013年提出至今的理论发展与实践演进历程,重点阐述了其在解决特征向量方向不确定性、数据标准化处理等关键问题上的改进与优化。同时,文章探讨了当前围绕RSEI模型的核心争议(如指标方向固定方法的局限性),并通过福州、拉萨的案例展示了其具体实现流程与应用效果。旨在为相关领域的研究者提供一个关于RSEI指数发展、现状与前沿争鸣的清晰框架。
一、RSEI的诞生
2013年,徐涵秋教授首次提出遥感生态指数(RSEI)[1],旨在解决传统生态评价方法中数据获取难、主观性强、结果不可视等问题。
RSEI选取了四个与人类生存息息相关的生态要素:
- 绿度,用植被指数(NDVI)表示
- 湿度,用缨帽变换的湿度分量(Wet)表示
- 热度,用地表温度(LST)表示
- 干度,用建筑裸土指数(NDBSI)表示
与传统多指标加权求和的方法不同,RSEI采用主成分分析(PCA) 将四个指标压缩成一个综合指数,权重由数据本身决定,避免了人为定权的主观性。
二、RSEI的完善
随着RSEI的广泛应用,其本身的一些问题也逐渐暴露,学者们提出了多种改进方案:
1. 解决特征向量方向不确定性问题
早期RSEI在计算第一主成分(PC1)时,特征向量方向随机,导致结果可能出现完全相反的情况。Li等人通过固定特征向量方向,提出改进模型,确保结果一致性和可比性[3]。
2. 标准化替代归一化
郑子豪等人发现,传统归一化方法在时间序列分析中易受极值干扰 ,提出使用标准化处理 并结合离散化方案(DRSEI),显著提高了时间序列分析的稳定性[2]。
3. MRSEI
有学者提出加入第二、三主成分以"增加信息量",但徐涵秋指出这反而会混淆生态信息[4]
4. 核主成分分析(kPCA)
有学者建议用kPCA处理非线性关系,但徐涵秋研究表明四个指标间实为线性强相关,kPCA反而引入过度拟合[5]
三、 RSEI的争议
Li等基于四个指标对生态环境的实际影响来固定特征向量方向,对生态环境有正面影响的归一化植被指数(NDVI)和湿度指数(Wet)的特征向量取绝对值,对生态环境有负面影响的地表温度(LST)和归一化雪盖指数(NDSI)的特征向量取绝对值的相反数,以此对模型进行改进。但是在实际应用中,存在一些问题
当四个指标的方向如下:
| NDVI | Wet | LST | NDBSI |
|---|---|---|---|
| 正 | 正 | 负 | 负 |
此时为理想情况,不做任何处理,RSEI计算公式为RSEI0=PC1RSEI0 = PC1RSEI0=PC1
当四个指标的方向如下:
| NDVI | Wet | LST | NDBSI |
|---|---|---|---|
| 负 | 负 | 正 | 正 |
当出现这种方向相反的情况时,可以令RSEI0=1−PC1RSEI0 = 1 - PC1RSEI0=1−PC1,其结果在经过归一化后是与理想情况等价的。
或者根据Li的方法,手动将四个指标的方向改为正正负负,此时该方向只是原始特征向量方向量的反转,仍是方差最大的方向,如图:

将修正后的特征向量方向参与主成分分析,不影响后续计算,RSEI计算公式仍为RSEI0=PC1RSEI0 = PC1RSEI0=PC1。
当四个指标的方向如下:
| NDVI | Wet | LST | NDBSI |
|---|---|---|---|
| 正 | 正 | 正 | 正 |
| 正 | 正 | 正 | 负 |
| 负 | 正 | 负 | 正 |
| ... | ... | ... | ... |
| 负 | 负 | 负 | 正 |
| 负 | 负 | 负 | 负 |
当出现正正负负和负负正正之外的情况时,如果仍手动将四个指标的方向改为正正负负,则修正后的特征向量方向为原始特征向量方向量的对称轴,不是方差最大的方向,如图:

出现这种异常
是否意味着Li的方法具有局限性
或者RSEI使用区域有限。
或者输入数据可能存在特殊问题。
排查建议:
**数据源与时相:**影像是否来自植被生长季? cloud mask是否干净?
**研究区特殊性:**研究区域是否有大范围水体、冰雪、盐碱地或特殊的城市结构,导致 Wet 分量与其他指标的关系背离常理?(例如,在干旱区,水体很少,Wet 分量可能主要响应的是土壤或建筑材质,而非植被)。
**计算过程:**确认四个指标都使用了相同范围的有效像元,并且都进行了正确的标准化(归一化或标准化)。
四、RSEI的实现
以下是基于Google Earth Engine的RSEI实现代码:
javascript
// 定义全局变量
var scale = 1000; // 分析尺度
var year = 2020; // 分析年份
var table = ee.FeatureCollection("users/lijian960708/china-shp/china-city"); // 中国城市行政区划数据
// 选择研究区域 - 福州市
var roi = table.filter(ee.Filter.eq("地名", "福州市"));
Map.centerObject(roi, 9); // 地图中心定位到研究区域,缩放级别9
/**
* 云掩膜函数
* 使用QA_PIXEL波段去除云和云阴影
*/
var maskclouds = function(img) {
var cloudShadowBitMask = 1 << 4; // 云阴影位掩码
var cloudsBitMask = 1 << 3; // 云位掩码
var qa = img.select("QA_PIXEL"); // 选择质量评估波段
// 创建掩膜:无云阴影且无云
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0).and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return img.addBands(img.updateMask(mask), null, true); // 应用掩膜
};
/**
* 应用比例因子函数
* 将DN值转换为地表反射率和地表温度
*/
var applyScaleFactors = function(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).subtract(273.15); // 热红外波段比例因子,转换为摄氏度
return image.addBands(opticalBands, null, true).addBands(thermalBands, null, true); // 添加处理后的波段
};
/**
* 计算NDVI(归一化植被指数)
* 公式:(NIR - Red) / (NIR + Red)
*/
var NDVI = function(image) {
return image.addBands(
image.normalizedDifference(["NIR", "Red"])
.rename("NDVI")); // 添加NDVI波段
};
/**
* 计算WET(湿度分量)
* 基于缨帽变换的湿度分量
*/
var WET = function(image) {
var WET = image.expression(
'Blue * 0.1511 + Green * 0.1973 + Red * 0.3283 + NIR * 0.3407 + SWIR1 * (-0.7117) + SWIR2 * (-0.4559)',
{
'Blue': image.select('Blue'),
'Green': image.select('Green'),
'Red': image.select('Red'),
'NIR': image.select('NIR'),
'SWIR1': image.select('SWIR1'),
'SWIR2': image.select('SWIR2')
}
).rename('WET');
return image.addBands(WET); // 添加WET波段
};
/**
* 计算NDBSI(归一化建筑指数)
* 结合SI(裸土指数)和IBI(建筑指数)
*/
var NDBSI = function(image) {
// 计算SI(裸土指数)
var SI = image.expression(
'((SWIR1 + Red) - (NIR + Blue)) / ((SWIR1 + Red) + (NIR + Blue))',
{
'SWIR1': image.select('SWIR1'),
'Red': image.select('Red'),
'NIR': image.select('NIR'),
'Blue': image.select('Blue')
}
);
// 计算IBI(建筑指数)
var IBI = image.expression(
'(2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + Red) + Green / (Green + SWIR1))) / ' +
'(2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + Red) + Green / (Green + SWIR1)))',
{
'SWIR1': image.select('SWIR1'),
'NIR': image.select('NIR'),
'Red': image.select('Red'),
'Green': image.select('Green')
}
);
// 计算NDBSI:SI和IBI的平均值
var NDBSI = SI.add(IBI).divide(2).rename('NDBSI');
return image.addBands(NDBSI); // 添加NDBSI波段
};
/**
* 图像归一化函数
* 将各波段值归一化到0-1范围
*/
var img_norm = function(image) {
var minMax = image.reduceRegion({
reducer: ee.Reducer.minMax(), // 最小最大值归约器
geometry: roi, // 研究区域
scale: scale, // 空间尺度
maxPixels: 10e13, // 最大像素数
});
// 对每个波段进行归一化
var image_norm = ee.ImageCollection.fromImages(image.bandNames().map(function(name) {
name = ee.String(name);
var band = image.select(name);
var min = ee.Number(minMax.get(name.cat('_min'))); // 获取最小值
var max = ee.Number(minMax.get(name.cat('_max'))); // 获取最大值
var norm = band.subtract(min).divide(max.subtract(min)); // 归一化计算
return norm;
})).toBands();
image_norm = image_norm.rename(image.bandNames()); // 重命名波段
return image_norm;
};
/**
* 主成分分析函数
* 计算四个指标(NDVI, WET, LST, NDBSI)的主成分
*/
var getPAC = function(image){
var bandNames = image.bandNames();
// 数据中心化
var meanDict = image.reduceRegion({
reducer: ee.Reducer.mean(), // 平均值归约器
geometry: roi,
scale: scale,
maxPixels: 1e13
});
var means = ee.Image.constant(meanDict.values(bandNames));
var centered = image.subtract(means); // 减去均值
var arrays = centered.toArray(); // 转换为数组
// 计算协方差矩阵
var covar = arrays.reduceRegion({
reducer: ee.Reducer.centeredCovariance(), // 中心化协方差归约器
geometry: roi,
scale: scale,
maxPixels: 1e13
});
// 特征值分解
var covarArray = ee.Array(covar.get('array'));
var eigens = covarArray.eigen();
print('eigens', eigens);
// 计算各主成分的方差贡献率
var eigenValues = eigens.slice(1, 0, 1);
var eigenValuesList = eigenValues.toList().flatten();
var total = eigenValuesList.reduce(ee.Reducer.sum());
var percentageVariance = eigenValuesList.map(function(item) {
return ee.Number(item).divide(total).multiply(100).format("%.2f");
});
print('percentageVariance', percentageVariance);
// 获取特征向量
var eigenVectors = eigens.slice(1, 1);
print('原特征向量方向', eigenVectors);
// 获取PC1的系数并调整方向(根据RSEI理论)
var NDVICoef = eigenVectors.get([0, 0]);
var WETCoef = eigenVectors.get([0, 1]);
var LSTCoef = eigenVectors.get([0, 2]);
var NDBSICoef = eigenVectors.get([0, 3]);
print('NDVI系数', NDVICoef);
print('WET系数', WETCoef);
print('LST系数', LSTCoef);
print('NDBSI系数', NDBSICoef);
// 调整PC1系数方向:NDVI和WET取正,LST和NDBSI取负
var PC1Coef = ee.Array([[NDVICoef.abs(),WETCoef.abs(),LSTCoef.abs().multiply(-1),NDBSICoef.abs().multiply(-1)]]);
eigenVectors = ee.Array.cat([PC1Coef, eigenVectors.slice(0, 1)], 0);
print('调整后特征向量方向', eigenVectors);
// 计算主成分
var arrayImage = arrays.toArray(1);
var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage);
var PCA = principalComponents.arrayProject([0]).arrayFlatten([['PC1', 'PC2', 'PC3', 'PC4']]);
return PCA;
};
// 创建水体掩膜(去除永久水体和季节性水体)
var water = ee.ImageCollection('JRC/GSW1_4/YearlyHistory').filterDate(year + '-01-01', year + '-12-31').first();
var mask = water.eq(2).add(water.eq(3)).unmask().eq(0).clip(roi); // 掩膜掉水体(值2和3)
// 定义波段名称映射
var srcBands = ["SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B6", "SR_B7", "ST_B10"];
var toBands = ["Blue", "Green", "Red", "NIR", "SWIR1", "SWIR2", "LST"];
// 加载和处理Landsat 8影像
var imageCol = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
.filterBounds(roi) // 空间过滤
.filterDate(year + '-01-01', year + '-12-31') // 时间过滤
.map(maskclouds) // 云掩膜
.map(applyScaleFactors) // 应用比例因子
.select(srcBands, toBands) // 选择并重命名波段
.map(NDVI) // 计算NDVI
.map(WET) // 计算WET
.map(NDBSI); // 计算NDBSI
// 合成中值影像并应用水体掩膜
var image = imageCol.select(['NDVI', 'WET', 'LST', 'NDBSI']).median().updateMask(mask).clip(roi);
// 归一化四个生态指标
var image_norm = img_norm(image);
// 主成分分析
var PCA = getPAC(image_norm);
// 提取第一主成分作为初始RSEI
var RSEI_0 = PCA.select("PC1");
// 对RSEI进行归一化得到最终结果
var RSEI = img_norm(RSEI_0);
// 创建RSEI直方图
var Histogram = ui.Chart.image.histogram({
image: RSEI,
region: roi,
scale: scale,
maxPixels: 1e10
});
print('Histogram of RSEI', Histogram);
// 定义可视化参数
var visParam = {
min: 0, // 最小值
max: 1, // 最大值
palette: ['C2523C', 'F2B60E', '77ED00', '1BAA7D', '0B2C7A'] // 颜色方案:从差到好
};
// 在地图上显示RSEI结果
Map.addLayer(RSEI, visParam, 'RSEI');
福州市的结果:


拉萨市的结果:


四、结语
以上便是个人对RSEI的一些浅见与总结。遥感生态评价领域方兴未艾,其中必然还有许多值得探讨的细节与不同的见解。文中若有任何疏漏或不当之处,欢迎各位大佬批评指正,期待能与大家一同交流讨论!

参考文献
1\] 徐涵秋. 区域生态环境变化的遥感评价指数\[J\]. 中国环境科学, 2013,33(5):889-897. \[2\] Zheng Z, Wu Z, Chen Y, et al. Instability of remote sensing based ecological index (RSEI) and its improvement for time series analysis\[J\]. Science of the Total Environment, 2022, 814: 152595. \[3\] Li N, Wang J, Qin F. The improvement of ecological environment index model RSEI\[J\]. Arabian Journal of Geosciences, 2020, 13: 403. \[4\] 徐涵秋, 邓文慧. MRSEI指数的合理性分析及其与RSEI指数的区别\[J\]. 遥感技术与应用, 2022, 37(1):1-7. \[5\] 徐涵秋, 李春强, 林梦婧. RSEI应使用主成分分析或核主成分分析?\[J\]. 武汉大学学报(信息科学版), 2023,48(4):506-513.