GEE有内存限制,我这面向对象提取不太好用,如有大神有更好的方法,请多指导。


//-------------------------------去云  ----------------------------------------------//
function sentinel2toa(img) {var toa = img.select(['B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B10', 'B11','B12'],  ['aerosol', 'blue', 'green', 'red', 're1','re2','re3', 'nir','nir2', 'h2o', 'cirrus','swir1', 'swir2']).divide(10000).addBands(img.select(['QA60'])).set('solar_azimuth',img.get('MEAN_SOLAR_AZIMUTH_ANGLE')).set('solar_zenith',img.get('MEAN_SOLAR_ZENITH_ANGLE'))return toa;
}
function ESAcloud(toa) {var qa = toa.select('QA60');var cloudBitMask = Math.pow(2, 10);var cirrusBitMask = Math.pow(2, 11);var clear = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));var cloud = clear.eq(0);return cloud;
}
function shadowMask(toa,cloud){var azimuth =ee.Number(toa.get('solar_azimuth')).multiply(Math.PI).divide(180.0).add(ee.Number(0.5).multiply(Math.PI));var zenith  =ee.Number(0.5).multiply(Math.PI ).subtract(ee.Number(toa.get('solar_zenith')).multiply(Math.PI).divide(180.0));var nominalScale = cloud.projection().nominalScale();var cloudHeights = ee.List.sequence(200,10000,500);var shadows = cloudHeights.map(function(cloudHeight){cloudHeight = ee.Number(cloudHeight);var shadowVector = zenith.tan().multiply(cloudHeight);var x = azimuth.cos().multiply(shadowVector).divide(nominalScale).round();var y = azimuth.sin().multiply(shadowVector).divide(nominalScale).round();return cloud.changeProj(cloud.projection(), cloud.projection().translate(x, y));});var potentialShadow = ee.ImageCollection.fromImages(shadows).max();potentialShadow = potentialShadow.and(cloud.not());var darkPixels = toa.normalizedDifference(['green', 'swir2']).gt(0.25).rename(['dark_pixels']);var shadow = potentialShadow.and(darkPixels).rename('shadows');return shadow;
}function cloud_and_shadow_mask(img) {var toa = sentinel2toa(img);var cloud = ESAcloud(toa);var shadow = shadowMask(toa,cloud);var mask = cloud.or(shadow).eq(0);return toa.updateMask(mask);
}
//-------------------------------Main----------------------------------------------------------------------------------------//
var table = ee.FeatureCollection("users/xzhangsx/sample200");
var bands =['B1','B2', 'B3', 'B4', 'B5', 'B6','B7','B8','B8A','B9'];
var composite = ee.ImageCollection('COPERNICUS/S2').filterDate('2020-06-01', '2020-06-15').filterBounds(table).mean();
var image = ee.Image(composite).divide(255).select(bands);
print(image);
//设置种子
var seeds = ee.Algorithms.Image.Segmentation.seedGrid(36);
//利用 SNIC 进行分割,得到对象。参数的设置根据自己的需求来
var snic = ee.Algorithms.Image.Segmentation.SNIC({image: image, size: 100,compactness: 5,connectivity: 8,neighborhoodSize:256,seeds: seeds
}).select(['B1_mean','B2_mean','B3_mean','B4_mean','B5_mean','B6_mean','B7_mean','B8_mean','B8A_mean','B9_mean', 'clusters'], ['B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9', 'clusters']);
var clusters = snic.select('clusters');//
print("snic",snic);
//计算每个对象的特征
var stdDev = image.addBands(clusters).reduceConnectedComponents(ee.Reducer.stdDev(), 'clusters', 256);//为啥和上面的均值不一样?
var area = ee.Image.pixelArea().addBands(clusters).reduceConnectedComponents(ee.Reducer.sum(), 'clusters', 256);
var minMax = clusters.reduceNeighborhood(ee.Reducer.minMax(), ee.Kernel.square(1));
var perimeterPixels = minMax.select(0).neq(minMax.select(1)).rename('perimeter');
var perimeter = perimeterPixels.addBands(clusters).reduceConnectedComponents(ee.Reducer.sum(), 'clusters', 256);
var sizes = ee.Image.pixelLonLat().addBands(clusters).reduceConnectedComponents(ee.Reducer.minMax(), 'clusters', 256);
var width = sizes.select('longitude_max').subtract(sizes.select('longitude_min')).rename('width');
var height = sizes.select('latitude_max').subtract(sizes.select('latitude_min')).rename('height');
//分类器参数设置,选择分类依据:包括了area,width等
var objectPropertiesImage = ee.Image.cat([snic.select(bands),//stdDev,// area,//perimeter,//width,//height
]).float();
print(objectPropertiesImage);
//var img2 = ee.Image(objectPropertiesImage).divide(255);
//选择训练样本
var training = objectPropertiesImage.sampleRegions({collection: table,properties: ['value'],scale: 30,tileScale:8
});
print("training",training);/*var training = objectPropertiesImage.addBands(table.select('value')).updateMask(seeds).sample(table, 5);
print("training2",training2);*/
//分类
var classifier = ee.Classifier.smileCart().train(training, 'value');
print(classifier);
var result=objectPropertiesImage.classify(classifier,'Classified objects');
//Export.image.toCloudStorage(result,"202012172236");
//var resultshp = result.updateMask(seeds).sample(table, 5);
//Export.table.toCloudStorage(resultshp,"202012172120");
print(result);
Map.centerObject(table);
Map.addLayer(result.randomVisualizer(), {}, 'Classified objects2');
// 计算混淆矩阵
var test=training.classify(classifier,'classification');
var confusionMatrix = test.errorMatrix('value', 'classification');
print('Confusion Matrix', confusionMatrix);

