Earth Engine下水体提取

本次内容为Landsat-8遥感影像中水体的提取,用到了New Water Index(NWI)指数,效果较好。

文献(丁凤,2009)中还花一定篇幅对大气校正进行阐述,意在体现其重要性。但个人认为如果只是对分类或提取,大气校正其实是鸡肋的(真香警告),所以本次辨证地对TOA(大气层顶反射率)计算结果NWI(TOA)和SR(地表反射率)计算结果NWI(SR)进行了对比:在案例区域(长江黄冈段)中,NWI(TOA)只要大于0就可以很好地提取出水体,而NWI(SR)则要自己调整阈值。但在后面的普适性验证中,发现NWI(TOA)>0这样的条件虽然很简单,实则并不具备普适性,容易将山体阴影也划分为水体,所以最后还是在案例区域找到了适合NWI(SR)的阈值,并在我国大部分区域(华东,华南,华北,东北,西北,西南,台湾北,台湾南)做了验证,发现-0.6这个阈值很适合Landsat-8地表反射率产品计算的NWI指数做水体提取,对于快速提取水体有很大帮助。有兴趣的可以自行验证。(注:Earth Engine中的SR产品需要除10000才是小于1的反射率值)

以东北地区验证为例,结果如下,蓝色即为水体:

不足:提取结果中包含水田或蓄水池,且对于单像元的水体也可以进行提取,所以提取结果存在碎斑化现象。

/*
 * Extrction of Water
 * Using Landsat-8 Imagery
 *
 * Author: Deserts Tsung, Nov 20,201
<think>好的,用户想用Google Earth Engine(GEE)进行城市水体提取的方法或教程,并且需要示例代码。首先,我需要回忆GEE中常用的水体提取方法。根据引用内容,用户提供的参考资料提到了使用MODIS数据、地形分析,还有RivWidthCloud算法等。但城市水体可能涉及更高分辨率的影像,比如Landsat或Sentinel-2,因为MODIS的分辨率较低,适合大范围水体,而城市水体可能较小。 接下来,用户可能需要一个基本的流程,包括数据选择、预处理、水体指数计算、阈值分割和后处理。比如,使用NDWI(归一化水体指数)是常见的方法。另外,考虑到城市区域可能有建筑物阴影,可能需要结合其他指数或方法,比如MNDWI(改进的归一化水体指数)来减少误判。 根据引用[4],使用MODIS数据提取水体,但城市应用可能需要更高分辨率的数据,所以应该推荐Landsat 8或Sentinel-2。另外,引用[3]提到了自动提取河宽的算法,可能涉及水体边缘检测,但城市水体可能包括湖泊、池塘等静止水体,所以需要不同的处理步骤。 然后,示例代码的结构应该包括:加载影像集,选择合适的时间和区域,计算水体指数,应用阈值,掩膜提取水体,并可视化结果。需要确保代码使用geemap库,因为引用[1]提到该用户资源使用了geemap。同时,代码需要处理云遮盖的问题,比如使用Landsat的QA波段进行云掩膜。 可能的问题点:如何确定NDWI的阈值?通常经验值0.2-0.5,但可能需要根据具体影像调整。此外,城市中的建筑物可能和水的反射率相似,尤其是在近红外波段,所以可能需要形态学操作去除小斑块,或者结合其他波段信息。 用户可能还需要后处理步骤,比如使用connectedPixelCount来过滤小面积水体,提高准确性。此外,地形数据辅助可能帮助,如引用[4]提到的地形分析,但在城市中可能用处不大,除非有地形起伏影响。 最后,确保代码语法正确,使用gee的Python API和geemap,按照用户提供的引用中的示例结构来编写。同时,生成的相关问题需要考虑用户可能的后续疑问,比如不同水体指数的区别、如何处理云遮盖、如何提高精度等。</think>以下是使用Google Earth Engine进行城市水体提取的方法与实现步骤,结合了MODIS数据分析和NDWI水体指数技术[^4],并整合了geemap可视化工具[^1]: ### 一、核心方法 城市水体提取主要采用**改进型归一化水体指数(MNDWI)**,其公式为: $$ \text{MNDWI} = \frac{\text{Green} - \text{SWIR1}}{\text{Green} + \text{SWIR1}} $$ 相比传统NDWI,MNDWI能更好地区分建筑物阴影和水体 ### 二、实现步骤 1. **数据准备**:使用Landsat 8影像(30米分辨率) 2. **预处理**:云掩膜处理+辐射校正 3. **指数计算**:应用MNDWI阈值分割 4. **后处理**:形态学滤波去除噪点 ### 三、示例代码 ```python import ee import geemap # 初始化GEE ee.Initialize() # 定义研究区域(以上海为例) roi = ee.Geometry.Rectangle([121.1, 30.8, 122.0, 31.5]) # 加载Landsat 8影像集 l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') \ .filterDate('2022-05-01', '2022-09-30') \ .filterBounds(roi) \ .map(lambda img: img.clip(roi)) # 云掩膜函数 def cloud_mask(image): qa = image.select('QA_PIXEL') cloud_mask = qa.bitwiseAnd(1 << 3).Or(qa.bitwiseAnd(1 << 4)) return image.updateMask(cloud_mask.Not()) # 计算MNDWI def calc_mndwi(image): mndwi = image.normalizedDifference(['SR_B3', 'SR_B6']).rename('MNDWI') return image.addBands(mndwi) # 处理影像集 processed = l8.map(cloud_mask).map(calc_mndwi) # 合成中值影像 median_image = processed.median() # 阈值分割(经验值0-0.4) water = median_image.select('MNDWI').gt(0.1) # 形态学滤波 kernel = ee.Kernel.circle(radius=1) water_smooth = water \ .focal_min(kernel=kernel, iterations=1) \ .focal_max(kernel=kernel, iterations=1) # 可视化参数 vis_params = {'min':0, 'max':1, 'palette':['white','blue']} # 创建地图 Map = geemap.Map() Map.centerObject(roi, 10) Map.addLayer(water_smooth, vis_params, 'Urban Water') Map ``` ### 四、关键参数说明 | 参数 | 建议值 | 作用 | |------|--------|------| | MNDWI阈值 | 0.1-0.3 | 控制水体识别灵敏度 | | 形态学滤波 | 1-3像素 | 消除细小噪点 | | 时间范围 | 5-9月 | 避开枯水期 |
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值