Google Earth Engine城市水体提取

本文介绍了在城市环境中利用Google Earth Engine(GEE)进行水体提取的方法,引用了一篇2018年的研究,提出了Two-Step Urban Water Index (TSUWI)算法。通过GEE实现的实验结果展示了对Sentinel2影像中水体和阴影的有效区分。作者还分享了C++版本的实现,并计划发布Matlab和Python版本。文章强调了GEE在栅格渲染方面的优势,并提供了一个GEE应用链接供在线查看结果。

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

Google Earth Engine城市水体提取

 

大家都知道城市水体提取相比较于山区,丘陵的地区,肯定是比较难的,为什么呢,因为城市水体有很多高层建筑导致的阴影,这个就非常复杂了,而且现在很多高分影像只有可见光和近红外波段,那么我们如何准确提取城市水体呢?

Remoe Sensing2018年刊发了一篇城市水体高分影像自动提取算法(Two-Step Urban Water Index (TSUWI): A New Technique for High-Resolution Mapping of Urban SurfaceWater [J]Remote Sensing,2018),初步看来,效果还行,在高分二号上面效果不错,我再想,如果对于开源的哨兵、Landsat如何?这些是中等分辨率影像,能做到吗?

话不多说,利用GEE,直接编码,实验结果如下(以2018年10月的北京某景Sentinel2影像为例):

(a) 这是原始影像

(b) 这是城市水体指数

(c) 这是城市阴影指数

(d) 这是城市水体提取结果,蓝色为水体

 

其中城市水体指数和城市阴影指数计算公式如下所示:

 

 

我把最终成果发布成了APPengine(https://wang749195.users.earthengine.app/view/urbanwaterextraction),大家可以直接在web上看,总的来说,实验结果还是不错的,去掉了阴影现象,这篇文章出自中科院遥感所,在此申明,值得一读,后续我会发布C++软件版本,Matlab版本,以及Python版本。我个人的开发思路是,首先用GEE实现,如果GEE不好实现,就用matlab或者python实现第一遍,效果可以,能工程应用,立马就用GDAL+C++打包成工程源代码,我感觉这样会节省时间,且不会造成时间浪费。

 

接着上面讲,我们用c++来实现一遍,使用GDAL读写影像,先把这两个函数写上来:

/*栅格影像读取,返回数据指针
* imgPath:图像位置
* 返回float类型的数据指针
*/
void readImage(char *imgpath, imgData *IMG, int bandindex) {

    GDALDataset *img = (GDALDataset*)GDALOpen(imgpath, GA_ReadOnly);
    if (img != NULL) {

        int imgWidth = img->GetRasterXSize();   //图像宽度,特别注意:对应matlab中的行
        int imgHeight = img->GetRasterYSize();  //图像高度,特别注意:对应matlab中的列
        int bandNum = img->GetRasterCount();    //波段数

        IMG->imgH = imgHeight;
        IMG->imgW = imgWidth;

        GDALRasterBand </
<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月 | 避开枯水期 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值