☰
RSEI遥感生态指数计算全流程:从Landsat影像到生态质量分级
2026/10/5 15:55:32 网站建设 项目流程

做生态评价这行的朋友,应该都听过RSEI这个名字。RSEI(Remote Sensing Ecological Index)说白了就是用遥感影像算出一个综合指数,把某个区域的植被、湿度、热度、地表干度一次性揉在一起,用主成分分析去定义“生态好不好”。跟过去那种单靠植被覆盖度或者单看土地利用类型的做法不一样,RSEI不需要人为定权重,数据一跑完就是一套结果,而且空间上能出整幅图,时间上能对比多年变化。这个教程就是把这套流程从头到尾讲清楚,从影像下载、预处理到四个指标计算、主成分分析、最后出图分级,顺带把我做的时候踩过的坑和修正思路也写出来。适合正在写论文、做自然资源调查、国土空间规划监测的朋友参考,尤其是第一次碰RSEI,对着文献不知道怎么下手的,这篇基本上可以当操作手册用。

1. 模型原理与设计思路

先别急着开软件跑数据,RSEI这套东西如果不懂原理,跑出来翻车了都不知道是哪儿出的问题。我见过不少新手直接拿着别人GEE的代码一跑,出了图但完全解释不了,答辩的时候一问就被问住了。所以这一章把模型背后的逻辑讲透。

1.1 RSEI要解决什么问题

传统生态质量评价容易陷入两个极端:一是依赖地面采样点,精度高但空间覆盖有限,大范围研究区布点成本很高;二是搞一个评价体系,把降雨、人口、GDP、土壤类型全拉进来,指标多了反而不知道权重怎么定,主观性特别大。

RSEI的思路完全不同,它全部基于遥感影像计算,不需要地面实测数据,完全靠影像本身反映的绿度、湿度、热度、干度四个分量来逼近人类对“生态好坏”的直觉判断。这四个分量不是拍脑袋选的,它们对应着生态系统中与人类生存最相关的几类状态:植被生长状况、土壤与植被水分状况、地表热环境、地表“裸化”或“建筑化”程度。把这四个分量通过主成分分析融合成一个指数,就能在空间上连续表达生态质量,在时间上也可以逐年比较。

这个模型最开始由徐涵秋提出,在很多城市和流域的研究里都验证过,和实测的生态参数、土地利用类型有较好的一致性。它能解决的最大痛点,就是你拿到一堆影像,不用额外数据,就能快速给一个区域打出“生态分”,还能出图、出面积统计表。

1.2 为什么是绿度、湿度、热度、干度这四个指标

先想一个问题:如果让你用遥感影像判断一个地方生态好不好,你第一眼会看什么?多半是植被多不多、是不是绿油油的一片。这就是绿度指标的意义,最常用的是NDVI(归一化植被指数)。它利用近红外和红波段的反射差异,对植被覆盖度和生长活力非常敏感。纯水体或裸地NDVI很低甚至为负,茂密森林NDVI能到0.7以上,梯度感很强。

湿度指标WET来自缨帽变换的湿度分量。缨帽变换是把原始波段投影到几个有生态含义的方向,其中湿度分量反映的是土壤和植被中的水分含量。水多的地方生态通常不会太差,比如湿地、农田灌溉区、林下土壤,湿度分量就会偏高。城市地表因为透水性差,湿度分量往往偏低。

热度指标LST就是地表温度。城市热岛效应、裸地暴晒、植被蒸腾作用弱的地方,地表温度会明显偏高。生态好的区域因为植被覆盖和水分蒸散,地表温度通常比较低。这也是为什么夏季卫星影像里森林和城区温差能拉到十度以上。

干度指标NDBSI(归一化差值裸土与建筑指数),把它摆进来的原因是,很多生态退化区域不是没植被,而是地表被裸土或建筑硬质面覆盖。NDBSI把裸土指数SI和建筑指数IBI整合起来,专门捕捉“地表变干、变硬”的信号。比如建设用地扩张、耕地撂荒、河床裸露,在NDBSI上都会有明显响应。

