基于 Google Earth Engine 的 DEM 鞍部自动提取
在数字高程模型(DEM)处理中,“鞍部”是指沿一方向为局部高点、沿垂直方向为局部低点的特殊地形关键点。本文提出一种结合 二阶导数卷积核(Hessian 行列式)、局部极值、坡度约束 与 连通性过滤 的鞍部提取流程,并在 GEE 中实现对北京市附近 DEM 的自动化提取。d
代码进群获取
一、方法思路
二阶导数卷积核(Hessian)
邻域极值判断
在更大尺度(如 5×5 窗口)内,判断中心点在东西向为局部凸起(中心 ≥ 东、西),在南北向为局部凹陷(中心 ≤ 南、北)
坡度与曲率过滤
只保留中等坡度(5°–30°)范围内的点
丢弃曲率(∣detH∣|\det H|∣detH∣)过小的平坦或过大的噪声
小簇连通性约束
只保留面积(像元数)<= 5 的孤立小簇,剔除大片噪声区
二、GEE 代码
// 1. 定义 ROI:北京市中心 3 km 缓冲区
var roi = ee.Geometry.Point(116.4074, 39.9042).buffer(3000);// 2. 载入 DEM 并裁剪
var dem = ee.Image('USGS/SRTMGL1_003').clip(roi);// 3. 计算坡度(°)
var slope = ee.Terrain.slope(dem);// 4. 构造二阶导数卷积核
var kxx = ee.Kernel.fixed(3,3,[[0,0,0],[1,-2,1],[0,0,0]],1,1,false);
var kyy = ee.Kernel.fixed(3,3,[[0,1,0],[0,-2,0],[0,1,0]],1,1,false);
var kxy = ee.Kernel.fixed(3,3,[[ 0.25, 0, -0.25],[ 0, 0, 0 ],[-0.25, 0, 0.25]],1,1,false);// 12. 可视化
Map.centerObject(roi, 12);
Map.addLayer(dem, {min:0, max:2000}, 'DEM', false);
Map.addLayer(slope, {min:0, max:60}, 'Slope', false);
Map.addLayer(detH, {min:-0.01,max:0.01},'detH', false);
Map.addLayer(saddle, {palette:['red']}, 'Saddle pts');// 13. 导出到 Google Drive
Export.image.toDrive({image: saddle.toInt8(),description: 'Beijing_Saddle_Points',folder: 'GEE_Outputs',fileNamePrefix: 'saddle_beijing',region: roi,scale: 30,maxPixels: 1e8
});
三、代码解读
步骤 1–2:设置分析范围并加载 30 m SRTM DEM。
步骤 3:获取每像元坡度,用于后续剔除极平或极陡区域。
步骤 4–6:卷积近似计算二阶导数并形成 Hessian 行列式,快速定位曲率显著的鞍点候选。
步骤 8–9:在 5×5 窗口内判断局部东西凸起、南北凹陷,捕捉“马鞍”形状。
步骤 10:同时施加曲率阈值和坡度范围,去除噪声和不合地形特征的误检。
步骤 11:以 ConnectedPixelCount 只保留孤立少量像元,过滤成片噪声,得到稀疏、精准的鞍点。
步骤 12–13:可视化检查并导出结果。