在进行光学数据提取水体时,常会发现部分时间、部分区域内由于云的存在而出现大面积的空白区域,从而使得我们提取水体面积过程中存在不精确的问题。因此,基于微波数据进行云的提取就成为我们较好的一个选择,通过阅读各种文献以及实践,我在原有基于GEE平台和哨兵1号影像提取水体代码的基础上,进行了部分补充,从而使得提取水体的精度更加准确。代码如下所示:

原文链接:基于GEE与哨兵1号影像数据提取水体

// An highlighted blockvar slope_lib = require('users/wushupu18/Nanhu:slope_correction_lib.js');var start = '2020-04-01';var end = '2020-04-30';Map.centerObject(Buffer, 12);var s1_collection = ee.ImageCollection('COPERNICUS/S1_GRD')    .filterBounds(Buffer)    .filterDate(start, end)    .filter(ee.Filter.and(    ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'),    ee.Filter.listContains('transmitterReceiverPolarisation', 'VH'),    ee.Filter.eq('instrumentMode', 'IW')    ));print(s1_collection)//地形校正 var volume = slope_lib.slope_correction(s1_collection,     {'model': 'volume',     'elevation': ee.Image('USGS/SRTMGL1_003'),     'buffer': 50           });var surface = slope_lib.slope_correction(s1_collection,    {'model': 'surface',     'elevation': ee.Image('USGS/SRTMGL1_003'),     'buffer': 50          });print(s1_collection.mean(), 'First image of the original S1 collection')print(volume.mean(), 'First image of the corrected S1 collection');print(volume.mean(), 'First image of the corrected S1 collection');var S1 = volume.map(function(img){   img = img.clip(Buffer)   return img; });Map.addLayer(S1.mean(),{bands: 'VV',min: -18, max: 0}, 'S1')var filterSpeckles = function(img) {var vv = img.select('VV') var vh= img.select('VH')//滤波处理 var vv_smoothed = vv.focal_mean(50,'circle','meters').rename('VV_Filtered')var vh_smoothed = vh.focal_mean(50,'circle','meters').rename('VH_Filtered')return img.addBands(vv_smoothed).addBands(vh_smoothed)}S1 = S1.map(filterSpeckles)Map.addLayer(S1.mean(),{bands: 'VV_Filtered',min: -30, max: 0}, 'Filtered SAR image')var SVV = S1.select("VV_Filtered").reduce(ee.Reducer.mean()).rename("VV_mean");var SVH = S1.select("VH_Filtered").reduce(ee.Reducer.mean()).rename("VH_mean");;var Sen1=SVV.addBands(SVH)print(Sen1)//SDWIfunction SDWI_V1(Sen1) {var VH = Sen1.select("VH_mean");var VV = Sen1.select("VV_mean");var x = VV.multiply(VH).multiply(10);var y=(x).log();var sdwi=y.subtract(8);return sdwi;}var sdwi1 = SDWI_V1(Sen1).select("VV_mean").rename("sdwi");print(sdwi1)var otsu = function(histogram) {var counts = ee.Array(ee.Dictionary(histogram).get('histogram'));var means = ee.Array(ee.Dictionary(histogram).get('bucketMeans'));var size = means.length().get([0]);var total = counts.reduce(ee.Reducer.sum(), [0]).get([0]);var sum = means.multiply(counts).reduce(ee.Reducer.sum(), [0]).get([0]);var mean = sum.divide(total);  var indices = ee.List.sequence(1, size);var bss = indices.map(function(i) {var aCounts = counts.slice(0, 0, i);var aCount = aCounts.reduce(ee.Reducer.sum(), [0]).get([0]);var aMeans = means.slice(0, 0, i);var aMean = aMeans.multiply(aCounts).reduce(ee.Reducer.sum(), [0]).get([0]).divide(aCount);var bCount = total.subtract(aCount);var bMean = sum.subtract(aCount.multiply(aMean)).divide(bCount);return aCount.multiply(aMean.subtract(mean).pow(2)).add(      bCount.multiply(bMean.subtract(mean).pow(2)));});  print(ui.Chart.array.values(ee.Array(bss), 0, means));  return means.sort(bss).get([-1]);};//归一化 function normalization(image,region,scale){ var mean_std = image.reduceRegion({reducer: ee.Reducer.mean()  .combine(ee.Reducer.stdDev(),null, true), geometry: region,scale: scale,maxPixels: 10e9,}); 
var unitScale = ee.ImageCollection.fromImages(image.bandNames().map(function(name){name = ee.String(name);var band = image.select(name);var mean=ee.Number(mean_std.get(name.cat('_mean')));var std=ee.Number(mean_std.get(name.cat('_stdDev')));var max=mean.add(std.multiply(3))var min=mean.subtract(std.multiply(3))var band1=ee.Image(min).multiply(band.lt(min)).add(ee.Image(max).multiply(band.gt(max)))                  .add(band.multiply(ee.Image(1).subtract(band.lt(min)).subtract(band.gt(max)))) var result_band=band1.subtract(min).divide(max.subtract(min));return result_band;})).toBands().rename(image.bandNames());return unitScale; }var sdwi2=sdwi1.select('sdwi')var sdwi3=normalization(sdwi2,Buffer,10)var sdwi_1=sdwi3.multiply(10000)print(sdwi1)var histogram = sdwi_1.select('sdwi').reduceRegion({reducer: ee.Reducer.histogram(255, 2)     .combine('mean', null, true)      .combine('variance', null, true),  geometry: Buffer,   scale: 10, bestEffort: true});print(Chart.image.histogram(sdwi_1.select('sdwi'), Buffer, 10));print(histogram); var threshold = otsu(histogram.get('sdwi_histogram'));print('threshold', threshold);var classA = sdwi_1.select('sdwi').gt(threshold);
Map.addLayer(classA.mask(classA), {palette: 'red'}, 'class A');var countDictionary = classA.mask(classA).reduceRegion({  reducer: ee.Reducer.count(),   geometry: Buffer,  scale: 10,   maxPixels: 1e13 });print(countDictionary);