这四个指标加在一起,基本覆盖了生态质量评价中“植被—水分—温度—地表覆被”四个维度的核心信息,而且全部来自遥感影像,彼此独立又互补,后面的主成分分析正好能把这四股信息拧成一股绳。

1.3 主成分分析为什么能干这个活

RSEI最讨巧的地方,也是很多人没转过弯的地方,就是用了主成分分析(PCA)来集成指标。PCA的本质是数据降维,它是根据四个指标之间的相关性,自动找出一组新的正交方向,其中第一主成分(PC1)能保留原始数据最大的方差信息。

如果四个指标都能反映生态质量,它们之间必然存在相关性。比如NDVI高、湿度高,通常LST就低、NDBSI也低;反之城市区域NDVI低、湿度低,LST高、NDBSI高。PCA正好能把这层内在关系提取出来,而且不需要人为给权重。PC1的载荷系数就是各指标在生态质量综合信息里的实际贡献,这比拍脑袋定权重客观得多。

实际操作中,PC1通常能解释60%到80%以上的方差,这说明四个指标的信息很大一部分被PC1抓住了,丢掉的其他主成分主要是噪声或各指标独立的特异信息。所以RSEI一般只用PC1构造,不用PC2、PC3,因为那些主成分往往带有比较强的局部干扰。

需要特别提醒的是,PCA的方向不是固定的。如果四个指标归一化后输入时生态正向指标(NDVI、WET)数值高、生态负向指标(LST、NDBSI)数值低,PC1可能在生态好的地方取值高,也可能反过来。所以算完PC1之后一定要检查它和四个指标的相关方向,如果不一致就得用1减掉PC1,保证RSEI数值越大代表生态越好。这个细节我在第四部分单独说。

2. 数据准备与预处理

数据是整个RSEI流程的地基。我见过不少学生花了很大力气跑模型,最后因为影像预处理不合理,LST全是野值,PCA结果完全没法解释。这一章不讲玄学,全是我实际操作中验证过的流程。

2.1 影像选择:Landsat是绝对主力

RSEI最经典的输入是Landsat系列影像,尤其是Landsat 5 TM、Landsat 7 ETM+ 和 Landsat 8/9 OLI/TIRS。原因很简单:历史数据从1980年代到现在都有,时间序列长;免费下载,空间分辨率30米(热红外波段重采样后也是30米),做县域、市域、流域尺度的生态评价完全够用。

有人问哨兵2号行不行。Sentinel-2有10米分辨率和丰富的红边波段,但从2015年之后才有数据,做历史对比会比较吃力。而且Sentinel-2没有热红外波段,LST没法从自身影像获得,还得另外找Landsat的LST再重采样到10米,尺度一混,误差反而大。所以除非你的研究区特别小,需要高分辨率细节,否则还是老老实实用Landsat。

Landsat 7有严重的条带问题,2003年之后SLC-off导致影像有很多数据缝隙,如果在条带区域做RSEI,结果会很难看。我的建议是能用Landsat 5(1984-2012)或者Landsat 8/9(2013年至今)就用这两个,只有年头实在对不上才考虑Landsat 7,并且要做好条带掩膜。

2.2 时相选择与云量控制

RSEI对影像时相非常敏感。同一个地方,春季和秋季的NDVI、LST差别很大,如果做多年对比,不同年份选了不同月份,结论基本没参考价值。选影像至少要遵守两条原则:

一是年份内部的影像尽量选同一个月或相邻月份,我一般倾向选择植被生长旺盛期的影像,比如北半球7到9月,这时候植被信号最强,生态差异最能被拉开。如果是做城市扩张对生态的影响,生长季影像也更敏感。

二是云量要严格控制,最好是全影像云量低于5%,研究区内部完全没有云。云和云阴影会严重干扰NDVI和LST计算,即使只覆盖了小块区域,最后PCA都可能被污染。下载的时候先在USGS EarthExplorer或者地理空间数据云筛选云量,拿到影像后用波段质量评估文件(QA Band)或Fmask做云掩膜,把云和云阴影区域排除掉。

具体下载方式不展开了,USGS账号免费申请,地理空间数据云对国内Landsat数据下载比较方便,自行选择就好。下载影像时注意选Level-1TP级别,已经做过地形校正的产品,省去几何精校正的麻烦。

