目录
[(一)Sentinel-1 数据特性](#(一)Sentinel-1 数据特性)
[(二)Sentinel-1 数据获取函数](#(二)Sentinel-1 数据获取函数)

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!
一、前言
在山区地质灾害监测工作中,天气条件常常成为阻碍。光学遥感技术会受云层、雾气等因素干扰,难以稳定获取地表信息,而合成孔径雷达(SAR)凭借独特优势,完美解决了这一难题。它通过主动发射微波并接收回波信号,能够不受天气和光照影响,实现全天候、全天时的穿透云层成像,在滑坡监测、洪水分析、地形变化监测等领域发挥着不可替代的作用。
本文将以实际案例为依托,详细讲解如何在 Google Earth Engine(GEE)平台上,运用 Sentinel-1 SAR VV 极化数据开展山区滑坡检测工作。整个案例基于 "年度均值合成 + 差分检测" 的核心思路,最终还会绘制出滑坡易发区,为相关地质灾害监测工作提供参考。
二、核心原理剖析
(一)Sentinel-1 数据特性
Sentinel-1 卫星搭载的是 C 波段合成孔径雷达(SAR),其波长约为 5.6cm,这一波长特性使其在对地观测中能较好地平衡分辨率与穿透能力。
该卫星具备 VV 和 VH 两种极化方式,其中 VV 极化对地表物体的形变反应更为敏感,当地表发生滑坡等地质变化时,VV 极化数据能更清晰地捕捉到相关信息,因此非常适合用于地质灾害分析工作。
此外,Sentinel-1 数据最大的优势在于不受天气和光照条件的限制。无论是阴雨天气还是夜间,它都能稳定地获取地表时序数据,为长时间序列的滑坡监测提供了可靠的数据支撑。
(二)滑坡检测原理
滑坡发生前后,地表的植被覆盖和土壤结构会遭到严重破坏。这种破坏会直接导致雷达后向散射强度发生显著下降,这是因为植被的减少和土壤结构的改变会影响微波的反射特性。
基于这一现象,我们可以采用多时相影像差分的方法来检测滑坡。具体来说,就是用后一年的 SAR 影像数据减去前一年的 SAR 影像数据,通过这种差分运算,能够清晰地捕捉到地表后向散射强度发生显著变化的区域,这些区域很可能就是滑坡发生的区域。
为了更精准地提取潜在滑坡区域,还需要结合阈值判别法。在大量实践和研究的基础上,通常将后向散射强度下降超过 2dB(即差分结果小于 - 2dB)作为判别标准,当差分结果满足这一条件时,对应的区域就被认定为潜在滑坡区域。
三、数据处理全流程
(一)步骤拆解
整个滑坡检测的数据处理流程共分为 6 个关键步骤,每个步骤环环相扣,共同构成了完整的检测体系:
- 导入研究区 AOI:AOI(Area of Interest,感兴趣区域)是我们开展滑坡检测的具体范围。在 GEE 平台中,需要先将研究区的矢量边界数据(如 Shapefile 格式数据)导入,作为后续所有数据处理和分析的空间约束范围。
- 获取 Sentinel-1 SAR 数据:明确需要获取的数据为 Sentinel-1 SAR 的 VV 极化数据,并且采用 IW(Interferometric Wide swath,干涉宽幅)模式。通过 GEE 平台的数据集合,根据研究区范围、指定的时间范围等条件,筛选出符合要求的 Sentinel-1 SAR 数据。
- 计算年度均值合成影像:由于单一时相的 SAR 数据可能会受到噪声、大气干扰等因素的影响,不能很好地反映地表的长期稳定状况。因此,需要对获取到的多时相 SAR 数据按年度进行平均计算,得到年度均值合成影像,以此来削弱短期干扰因素,突出地表的长期变化趋势。
- 进行差分运算:选取相邻两个年度的均值合成影像,用后一年的均值影像减去前一年的均值影像,得到地表后向散射变化图。这张变化图能够直观地展示出两年间地表后向散射强度的变化情况,为后续滑坡区域提取提供依据。
- 应用阈值提取潜在滑坡区域:根据前面提到的阈值判别标准(后向散射强度下降超过 2dB),对差分得到的后向散射变化图进行阈值分割。将差分结果小于 - 2dB 的区域提取出来,这些区域就是初步判定的潜在滑坡区域。
- 统计面积并可视化,导出结果:对提取出的潜在滑坡区域进行面积统计,将面积单位转换为平方千米(km²),以便更直观地了解滑坡的规模大小。同时,在 GEE 平台的地图界面上对研究区影像、后向散射变化图、潜在滑坡区域等进行可视化展示,让检测结果更加清晰易懂。最后,将潜在滑坡区域的影像数据导出到 Google Drive 等存储位置,方便后续的进一步分析和应用。
(二)关键环节说明
- 数据筛选条件:在获取 Sentinel-1 SAR 数据时,除了指定 VV 极化和 IW 模式外,还需要严格设置空间过滤和时间过滤条件。空间过滤即根据导入的研究区 AOI,只保留研究区内的数据;时间过滤则是根据研究需求,确定需要分析的时间跨度(如 2019-2020 年),只获取该时间段内的数据,以保证数据的针对性和有效性。
- 年度均值计算意义:年度均值合成影像能够有效降低 SAR 数据中的随机噪声、大气波动等短期干扰因素的影响。例如,某一区域在某一时刻可能会因为临时的大气湍流导致后向散射强度出现异常,但通过年度均值计算,这种短期异常会被平均掉,从而更真实地反映该区域地表的正常后向散射特性,为后续的差分运算提供更可靠的基础数据。
- 阈值确定依据:将 2dB 作为阈值并非主观随意设定,而是经过大量的实验验证和实际案例分析得出的。在不同地区、不同地形条件下的滑坡监测实践中,研究人员发现当后向散射强度下降超过 2dB 时,对应的区域与实际发生滑坡的区域吻合度最高,能够在保证较高检测准确率的同时,最大限度地减少漏检和误检的情况。
四、结果解读与分析
(一)直方图分析
通过代码中绘制的 "滑坡变化直方图",我们可以清晰地看到后向散射变化值的分布规律。直方图的横轴代表后向散射变化值(单位:dB),纵轴代表对应变化值的像素数量。
从直方图中可以观察到,大部分像素的后向散射变化值集中在 0 附近,这些像素对应的区域地表状况相对稳定,没有发生明显的滑坡现象。而当变化值小于 - 2dB 时,像素数量开始显著减少,这部分像素对应的区域就是后向散射强度显著下降的区域,也就是我们重点关注的潜在滑坡区域。直方图的分布情况进一步验证了将 - 2dB 作为滑坡判别阈值的合理性,能够有效区分滑坡区域与非滑坡区域。
(二)滑坡区域提取结果
在 GEE 平台的地图界面上,潜在滑坡区域以黄色显示,这些黄色区域就是我们通过数据处理和阈值筛选提取出来的滑坡易发区和已发生滑坡的区域。
通过与实地调查数据或高分辨率光学影像(在天气条件允许的情况下)进行对比,可以发现这些黄色区域与实际的滑坡区域具有较高的吻合度。例如,在某山区的检测结果中,黄色区域准确对应了当地已知的滑坡灾害点,同时还发现了一些此前未被发现的小型潜在滑坡区域,为地质灾害隐患排查提供了重要线索。
(三)面积统计结果
代码运行后,在 GEE 平台的控制台会输出 "Estimated Landslide Area (km²):" 以及对应的数值,该数值就是研究区内潜在滑坡区域的总面积。
面积统计结果能够帮助我们直观地了解研究区滑坡灾害的总体规模。例如,若统计结果为 8km²,说明研究区内潜在滑坡区域的总面积达到 8 平方千米,相关部门可以根据这一数据,结合研究区的人口分布、基础设施情况等,评估滑坡灾害可能造成的影响范围和损失程度,为制定防灾减灾预案提供量化依据。
五、应用扩展与注意事项
(一)应用扩展
- 多极化数据联合分析:除了使用 VV 极化数据外,还可以结合 VH 极化数据进行联合分析。VV 极化数据对地表形变敏感,而 VH 极化数据对植被覆盖变化更为敏感。通过将两种极化数据的分析结果进行融合,可以进一步提高滑坡检测的准确性,尤其是在植被覆盖度较高的山区,能够更好地排除植被变化对滑坡检测结果的干扰。
- 长时间序列监测:本文案例采用的是两年数据进行差分分析,在实际应用中,可以扩展到更长的时间序列(如 5 年、10 年)。通过对长时间序列的 SAR 数据进行分析,能够研究滑坡的演化过程和发展趋势,预测滑坡的可能发生时间和规模,为地质灾害的长期预警提供支持。
- 与其他数据融合应用:将 SAR 数据与光学遥感数据、数字高程模型(DEM)数据等进行融合。光学遥感数据在天气良好时能够提供高分辨率的地表纹理信息,有助于对滑坡区域进行详细的地貌特征分析;DEM 数据能够提供地表高程信息,可用于分析滑坡发生区域的地形坡度、坡向等地形因子,研究地形条件与滑坡发生的关联性,进一步完善滑坡检测和风险评估体系。
(二)注意事项
- 数据质量检查:在获取 Sentinel-1 SAR 数据后,需要对数据质量进行仔细检查。重点关注数据是否存在严重的噪声、条纹干扰、数据缺失等问题。如果数据质量不佳,需要进行必要的预处理(如去噪、辐射定标等),否则会影响后续的年度均值合成、差分运算等步骤的结果准确性,进而导致滑坡检测结果出现偏差。
- 阈值的适应性调整:本文案例中采用的 - 2dB 阈值是一个通用的参考阈值,但在不同的研究区,由于地形条件、地表覆盖类型、气候环境等因素的差异,该阈值可能并不完全适用。因此,在实际应用中,需要根据研究区的具体情况,结合直方图分析结果、实地调查数据等,对阈值进行适应性调整,以确保滑坡检测结果的准确性和可靠性。
- 结果验证的必要性:通过 SAR 数据处理得到的潜在滑坡区域结果,不能直接作为最终的滑坡灾害结论。必须进行实地验证,通过现场勘查,确认提取的潜在滑坡区域是否确实发生了滑坡,以及滑坡的实际规模、形态等是否与检测结果一致。同时,还可以结合历史滑坡灾害数据、气象数据等,对检测结果进行进一步的验证和修正,提高结果的可信度。
六、代码详细解析
(一)研究区定义部分
javascript
var geometry = table;
var almora = geometry; // 研究区 AOI
Map.centerObject(almora, 10);
Map.addLayer(almora, {}, 'Study Area', false);
var geometry = table;
:这里的table
是预先导入到 GEE 平台的研究区矢量数据(通常是 Shapefile 格式),通过这行代码将其赋值给geometry
变量。var almora = geometry;
:为研究区变量创建一个更有意义的名称(这里以 "almora" 为例,可能是实际研究区域的名称),AOI 表示 "Area of Interest"(感兴趣区域)。Map.centerObject(almora, 10);
:将地图视图中心定位到研究区,第二个参数 10 是缩放级别(数值越大,视图越近)。Map.addLayer(almora, {}, 'Study Area', false);
:将研究区边界添加到地图上作为一个图层。参数说明:- 第一个参数:要添加的对象(研究区)
- 第二个参数:空对象
{}
表示使用默认样式 - 第三个参数:图层名称
- 第四个参数:
false
表示默认不显示该图层(可在地图界面手动勾选显示)
(二)Sentinel-1 数据获取函数
javascript
function getS1Collection(start, end) {
return ee.ImageCollection('COPERNICUS/S1_GRD')
.filterBounds(almora) // 空间过滤
.filterDate(start, end) // 时间过滤
.filter(ee.Filter.eq('instrumentMode', 'IW')) // IW 模式
.filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
.select('VV'); // 选择 VV 波段
}
这是一个自定义函数,用于获取符合特定条件的 Sentinel-1 SAR 数据:
function getS1Collection(start, end)
:定义函数,接收两个参数start
和end
,分别表示数据的起始和结束日期。return ee.ImageCollection('COPERNICUS/S1_GRD')
:返回 Sentinel-1 的 GRD(地距产品)影像集合,这是经过辐射校正和几何校正的初级产品。
过滤条件详解:
.filterBounds(almora)
:空间过滤,只保留与研究区almora
相交的数据。.filterDate(start, end)
:时间过滤,只保留指定日期范围内的数据。.filter(ee.Filter.eq('instrumentMode', 'IW'))
:筛选干涉宽幅模式(IW 模式)的数据,该模式具有中等分辨率和较宽的覆盖范围,适合区域研究。.filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
:筛选包含 VV 极化方式的数据。.select('VV')
:只保留 VV 极化波段,剔除其他波段。
(三)年度均值影像计算
javascript
function yearlySAR(year) {
var start = ee.Date.fromYMD(year, 1, 1);
var end = start.advance(1, 'year');
var yearlyMean = getS1Collection(start, end).mean();
return yearlyMean.set('year', year);
}
var years = ee.List.sequence(2019, 2020);
var yearlyImages = years.map(function(y) {
return yearlySAR(y);
});
var yearlyCollection = ee.ImageCollection(yearlyImages);
这部分代码用于生成指定年份的年度平均 SAR 影像:
-
function yearlySAR(year)
:定义函数,接收年份作为参数,返回该年份的平均 SAR 影像。var start = ee.Date.fromYMD(year, 1, 1);
:创建该年份 1 月 1 日的日期对象。var end = start.advance(1, 'year');
:计算该年份结束日期(即下一年的 1 月 1 日)。var yearlyMean = getS1Collection(start, end).mean();
:调用getS1Collection
获取全年数据,并计算平均值,得到年度均值影像。return yearlyMean.set('year', year);
:为生成的均值影像添加year
属性,记录对应的年份。
-
var years = ee.List.sequence(2019, 2020);
:创建一个包含 2019 和 2020 年的列表。 -
var yearlyImages = years.map(function(y) { return yearlySAR(y); });
:对列表中的每个年份应用yearlySAR
函数,生成年度均值影像列表。 -
var yearlyCollection = ee.ImageCollection(yearlyImages);
:将影像列表转换为影像集合,便于后续处理。
(四)差分运算准备
javascript
var firstYear = yearlyCollection.filter(ee.Filter.eq('year', 2019)).first();
var lastYear = yearlyCollection.filter(ee.Filter.eq('year', 2020)).first();
- 这两行代码从年度影像集合中分别筛选出 2019 年和 2020 年的均值影像。
.filter(ee.Filter.eq('year', 2019))
:使用属性过滤器,筛选出year
属性等于 2019 的影像。.first()
:获取筛选结果中的第一张影像(这里每个年份只有一张均值影像)。
(五)后向散射变化计算
javascript
var backscatterChange = ee.Image(lastYear).subtract(firstYear).rename(['Change']);
- 这行代码计算两年间的后向散射变化,是滑坡检测的核心步骤。
ee.Image(lastYear).subtract(firstYear)
:用 2020 年的均值影像减去 2019 年的均值影像,得到每个像素的变化值。.rename(['Change'])
:将计算结果的波段重命名为 "Change",便于识别。
(六)直方图可视化
javascript
print(ui.Chart.image.histogram(backscatterChange, almora, 30)
.setOptions({
title: 'Landslide Change Histogram',
hAxis: {title: 'Backscatter Change (dB)'},
vAxis: {title: 'Pixel Count'}
})
);
- 这段代码生成后向散射变化值的直方图,用于分析变化值的分布情况。
ui.Chart.image.histogram()
:创建影像直方图,参数分别为:要分析的影像、分析范围、分辨率(30 米)。.setOptions()
:设置图表样式,包括标题、横轴标签(后向散射变化,单位 dB)和纵轴标签(像素数量)。print()
:在 GEE 控制台显示该直方图。
(七)滑坡区域提取
javascript
var landslideMask = backscatterChange.lt(-2);
var landslideZones = landslideMask.updateMask(landslideMask);
- 这部分代码基于阈值提取潜在滑坡区域。
backscatterChange.lt(-2)
:创建一个掩码,其中后向散射变化值小于 - 2dB 的像素为 1(真),其余为 0(假)。lt
表示 "less than"(小于)。landslideMask.updateMask(landslideMask)
:更新掩码,只显示值为 1 的区域(即潜在滑坡区域),值为 0 的区域将被隐藏。
(八)滑坡面积计算
javascript
var landslideZonesArea = landslideZones.multiply(ee.Image.pixelArea().divide(1e6));
var totalLandslideArea = landslideZonesArea.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: almora,
scale: 100
}).values().get(0);
print('Estimated Landslide Area (km²):', ee.Number(totalLandslideArea).round());
-
这部分代码计算潜在滑坡区域的总面积(单位:平方千米)。
-
ee.Image.pixelArea()
:生成一个每个像素值代表该像素面积(平方米)的影像。 -
.divide(1e6)
:将面积单位从平方米转换为平方千米(1 平方千米 = 1,000,000 平方米)。 -
landslideZones.multiply(...)
:将滑坡掩码与面积影像相乘,得到每个滑坡像素的面积。 -
reduceRegion()
:对研究区内的面积进行统计,参数包括:reducer: ee.Reducer.sum()
:使用求和 reducer 计算总面积。geometry: almora
:统计范围为研究区。scale: 100
:统计分辨率为 100 米(降低分辨率以提高计算速度)。
-
.values().get(0)
:从统计结果中提取数值。 -
ee.Number(totalLandslideArea).round()
:将面积值四舍五入为整数。 -
print()
:在控制台显示估算的滑坡总面积。
(九)可视化参数设置
javascript
var sarVis = {min: -25, max: 0, palette: ['blue', 'white', 'green']};
var changeVis = {min: -5, max: 5, palette: ['red', 'white', 'blue']};
var slideVis = {palette: ['yellow']};
- 定义不同图层的可视化参数:
sarVis
:用于 SAR 均值影像,值范围从 - 25 到 0(dB),颜色从蓝色到白色再到绿色。changeVis
:用于后向散射变化图,值范围从 - 5 到 5(dB),红色表示显著下降(潜在滑坡),蓝色表示显著上升。slideVis
:用于潜在滑坡区域,设置为黄色显示。
(十)地图图层展示
javascript
Map.addLayer(firstYear.clip(almora), sarVis, 'SAR VV (2019)', false);
Map.addLayer(lastYear.clip(almora), sarVis, 'SAR VV (2020)', false);
Map.addLayer(backscatterChange.clip(almora), changeVis, 'Backscatter Change');
Map.addLayer(landslideZones.clip(almora), slideVis, 'Potential Landslide Zones');
- 将各影像图层添加到地图上展示:
.clip(almora)
:将影像裁剪到研究区范围,只显示研究区内的部分。- 第四个参数
false
表示该图层默认不显示(可手动勾选)。 - 2019 年和 2020 年的 SAR 影像默认不显示,而后向散射变化图和潜在滑坡区域默认显示。
(十一)结果导出
javascript
Export.image.toDrive({
image: landslideZones.clip(almora),
description: 'almora_Landslide_Zones_2019_2020',
region: almora,
scale: 10,
crs: 'EPSG:4326',
maxPixels: 1e13,
folder: 'Landslide_Detection'
});
- 这段代码将潜在滑坡区域影像导出到 Google Drive:
image: landslideZones.clip(almora)
:要导出的影像(裁剪到研究区的滑坡区域)。description
:导出任务的描述名称。region: almora
:导出范围为研究区。scale: 10
:导出分辨率为 10 米。crs: 'EPSG:4326'
:导出影像的坐标系为 WGS84(常用的经纬度坐标系)。maxPixels: 1e13
:设置最大像素限制,避免因影像过大导致导出失败。folder: 'Landslide_Detection'
:导出文件保存到 Google Drive 中的指定文件夹(需提前创建)。
七、运行结果
点击RUN即可下载数据
研究区内潜在滑坡区域的总面积和直方图分析结果
研究区
2019年研究区的SAR-VV极化数据可视化
2020年研究区的SAR-VV极化数据可视化
后向散射变化计算结果
研究区潜在滑坡区域识别结果
直方图分析:可以帮助确定阈值,区分滑坡与非滑坡区域
八、总结
本文聚焦山区地质灾害监测痛点,以 **"技术原理 + 实操流程 + 代码实现"**为核心,系统介绍了在 Google Earth Engine(GEE)平台使用 Sentinel-1 SAR 数据开展滑坡检测的完整方案,为相关领域从业者提供了可落地的技术参考。
在技术原理层面,本文首先明确了 Sentinel-1 SAR 数据的核心优势 ------ 采用 C 波段(波长约 5.6cm)、支持 VV/VH 极化,其中 VV 极化对地物形变敏感,且不受天气、光照限制,能稳定获取时序数据,完美弥补光学遥感在山区监测中的短板;同时阐释滑坡检测的核心逻辑:滑坡会破坏地表植被与土壤结构,导致雷达后向散射强度显著下降,通过 "多时相影像差分(后一年 - 前一年)+ 阈值判别(dB 下降> 2)",即可提取潜在滑坡区域。
实操流程上,本文将数据处理拆解为 6 个清晰步骤:导入研究区 AOI、获取 Sentinel-1 VV 极化 / IW 模式数据、计算年度均值合成影像(削弱短期干扰)、执行差分运算得到后向散射变化图、按阈值提取滑坡区域、统计面积并可视化导出,每一步均围绕 "突出地表变化、精准定位滑坡" 的目标展开,逻辑连贯且重点明确。
代码实现部分,本文提供了带中文注释的 GEE JavaScript 完整代码,覆盖从研究区定义(如定位与图层添加)、数据筛选(空间 / 时间 / 模式 / 极化多维度过滤)、年度均值计算(自定义函数批量处理)、差分运算、直方图分析(辅助阈值验证)、滑坡掩码提取、面积统计(转换为 km² 便于应用),到可视化参数设置、地图图层展示及结果导出(保存至 Google Drive)的全流程,代码可读性强,可直接修改适配不同研究区。
结果解读环节 ,本文指出直方图可辅助验证 - 2dB 阈值的合理性(区分滑坡与非滑坡区域像素分布),黄色标注的潜在滑坡区直观呈现风险范围,面积统计结果(如示例中的估算面积)则为灾害影响评估提供量化依据,形成 **"数据 - 处理 - 结果 - 应用"**的闭环。
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!