Google Earth Engine(GEE)—— NDVI的CannyEdgeDetector边缘检测适用性分析

本文探讨了使用Google Earth Engine (GEE) 中的CannyEdgeDetector算法对Landsat 8 SR数据进行边缘检测的效果。尽管CannyEdgeDetector旨在识别边界,但在实际应用中,结果并不理想,几乎将整个研究区域标记为边缘,并且分析结果显示存在大量噪声和碎片。文章通过代码展示了问题,并指出在未使用掩模的情况下,结果更加混乱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在GEE中我们有很多算法,其中之一就是边缘监测算法,正式效果对于识别边界分析,比较差,整体的结果,这次使用的数据是Landsat 8 SR数据进行分析。

函数:

ee.Algorithms.CannyEdgeDetector(image, threshold, sigma)
将Canny边缘检测算法应用于一幅图像。输出是一个图像,其带子的名称与输入带子的名称相同,其中非零值表示边缘,值的大小是梯度的大小。

参数。
image(图像)。
要应用边缘检测的图像。

threshold(浮点)。
阈值。只有当梯度大小高于该阈值时,才会考虑对该像素进行边缘检测。

sigma(浮点数,默认为1)。
边缘检测前应用的高斯滤波器的西格玛值。0表示不应用过滤。

返回。图像

代码:

// Canny Edge Detector example.

// Load an image and compute NDVI from it.
//var image = ee.Image('LANDSAT/LT05/C01/T1_TOA/LT05_031034
### 基于 Google Earth Engine (GEE)NDVI Theil-Sen 趋势分析方法 Theil-Sen 方法是一种稳健的趋势估计技术,适用于时间序列数据分析。它通过计算每一对观测值之间的斜率并取中位数来确定整体趋势[^1]。这种方法能够有效减少异常值的影响。 以下是实现基于 GEE 平台的 NDVI 数据 Theil-Sen 趋势分析的具体方法和代码示例: #### 1. 加载 NDVI 时间序列数据 如果已有本地存储的 TIF 文件,则可以通过 `ee.ImageCollection.load` 或上传到资产的方式加载数据集;或者可以直接利用 GEE 中现有的 MODIS、Landsat 等卫星影像集合提取 NDVI 数据[^2]。 ```javascript // 定义研究区域(AOI) var aoi = ee.Geometry.Rectangle([70, 15, 140, 55]); // 示例范围为中国地区 // 使用 Landsat 8 影像作为输入数据源 var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(aoi) .filterDate('2013-01-01', '2022-12-31'); // 计算 NDVI function addNDVI(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); } var withNDVI = collection.map(addNDVI).select('NDVI'); ``` #### 2. 构建年份列表并与图像匹配 为了应用 Sen 斜率算法,需创建对应的时间戳数组,并将其映射至每一幅影像上。 ```javascript // 获取年份数组 var years = ee.List.sequence(2000, 2022); // 将年份附加到每张影像上 var yearlyImages = ee.ImageCollection.fromImages( years.map(function(year){ var start = ee.Date.fromYMD(ee.Number.parse(year), 1, 1); var end = start.advance(1, 'year'); var annualImage = withNDVI.filterDate(start, end) .mean() .set('year', year); // 设置属性 return annualImage; }) ); ``` #### 3. 应用 Theil-Sen Slope 和 Mann-Kendall 检验 使用内置函数执行 Theil-Sen 分析以及 Mann-Kendall 统计测试以评估显著性水平。 ```javascript // 导入工具包用于 MK 测试 var mk = require('users/gena/packages:mk'); // 执行 Theil-Sen Trend Analysis var senSlope = mk.sensSlope(yearlyImages.select('NDVI'), 'year').clip(aoi); // 显示结果图层 Map.centerObject(aoi, 6); Map.addLayer(senSlope.updateMask(senSlope.gt(-0.001)), {min:-0.01,max:0.01}, 'Trend Magnitude'); // 添加 Mann Kendall Test 图层 var pValue = mk.mannKendallPvalue(yearlyImages.select('NDVI'), 'year').clip(aoi); Map.addLayer(pValue.updateMask(pValue.lte(0.05)), {min:0,max:0.05,palette:['blue']}, 'Significance Level'); ``` 上述脚本实现了完整的流程:从原始遥感数据处理得到年度均值 NDVI 到最终完成趋势检测与可视化输出。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值