2.3 预处理流程:辐射定标与大气校正

RSEI四个指标里,LST需要的是热红外辐射亮度值,其他指标需要地表反射率。如果用原始DN值直接算NDVI,误差不大,因为NDVI是比值运算,能抵消一部分大气影响;但WET、NDBSI、LST对绝对辐射值更敏感,所以大气校正是必须做的。

我习惯在ENVI里走这一套流程:打开影像后先用Radiometric Calibration做辐射定标,多光谱波段输出为反射率,热红外波段输出为辐射亮度或亮度温度。然后对多光谱波段做FLAASH大气校正,输入中心纬度、影像获取日期、海拔高度、气溶胶模型和大气模型,计算得到地表反射率。FLAASH在ENVI版本里越来越完善,参数设置合理的话精度是可以接受的。

如果不想用ENVI,Python也可以做。用gdal读数据,按照USGS发布的Landsat Calibration参数离线计算,或者用6S大气辐射传输模型跑。不过说实话,Python做大气校正的门槛还是偏高,新手最容易在校正系数上出问题,我建议第一遍先用ENVI跑通流程,后面要批量处理再上Python。

需要注意,大气校正后的多光谱波段必须是浮点型反射率,取值范围0到1左右。保存成ENVI标准格式的同时,最好顺手把影像统一投影到UTM坐标系,这样后面算面积、统计图斑都方便。

2.4 研究区裁剪与水体掩膜

研究区裁剪很简单,在ENVI里用Subset Data from ROIs,按矢量边界裁影像。这里有个小陷阱,裁剪范围一定要比研究区略大一点,留出缓冲区,避免后续计算过程中边缘像元因为邻域操作出现人为的空洞。

水体的处理更关键。RSEI的湿度分量对水体非常敏感,大湖面、水库、河流在WET上会显著偏高,如果不做掩膜,PCA中水体区域会极大影响全局统计,导致陆地生态信息被压缩。一般做法是先算NDWI或MNDWI提取水体,生成水体掩膜,然后在后续所有指标计算、PCA统计中都排除水体像元。等RSEI出图后,再把水体单独标示或填充为背景值。

我踩过的一个坑是有一次在城市研究中没做水体掩膜,结果PC1的第一个载荷竟然被WET主导,整幅图看起来像是把水体“点亮”了,陆地上反而层次不清。加掩膜之后,陆地的生态梯度才正常显示出来。

3. 四个生态分量的详细计算

这一章是全文的手把手环节。我按Landsat 8 OLI来写公式和操作,Landsat 5/7的波段设置也可以用同样的逻辑替换,只是波段编号和缨帽系数不同。

3.1 绿度NDVI:计算与踩坑

NDVI的公式是:

NDVI = (NIR - Red) / (NIR + Red)

对应Landsat 8,NIR是第5波段,Red是第4波段。在ENVI Band Math里直接写浮点运算:

(b5 - b4) / (b5 + b4)

需要注意几个问题。第一,输入必须是大气校正后的反射率,不能用辐射定标前的原始DN值,否则结果虽然形状大致对,但数值范围会偏。第二,NDVI分母不可能为零,但如果影像中有NoData值,运算时会引入极大值或极小值,所以计算前最好先做无效值掩膜。第三,有些影像在云区NDVI会出现负值或超过1的异常值,这部分同样要掩膜掉。

NDVI计算出来后,可以先做一个简单的密度分割,看一下植被覆盖的空间格局是否符合常识。比如山区森林NDVI高、城区低、水体为负,基本就说明这一步没算错。这个中间检查很便宜,但能帮你尽早发现问题。

3.2 湿度WET:缨帽变换系数别选错

WET要从缨帽变换里取湿度分量。Landsat 8 OLI的湿度系数和Landsat 5/7 TM/ETM+不一样,网上很多旧教程直接抄TM系数用到OLI上,结果算出来的WET空间分布很奇怪。这一点必须看清楚。

Landsat 8 OLI的WET公式(用的是反射率产品)常见版本:

WET = 0.1511 * Blue + 0.1973 * Green + 0.3283 * Red + 0.3407 * NIR - 0.7117 * SWIR1 - 0.4559 * SWIR2