经过实验发现,哨兵1号影像在平坦的地区适用性较好,但是在山地地区,常会出现阴影被误判成山体的情况。代码中参考前人研究成果,加入了地形校正去除阴影的处理,但是提升有限,部分阴影并不能完全去除。大家在用代码时,尽量结合自己的研究区进行修改参数,从而使得提取效果更好。

基于GEE与哨兵1号影像数据提取水体相关推荐

  1. 基于python实现高分二号遥感影像水体提取与水质反演(黑臭水体与水体富营养化)

    高分二号遥感影像水体提取与水质反演 水体提取函数--NDWI 基于几何约束提取河流 生成shp,方便后续裁剪水体 水质反演 最终结果 水体提取函数--NDWI 水体提取函数water.py impor ...

  2. GIS实战应用案例100篇(七)-基于GIS和ENVI的矢量化提取水体边界

    一.影像准备 本期以威宁草海为例,用到的影像为2020年11月13日覆盖草海地区的一景高分一号宽幅(WFV4)影像,景序列号为5191489. 二.影像预处理 因本期内容不涉及到定量遥感,所以只需对该 ...

  3. 基于GEE平台提取水体

    本文主要介绍如何利用GEE平台与哨兵2号影像提取水体.水体的提取主要是基于NDWI指数进行,当然,通过改变波段运算,也可以根据MNDWI进行提取.主要代码如下: 下面展示一些 内联代码片. //首先对 ...

  4. ENVI 5.3 + 哨兵2号(Sentinel-2)L2A提取健康水体和不健康水体

    大学是学GIS的,最近因为需要而搞起了遥感影像,不过GIS和RS不分家嘛!多了解学习没有坏处!针对学习过程中遇到的问题和获得的收获,特发文一篇以作记录,积累经验. [1.数据下载] 首先需要下载数据, ...

  5. GEE哨兵二号去云不成功的原因(代码修改)

    基于GEE的哨兵二号QA波段去云,但是去不成功 原因:因为筛选出来的影像云量几乎都超过50% 官方的官方的解答:文档里是提取云量20以下的进行去云的 源码: // 去云 function maskS2 ...

  6. GEE:基于GEE的单个湖泊的实时水体提取(以武汉东湖为例)

    前言 博主不主修遥感方向,不是专业人士,由于毕设需要使用GEE,故临时学习并做了记录,由于是博主自己钻研的,不知道有无其他更便捷的方式.若文中有错误欢迎指正. 在做毕设的时候是对武汉市所有湖泊进行分别 ...

  7. QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(4)-分类精度评价

    本文继续介绍使用QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布,本文为教程的第四部分:分类结果精度评价.所使用的示范数据下载地址为: 链接: https://pan.baidu.com/s/1 ...

  8. QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(3)-NDVI阈值

    本文继续介绍使用QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布,本文为教程的第三部分:NDVI阈值选择和冬小麦种植面积提取.所使用的示范数据下载地址为: 链接: https://pan.bai ...

  9. GEE|下载研究区哨兵二号影像

    任何一个遥感人不用GEE下载遥感影像我都会伤心的ok?!! 众所周知哨兵二号影像可以在usgs上或者欧空局网站下载,usgs感觉还相对更方便些.但是都还是避免不了下载影像后先用SNAP预处理大气校正重 ...

最新文章

  1. linux 生成密码本,Linux下CentOS7使用OTPW实现双因子密码本登录
  2. 为排序使用索引OrderBy优化
  3. Redis(二):Redis的安装及配置(2)---设置启动信息
  4. 关于 C 的 arithmetic conversion (进行 算术运算 时的 强制转换规则)
  5. mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息
  6. 关于jQuery的细节
  7. php表格批量修改数据,php批量修改数据库表名前缀
  8. 计算机财务管理复利现值的公式,财务管理公式
  9. atitit.故障排除------有时会错误com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: soc
  10. 计算机联锁静态数据表,计算机联锁功能.doc
  11. 高性能计算机重要的配件,电脑配件大盘点,为高性能保驾护航!
  12. 【6G】基于 Dyncast 的算力网络架构
  13. 加拿大鹅“跌倒”,波司登“吃饱”?
  14. 为什么宝宝做错事被骂哭后,还要求抱抱?家长早知道早受益
  15. html单元格分割,html – 拆分td在两个
  16. java实现端口映射_Java BIO实现TCP端口转发(端口映射)功能源码
  17. 真实生活的记录:我三年的外企生涯(4) 出处:天涯虚拟社区
  18. 关于蓝桥杯嵌入式CT117-M1(旧板)stm32f103芯片的coocox keil5 烧写办法
  19. 看过来!2021年最新PMP报名流程来了
  20. 开课吧:未来人工智能发展前景如何呢?

热门文章

  1. CNN卷积层神经元数量、连接数量、权重数量的计算
  2. 清华大学出版社计算机图书出版,请联系我
  3. 2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6(8/13)
  4. UNCTF2022-公开赛|MISC(下)
  5. linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...
  6. m35c android 4.4,索尼M35c拍照比之前有很大改善_索尼 Xperia SP_手机Android频道-中关村在线...
  7. 计算机系统要素--第六章,02-HACK汇编编译器实现
  8. python期末试题汇总
  9. 计算机端口怎么配置波特率,PLC波特率设置
  10. .net 1.1的东西没有学精 .net 2.0的东西浩如烟海 .net 3.0 3.5就要应用实践了。。。