GEE22:基于目视解译的土地利用分类(随机森林监督分类)

采样点信息:
在这里插入图片描述

设置一下采样点参数:
在这里插入图片描述

代码:

//设置研究区位置
var table = ee.FeatureCollection("users/cduthes1991/boundry/China_province_2019");
var roi = table.filter(ee.Filter.eq('provinces','beijing'));
Map.centerObject(roi, 8)
Map.addLayer(roi.style({color:'black',fillColor:'00000000'}),{},'roi');//设置时间窗口
var startDate = '2023-03-01';
var endDate = '2023-10-01';
var L9 = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2');// 进行比例换算
function applyScaleFactors(image) {var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);return image.addBands(opticalBands, null, true).addBands(thermalBands, null, true);
} 
//去云处理
function rmL89Cloud(image) { var Cirrus = (1 << 2);var cloud = (1 << 3); var cloudsShadow = (1 << 4); var qa = image.select('QA_PIXEL'); var mask = qa.bitwiseAnd(Cirrus).eq(0) .and(qa.bitwiseAnd(cloud).eq(0)).and(qa.bitwiseAnd(cloudsShadow).eq(0)); return image.updateMask(mask); 
}
//指数计算
function addIndexs (image){var ndvi = image.normalizedDifference(['SR_B5','SR_B4']).rename('ndvi');var bsi = image.expression("((SR_B7+SR_B3)-(SR_B4-SR_B1))/(SR_B7+SR_B3)+(SR_B4-SR_B1)",{"SR_B7": image.select('SR_B7'),"SR_B4": image.select('SR_B4'),"SR_B3": image.select('SR_B3'),"SR_B1": image.select('SR_B1')}).rename('bsi');var lswi = image.normalizedDifference(["SR_B4", "SR_B7"]).rename('lswi');var mndwi = image.addBands(image.normalizedDifference(["SR_B1", "SR_B7"]).rename('mndwi'));return image.addBands(ndvi).addBands(bsi).addBands(lswi).addBands(mndwi);
}
//获取研究区时间窗口内数据
var img = L9.filterDate(startDate,endDate).filterBounds(roi).map(applyScaleFactors).map(addIndexs).map(rmL89Cloud).median().clip(roi).select(['SR_B2','SR_B3','SR_B4','SR_B5','SR_B6','SR_B7','ndvi','bsi','lswi','mndwi'])
var visualization = {bands: ['SR_B4', 'SR_B3', 'SR_B2'],min: 0.0,max: 0.3,
};
Map.addLayer(img,visualization,'img');
print(img)//合并样本
var samples = water.merge(building).merge(forest);
print('Sample Collection', samples)//利用样本点对遥感数据进行采样
var samples_img = img.sampleRegions({collection:samples,properties:['landcover'],scale:30,tileScale:8,geometries:true,
})
print("sample information: ", samples_img)//给样本添加随机数,用于训练和验证
var samples_img = samples_img.randomColumn();
print('samples_img',samples_img)
// 将样本随机分为7:3,70%用于训练,30%用于验证
var training_samples = samples_img.filter(ee.Filter.lte('random',0.7));
var validation_samples = samples_img.filter(ee.Filter.gte('random',0.7));
//设置分类器
var classifer = ee.Classifier.smileRandomForest(300).train({features:training_samples,classProperty:'landcover',inputProperties:img.bandNames(),
})
//利用分类器对影像进行分类
var Classified_RF = img.classify(classifer)
var visParam = ['blue', // 水体water'red', // 建筑用地urban'green', // 林地forest
];//显示分类结果(色彩设置依据IGBG)
Map.addLayer(Classified_RF,{'palette':visParam, min:1,max:3},'Classified_RF');
//精度验证
var test = validation_samples.classify(classifer);
var confussionMatrix = test.errorMatrix('landcover','classification');
var accuracy = confussionMatrix.accuracy();
var kappa = confussionMatrix.kappa();
var userAccuracy = confussionMatrix.consumersAccuracy();
var productAccuracy = confussionMatrix.producersAccuracy();
print('accuracy',accuracy);
print('kappa',kappa);
print('userAccuracy',userAccuracy);
print('productAccuracy',productAccuracy);// 图像导出
Export.image.toDrive({image: Classified_RF,description: 'Classified_RF',region: roi,scale: 250,maxPixels: 1e13,folder: 'LUCC'
})

结果展示:
在这里插入图片描述
以上结果只是一个简单示例,需要设置更多的采样点才能更精确分类。

  • GEE代码链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang基础-4

Go语言基础 介绍 基础 数组(array) 数组声明 元素访问与修改 数组遍历 关系运算 切片创建 多维数组 介绍 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。 基础 数组 数组是具有相同数据类型的…

函数重载和引用

目录 一&#xff1a;函数重载 1.1函数重载的概念 1.2为什么C支持函数重载&#xff0c;而C语言不支持呢&#xff1f; 1.2.1结论 1.2.2分析 二&#xff1a;引用 2.1引用概念 2.2引用特性 ​编辑 2.3常引用 2.4使用场景 一&#xff1a;函数重载 在自然语言中&#x…

浏览器工作原理与实践--块级作用域:var缺陷以及为什么要引入let和const