对应波段:Blue为B2,Green为B3,Red为B4,NIR为B5,SWIR1为B6,SWIR2为B7。

在ENVI Band Math里输入:

0.1511 * b2 + 0.1973 * b3 + 0.3283 * b4 + 0.3407 * b5 - 0.7117 * b6 - 0.4559 * b7

如果是Landsat 5 TM,系数版本是:

WET = 0.0315 * B1 + 0.2021 * B2 + 0.3102 * B3 + 0.1594 * B4 - 0.6806 * B5 - 0.6109 * B7

这里通常用前六个波段中的六个系数,具体以文献中的表为准。做研究时建议在文章里写明你选的是哪套系数,方便别人复现。

我自己的体会是,WET出问题最多的情况不是系数选错,而是波段顺序搞错。用ENVI的Band Math时一定要先确认波段顺序,用b2不代表实际是第2波段,如果你导入文件时波段顺序被重排过,公式就白写了。稳妥的办法是先打开文件看一下每个波段的中心波长,再写公式。

3.3 干度NDBSI:SI和IBI的联合

NDBSI是裸土指数(SI)和建筑指数(IBI)的算术平均,公式为:

NDBSI = (SI + IBI) / 2

SI的计算公式:

SI = ((SWIR1 + Red) - (NIR + Blue)) / ((SWIR1 + Red) + (NIR + Blue))

对应Landsat 8:

SI = ((b6 + b4) - (b5 + b2)) / ((b6 + b4) + (b5 + b2))

IBI的计算公式比较长:

IBI = (2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + Red) + Green / (Green + SWIR1))) / (2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + Red) + Green / (Green + SWIR1)))

对应ENVI Band Math:

(2 * b6 / (b6 + b5) - (b5 / (b5 + b4) + b3 / (b3 + b6))) / (2 * b6 / (b6 + b5) + (b5 / (b5 + b4) + b3 / (b3 + b6)))

看着复杂,其实就是几个波段组合的比值运算。建议在计算之前把公式拆成两部分,先算IBI的分子部分和分母部分,再用Band Math组合到一起,这样哪一步出了问题容易排查。

NDBSI理论上取值范围在-1到1之间,但实际影像里因为大气残余、波段噪声,偶尔会出现超出范围的值。只要不严重,可以保留;但如果出现大量异常值,说明前面的预处理出了问题,建议回头检查大气校正参数。

3.4 热度LST:从热红外波段到地表温度

LST是四个指标里最容易算错的一个,因为它不是简单的波段比值,而是要经过两个阶段的辐射物理量转换。我按步骤来说明。

第一步,把热红外波段的像元值转成辐射亮度。Landsat 8的TIRS Band 10,如果用ENVI Radiometric Calibration直接输出radiance,就能得到单位为W/(m2·sr·μm)的辐射亮度。这一步一般软件会处理好。

第二步,把辐射亮度转换成亮度温度(At-Satellite Brightness Temperature),公式是:

BT = K2 / ln(K1 / Lλ + 1)

其中Lλ是上一步得到的辐射亮度,K1和K2是热红外波段的定标常数。Landsat 8 Band 10对应的K1 = 774.8853 W/(m2·sr·μm),K2 = 1321.0789 K。这些常数在影像自带的MTL文件里都有,直接查就行。

第三步,计算地表比辐射率,进而把亮度温度修正为地表温度。最常用的方法是NDVI阈值法,用NDVI值估算植被覆盖度,再估算比辐射率:

  • 当NDVI < 0.05时,认为是裸地或水体,比辐射率取0.98(水体)或0.97(裸地);
  • 当NDVI > 0.7时,认为是完全植被覆盖,比辐射率取0.985;
  • 当0.05 ≤ NDVI ≤ 0.7时,先计算植被覆盖度FVC = (NDVI - NDVI_min) / (NDVI_max - NDVI_min),然后按比例混合植被和裸土的比辐射率,公式为ε = 0.004 * FVC + 0.986。

第四步,用下式反算地表温度:

LST = BT / (1 + (λ * BT / ρ) * ln(ε))

λ是热红外波段中心波长,Landsat 8 Band 10取10.8μm;ρ = h * c / σ,约等于1.438e-2 m·K。这个公式在ENVI和Python里都能一行算完。