GEE面向对象分类(先分割影像 、再计算特征、最后分类)相关推荐

  1. 几何光学学习笔记(32)- 7.1 颜色概述 7.2颜色的特征和分类

    几何光学学习笔记(32)- 7.1 颜色概述 & 7.2颜色的特征和分类 7.1 颜色概述 1. 电磁辐射是颜色现象的物理基础 2.人的颜色视觉是颜色现象的生理基础 3.颜色的分类 7.2 颜 ...

  2. 面向对象的高分辨率遥感影像分类实例

    一.为什么要使用面向对象 传统的基于像素的遥感影像处理方法都是基于遥感影像光谱信息极其丰富,地物间光谱差异较为明显的基础上进行的.对于只含有较少波段的高分辨率遥感影像,传统的分类方法,就会造成分类精度 ...

  3. GEE系列:​第3单元 栅格遥感影像波段特征及渲染可视化

    GEE从入门到实战的10个系列单元: GEE系列:第1单元 Google地球引擎简介 GEE系列:第2单元 探索数据集 GEE系列:​第3单元 栅格遥感影像波段特征及渲染可视化 GEE系列:第4单元 ...

  4. TM 影像特征与分类技巧

    TM影像特征 根据经验,在4,3,2(RGB)的波段组合下,各种地表覆盖物类型的特点如下: a.森林--森林显示出棕色.红色.褐色等一系列多变的色调.在高海拔地区,成熟针叶林为很浓的棕色或暗红色:在中 ...

  5. 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...

    以下总结的是本周新出的作者声称"将开源"的论文,包含显著目标检测.遥感影像分类.人脸识别.基于视频的人员重识别.跨分辨率人员重识别.医学图像分割.transformer 在视频目标 ...

  6. 清华大学提出点云Transformer!在3D点云分类、分割上表现优秀,核心代码已开源!...

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 转载自:量子位 当Transformer遇上3D点云,效果会怎么样? 一个是当下最热门的模型(N ...

  7. pytorch 三维点分类_三维点云分类与分割-PointNet

    PointNet是对点云数据直接进行学习的开山之作, 这里结合PointNet-Pytorch代码,对PointNet网络结构与其思想进行阐述和分析. 点云数据的特性: 点云数据不同于图像数据,他有三 ...

  8. 机器学习中的特征工程——分类变量的处理

    出品 | CDA数据分析研究院,转载需授权 文章目录 分类变量 概念 判断 类型 少类别分类变量处理方法 独热编码(One-hot encoding) 虚拟编码(Dummy coding) 效应编码( ...

  9. 【CVPR2022】【小样本分类和分割】Integrative Few-Shot Learning for Classification and Segmentation

    用于分类和分割的综合小样本学习 文章目录 Abstract 一.Problem formulation 二.Integrative Few-Shot Learning (iFSL) 三.5. Mode ...

  10. 目标检测经典论文——R-CNN论文翻译(纯中文版):用于精确物体定位和语义分割的丰富特征层次结构(技术报告(第5版))

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[R-CNN中英文对照版] 用于精确物体定位和语义分割的丰富特征层次结构 技术报告(第5版 ...

最新文章

  1. 走向.NET架构设计—第四章—业务层分层架构(后篇)
  2. C# WinfForm 控件之dev报表 XtraReport (六) 图表Charts 无内容
  3. JAVA程序设计----多线程(上)
  4. SAP Spartacus翻译 i18n - internationalization 的工作原理
  5. 6.MongoDB备份与恢复
  6. cname 别名记录 解析过程_西部数码操作解析:如何为服务器创建别名地址
  7. linux之ssh-keygen命令
  8. MySQL的SQL优化常用30种方法
  9. php转换ofd文件格式,一种OFD格式文档支持脚本的方法与流程
  10. 开源容灾备份工具介绍
  11. 利用imageio将多张.jpg转.gif图片(Python3)
  12. c语言一个笼子里关了鸡和兔子,成年后的你是否还质疑 古人为什么把鸡和兔子关在一个笼子里...
  13. 联想产品标准保修承诺
  14. 【Java网络编程】:JDK API实现OIO和NIO
  15. 自己的网页嵌入外部邮箱登陆
  16. H5 -- 自定义微信分享第三方页面链接的标题和小缩略图
  17. 输入等值线参数绘制等值线图python_ArcGIS绘图—空气质量站点数据插值绘制等值线图...
  18. 计算机正确的坐姿教案,幼儿园中班教案《正确坐姿真精神》(通用).doc
  19. 如何用mac自带软件录屏且录制屏内屏外声音
  20. 马云、马化腾、张一鸣……互联网大佬学历大比拼

热门文章

  1. HCL_H3CNE综合实验
  2. STM32F103+RTT从零开始(三)—— S50门禁卡复制
  3. 神仙道战斗游戏逻辑设计
  4. 清理好桌道壁纸右键菜单
  5. 关于麻球网关闭的感想
  6. SpringBoot上传文件并储存到本地(记录)
  7. 使用 content-visibility 优化渲染性能
  8. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程
  9. 迟来的加勒比海盗3 观后
  10. 2015最新iherb海淘攻略-图文新手教程-6月免邮