在前面《07 | 变量提升&#xff1a;JavaScript代码是按顺序执行的吗&#xff1f;》这篇文章中&#xff0c;我们已经讲解了JavaScript中变量提升的相关内容&#xff0c;正是由于JavaScript存在变量提升这种特性&#xff0c;从而导致了很多与直觉不符的代码&#xff0c;这也是Jav…

数字化坚鹏:小熊电器面向数字化转型的大数据顶层设计实践培训

小熊电器面向数字化转型的大数据顶层设计实践培训圆满结束 ——努力打造“数据技术营销”三轮驱动的数字化领先企业 小熊电器股份有限公司由李一峰创立于2006年&#xff0c;是一家专业从事创意小家电研发、设计、生产和销售的实业型企业。2019年8月23日正式在深交所挂牌上市。…

搜索模糊匹配% _ 等特殊字符转义工具

mysql 和达梦数据库不同的解决方式&#xff1a; mysql 数据库 解决搜索框传入%等特殊字符查询全部数据的问题&#xff1a; /***author liuxingying*description 搜索转义工具类*since 2023/11/30*/ public class EscapeUtil {/*** sql的模糊查询时特殊字符转义(条件查询%或者_…

Intel Arc显卡安装Stable Diffusion

StableDiffusion是一种基于深度学习的文本到图像生成模型&#xff0c;于2022年发布。它主要用于根据文本描述生成详细图像&#xff0c;也可应用于其他任务&#xff0c;如内补绘制、外补绘制和在提示词指导下生成图像翻译。通过给定文本提示词&#xff0c;该模型会输出一张匹配提…

gitee多用户配置

一、引言 在工作的时候我们有时候会自己创建项目Demo来实现一些功能&#xff0c;但是又不想把自己的Demo代码放到公司的仓库代码平台&#xff08;gitee&#xff09;中管理&#xff0c;于是就是想自己放到自己的Gitee中管理&#xff0c;于是就需要配置Git多用户。 本文将配置分别…

javascript解决接口请求过慢新的接口返回数据被旧的接口覆盖问题

今天请求接口的时候发现最新一次接口数据被上一次接口请求数据覆盖&#xff0c;原因是上一次接口用了2~3s,本次接口请求用了10ms, 导致新的数据被旧数据覆盖, 为了避免上一次请求的代码执行在本次请求之后才响应结束&#xff0c;使用Promise来管理异步操作。在每次请求开始时创…

串行流(Sequential Stream)和并行流(Parallel Stream)区别

在 Java 中&#xff0c;串行流和并行流是针对流操作的两种不同处理方式&#xff1a; 串行流&#xff08;Sequential Stream&#xff09;&#xff1a; 串行流是流元素按顺序依次处理的流。在串行流中&#xff0c;操作是单线程执行的&#xff0c;每个元素依次经过流水线上的各个…

力扣46---全排列(递归)

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a;nums …

vue2之各种插槽

插槽也是用于vue间创建的数据的一种方式&#xff0c;一般都是传递html元素。比如可以用于定义一个带样式的title等 默认插槽&#xff1a;没有name的插槽 ----父组件------ <template><div><TypeCom><!-- 如果这里的注释放开&#xff0c;那么子组件中默认…

【Go】五、流程控制

文章目录 1、if2、switch3、for4、for range5、break6、continue7、goto8、return 1、if 条件表达式左右的()是建议省略的if后面一定要有空格&#xff0c;和条件表达式分隔开来{ }一定不能省略if后面可以并列的加入变量的定义 if count : 20;count < 30 {fmt.Println(&quo…

基于springboot实现课程作业管理系统项目【项目源码+论文说明】

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

Transformers —— 以通俗易懂的方式解释-Part 1

公众号:Halo咯咯,欢迎关注~ 本系列主要介绍了为ChatGPT以及许多其他大型语言模型(LLM)提供支持的Transformer神经网络。我们将从基础的Transformer概念开始介绍,尽量避免使用数学和技术细节,使得更多人能够理解这一强大的技术。 Transformers —— 以通俗易懂的方式解释…

数据结构——lesson11排序之快速排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

缓存雪崩问题及解决思路

实战篇Redis 2.7 缓存雪崩问题及解决思路 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 解决方案&#xff1a; 给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降…

如何制作透明文件夹?

哇&#xff01;是不是很羡慕&#xff1f; 保姆级教程来啦&#xff01; 我们先新建一个文件夹 这么辛苦写文章&#xff0c;可以给我点个关注么~

好用的AI智能便签是哪款?桌面便签哪款比较智能

随着科技的日新月异&#xff0c;我们的生活与工作中涌现出众多便捷的软件工具&#xff0c;它们不仅提升了我们的生活质量&#xff0c;更在工作效率上给予了极大的助力。其中&#xff0c;便签软件以其简单实用的特性&#xff0c;成为了许多人日常不可或缺的好帮手。而在众多便签…

vue 计算属性

基础示例​ 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。比如说&#xff0c;我们有这样一个包含嵌套数组的对象&#xff1a; const author reactive({name: John Doe,books: [V…

量化交易入门(二十八)什么是布林带,量化中怎么使用

什么叫布林带 布林带&#xff08;Bollinger Bands&#xff09;是一种常用的技术分析指标&#xff0c;由约翰布林&#xff08;John Bollinger&#xff09;于20世纪80年代开发。它由三条线组成&#xff1a;中轨&#xff08;通常为20日移动平均线&#xff09;、上轨&#xff08;中…