LST的常见问题是:算出来的温度比常识偏低或偏高好几度。如果偏低,多半是比辐射率取高了;如果偏高,可能是大气校正时用了错误的大气参数。我的习惯是算完后把LST和同期的气象站近地面气温做个粗略对比,虽然地表温度不等于气温,但两者差距一般不会超过十几度,如果差出三十度去,那肯定是计算有问题。

到了这一步,NDVI、WET、NDBSI、LST四个指标栅格就都准备好了。接下来最关键的一步,PCA和RSEI构建。

4. 主成分分析与RSEI构建

四个指标都算出来后,不能直接拿来平均,因为量纲不一样。NDVI范围在0到1左右,LST是30多度,WET可能负的零点几,NDBSI也是0到0.3左右。如果不做归一化,LST会在PCA里占据绝对主导地位,其他三个指标的信息全被淹没。所以PCA之前必须先归一化。

4.1 指标归一化:不是可选项,是必选项

归一化公式很简单:

NI = (I - I_min) / (I_max - I_min)

其中I是原始指标栅格,I_min和I_max分别是该指标在有效像元里的最小值和最大值。归一化后每个指标的范围都在0到1之间,越大代表该维度上生态越好或越差(看指标定义)。

这里有个容易犯的错误:在两个年份以上做对比时,如果每一年都用自己的最小值和最大值归一化,那么年份之间的数值不可比,因为你把每一年的“最差”都归一化成0,“最好”都归一化成1了。要做跨年份变化检测,强烈建议用研究期所有年份合并后的全局最小值和最大值来归一化,或者至少用同一套统计参数,这样RSEI的变化才是真实的变化。

在ENVI里我用Statistics功能统计每个指标的有效像元最小值、最大值,也可以用Python配合gdal+numpy算,然后写公式:

(b1 - 0.02) / (0.85 - 0.02)

注意ENVI Band Math里如果直接写(b1 - min) / (max - min),min和max需要替换成具体数字,因为Band Math不支持读取全局统计值自动填入。

4.2 主成分分析的实操步骤

归一化完成后,按NDVI、WET、NDBSI、LST的顺序合成一个四波段文件。在ENVI里用Layer Stacking把四个单波段合成一个.dat文件,然后打开这个文件,在Toolbox中找Linear / PC Rotation,选择Principal Components。

在PC Rotation对话框里要设置两个关键参数:统计来源(Compute Statistics)和输出波段数。输出波段数我一般直接设为4,这样能看到PC1到PC4各自的解释方差和载荷矩阵。如果想偷懒只输出PC1也可以,但那样就看不到载荷情况,方向校正那一步就不好判断了。

运算完成后,ENVI会在输出报告中列出每个主成分的特征值和方差贡献率。重点看PC1的方差贡献率,如果低于65%,说明四个指标之间的相关性较弱,或者某个指标有异常。这时候最好回去检查是否做了水体掩膜、是否有大量云残留。

4.3 PC1方向校正:RSEI是不是越大越好

这一步是整个流程里最容易语义出错的地方。PCA本身不知道“生态好”是应该数值大还是小。如果PC1表达式里,NDVI、WET有负的载荷,LST、NDBSI有正的载荷,那么PC1越大可能代表生态越差,这时候如果直接拿PC1当RSEI用,图就反了。

常规做法是,先看PCA载荷矩阵:如果PC1与NDVI、WET呈正相关,与LST、NDBSI呈负相关,说明PC1大表示生态好,可以直接用;如果反过来,就先计算一个中间指数,再用1减去它,让方向对齐。

我自己的流程是,先把PC1栅格归一化到0-1,得到初始生态指数EI0,然后算EI0与NDVI的相关系数。如果相关系数为正,RSEI = EI0;如果相关系数为负,RSEI = 1 - EI0。你可以用ENVI的Compute Statistics里的相关矩阵来判断,也可以直接用两个栅格的散点图肉眼观察。这一步虽然简单,但直接决定最终RSEI图会不会令人困惑。

最后把RSEI再次归一化到0-1,方便分级和制图。一个非常耗时的细节是,在用Band Math写1 - EI0的时候,要确保EI0里没有NoData值,否则NoData会变成负数或NaNs,制图时会出现很多黑点。

4.4 用Python跑PCA的替代方案

如果你手里影像特别多,想在Python下批量处理,也可以不用ENVI。思路是用gdal把四个指标栅格读成numpy数组,归一化后在有效像元上做PCA。

大致步骤是先读取四个数组,把无效值统一设为np.nan,然后取所有有效像元组成的二维矩阵,用numpy的np.linalg.eig或者sklearn.decomposition.PCA计算主成分。注意sklearn的PCA会要求输入标准化数据,这里我们只做0-1归一化,严格来说和ENVI里基于协方差矩阵的PCA会有细微差别,但结果方向基本一致,不影响RSEI分级。

用Python的好处是批量处理比较方便,坏处是内存占用大。一个30米分辨率的县域Landsat影像,单波段可能有几百万像元,四个波段合成数组,普通电脑还能跑,但如果做全省范围,建议分块处理或者直接用ENVI,我一般是两种混着用,ENVI做交互探索,Python做批量生产。

5. 结果分级、制图与变化检测

RSEI算出来后,其实已经是一张能看出生态质量空间差异的灰度图了。但要真正用于评价和论文制图,还需要做分级、统计,甚至跨年份的变化检测。

5.1 生态质量分级:等间隔四分法最常用

RSEI值域在0到1之间,最常用的分级方法是等间隔四分或五分。四分法一般是:

  • 0~0.2:差
  • 0.2~0.4:较差
  • 0.4~0.6:中等
  • 0.6~0.8:良好
  • 0.8~1.0:优

如果做五分,就是在0.2的间隔里继续细分。等间隔的好处是操作简单、结果直观,而且不同年份之间可以直接对比面积占比。

在ENVI里用密度分割(Density Slice)可以很快把RSEI分成五个等级,然后用Classification to Vector转成矢量或统计面积。如果你喜欢用ArcGIS,直接在图层属性里设置分级符号就可以,面积统计用Zonal Histogram或Tabulate Intersection。

制图时的配色我推荐按“红—橙—黄—绿—深绿”的序列,生态差用红色、优用深绿色,这是国内相关论文常见的配色习惯,读者看着也舒服。要特别注意图例的单位和年份标注,比如“RSEI(2021)”,避免图件信息不全。

5.2 空间变化检测:两个年份相减就能看趋势

要做两个年份的RSEI变化,最简单的方法是用后一年的RSEI减去前一年的RSEI,得到差值图。差值大于0表示生态改善,小于0表示退化。

在做差值之前,有一个隐藏问题:两个年份的RSEI必须出自同一套归一化参数。如果每年都用了独立的归一化参数,那差值会包含很多“伪变化”,不是真实的生态变化。所以我在第四章就提醒过,多年对比要用全局统计参数。

得到差值图后,可以再对差值设定阈值分级,比如差值大于0.1算明显改善,小于-0.1算明显退化,中间算基本不变。阈值根据研究区实际变化幅度来定,没有严格标准,但要在论文里说清楚。

我做过一个市域十年RSEI变化分析,发现生态退化最明显的区域基本集中在建成区扩张的块状区域,以及一些矿区周边;生态改善区域则多出现在退耕还林、生态修复项目区。这类空间分布结论,配合转移矩阵,能把单纯的指数图变成政策评估工具。

5.3 与土地利用、社会经济数据的交叉分析

RSEI单看是一张指数图,但如果叠加土地利用分类结果,就能回答“哪类用地生态质量更好”的问题。我习惯的做法是先把RSEI按土地类型分区统计均值,再用箱线图看不同地类之间的差异。正常情况下林地RSEI最高,水体其次,耕地中等,建设用地最低,裸地偏低。如果结果明显不符合这个规律,要么是掩膜没做好,要么是分类数据与影像时相不匹配,需要排查。

跟社会经济数据交叉分析也常见,比如把RSEI和夜间灯光数据做相关分析,看城市扩张与生态质量的关系。这类分析要注意空间尺度匹配问题,尽量在格网或街道尺度上聚合统计,避免直接在像元级做相关导致空间自相关干扰。

6. 常见问题与排查技巧

跑RSEI的过程中几乎每个人都会遇到几个固定问题,我按频率把我遇到过的坑和解决办法列出来。

6.1 水体掩膜没做干净导致结果失真

这个问题我在第二章提到过。具体症状是RSEI图里水体区域显示为极高的生态质量,而陆地生态差异反而不明显。原因是WET在干净水体上数值非常高,PCA第一主成分被水体主导。

解决办法是在计算四个指标之前就做好水体掩膜,而不是在RSEI算完后再人为擦掉水体。因为PCA的统计过程会把所有像元都纳入计算,只有提前排除水体,PCA才会聚焦陆地生态信息。

水体掩膜我用MNDWI比较多,公式是:

MNDWI = (Green - SWIR1) / (Green + SWIR1)

对应的Landsat 8波段:

MNDWI = (b3 - b6) / (b3 + b6)

阈值取0附近,通常大于0就算水体,再辅以人工目视检查,必要时手动补充缺失的水体多边形。

6.2 LST计算出来负值或离谱的低温

LST为负值,绝大多数情况是亮度温度转换时单位没搞对。很多人直接用ENVI的Thermal Atm Correction工具,参数设置里如果温度输出单位选了Celsius,会得到一个以摄氏度为单位的温度,这没问题。但如果自己写公式,用到的是开尔文温度K,两者相差273.15,一不留神就会算出负值或者低得离谱的温度。

另一个常见问题是用于计算比辐射率的NDVI没有做水体掩膜,水面的NDVI很低,被当成裸地,比辐射率给低了,LST自然偏低。我在一个河流密集的研究区就遇到过,水体附近的LST一下子少了近十度,后来把水体掩膜加上就正常了。

6.3 PC1的解释方差太低,到底要不要用PC2

有的区域地表异质性太大,四个指标之间相关性弱,PC1的方差贡献率只有50%甚至更低。这时候强行用PC1构造RSEI,可能会损失较多信息。

我的处理习惯是:如果PC1贡献率低于60%,先检查是否存在云、水体、条带等噪声;确认数据干净后,再算一下PC2的贡献率。如果PC2贡献率也很高,且其载荷方向更符合生态直觉,可以考虑用PC1和PC2加权合成初始指数,但这样会降低模型简洁性,论文里一定要说明理由。绝大多数情况下,把四个指标重新检查一遍,发现是某个指标归一化时没排除NoData导致的野值,修正之后PC1的贡献率就会升上去。

6.4 跨年份对比时RSEI变化方向与事实不符

这个问题通常不是计算错,而是归一化参数不一致造成的。两个年份各自归一化,就会把每一年的“最好”都置为1,导致即使某一年整体生态变差了,RSEI图上显示出来的高值区域仍然很高。解决方法是回到第四章提到的全局归一化统计参数。

还有一个隐蔽问题:两个年份影像的时相差了两个月,比如一年是7月,另一年是9月,植被物候差异会导致RSEI出现系统性偏差,看起来像是生态变差或变好,其实是季节因素。所以做时间序列时,时相选择必须尽量一致,这一点在数据准备阶段就要想好,后期再校正很麻烦。

6.5 快速自查清单

最后把我做RSEI项目时的自查清单分享出来,每次跑完流程都过一遍:

  • 影像时相是否接近,云量和条带是否控制好?
  • 是否做了大气校正,波段单位是反射率而非DN值?
  • 是否做了水体掩膜,掩膜有没有覆盖全部水体?
  • 四个指标是否都归一化到了0-1?
  • PC1方差贡献率是否大于60%,载荷方向是否符合生态逻辑?
  • RSEI是否与NDVI正相关、与LST负相关?
  • 多年对比是否用了全局统一归一化参数?

如果这些问题都回答正确,RSEI结果基本就是可信的了。我在实际项目中用过这套流程做过省域生态评价、矿区生态修复监测、城市扩张影响分析,也都用同样的自查清单保证结果稳定。RSEI这个模型最大的好处是输入简单、流程固定、结果可解释,只要把预处理和PCA方向这两关把好,后面基本就是流水线一样顺畅。希望这篇教程能让你少走几步弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询