GIS实战应用案例100篇(一)-GEE主成分分析(含代码)
1.介绍
主成分分析是将众多具有相关性的数据指标,重新组合成一组新的指标,新形成的指标互不相关,并且前几个主成分能代表原始数据的大部分信息。
在GEE中,可能会遇到波段数非常多的情况,这时就可以考虑使用主成分分析法只生成两、三个主成分,减少后续工作量。
2.代码思路
3.实操
3.1 数据筛选与预处理
这一步主要是选择研究区(四川省_资阳市_乐至县)的哨兵影像,并对筛选的数据按照行政边界进行镶嵌与裁剪
//筛选数据
var sentImages = ee.ImageCollection(Sentinel)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
.filterDate("2021-08-01", "2021-08-08")
.filterBounds(LeZhiXian);//镶嵌与裁剪数据
var sentmosaic = sentImages.mosaic();
var sentImage = sentmosaic.clip(LeZhiXian);//加载研究区影像图层
Map.addLayer(sentImage, trueColor, "乐至县真彩色");
3.2 数据筛选与预处理
选择需要进行主成分分析的原始影像波段,并且设置主成分分析影像的分辨率等。在进行主成分分析之前,进行预处理(协方差缩减等)。
//需要进行主成分分析的波段选择
var bands=["B1","B2","B3","B4","B5","B6","B7","B8","B9","B11","B12"]
sentImage =sentImage.select(bands)// 输入到主成分函数的参数设置
var region = LeZhiXian;
var image = sentImage.select(bands);
var scale = 10;
var bandNames = image.bandNames();//数据平均
var meanDict = image.reduceRegion({reducer: ee.Reducer.mean(),geometry: region,scale: scale,maxPixels: 1e9
});
var means = ee.Image.constant(meanDict.values(bandNames));
var centered = image.subtract(means);
3.3 主成分分析
这部分的代码是从Google earth engine官方文档中copy过来的,针对输入影像,进行转为数组、计算正交矩阵、计算主成分载荷等操作。
//主成分分析函数
var getPrincipalComponents = function(centered, scale, region) {// 图像转为一维数组var arrays = centered.toArray();// 计算相关系数矩阵var covar = arrays.reduceRegion({reducer: ee.Reducer.centeredCovariance(),geometry: region,scale: scale,maxPixels: 1e9});// 获取“数组”协方差结果并转换为数组。// 波段与波段之间的协方差var covarArray = ee.Array(covar.get('array'));// 执行特征分析,并分割值和向量。var eigens = covarArray.eigen();// 特征值的P向量长度var eigenValues = eigens.slice(1, 0, 1);//计算主成分载荷var eigenValuesList = eigenValues.toList().flatten()var total = eigenValuesList.reduce(ee.Reducer.sum())var percentageVariance = eigenValuesList.map(function(item) {return (ee.Number(item).divide(total)).multiply(100).format('%.2f')})print("各个主成分载荷比", percentageVariance) // PxP矩阵,其特征向量为行。var eigenVectors = eigens.slice(1, 1);// 将图像转换为二维阵列var arrayImage = arrays.toArray(1);//使用特征向量矩阵左乘图像阵列var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage);// 将特征值的平方根转换为P波段图像。var sdImage = ee.Image(eigenValues.sqrt()).arrayProject([0]).arrayFlatten([getNewBandNames('sd')]);//将PC转换为P波段图像,通过SD标准化。principalComponents=principalComponents// 抛出一个不需要的维度,[[]]->[]。.arrayProject([0])// 使单波段阵列映像成为多波段映像,[]->image。.arrayFlatten([getNewBandNames('pc')])// 通过SDs使PC正常化。.divide(sdImage);return principalComponents};
//进行主成分分析,获得分析结果
var pcImage = getPrincipalComponents(centered, scale, region);
// 主要成分可视化
Map.addLayer(pcImage, {bands: ['pc3', 'pc2', 'pc1'], min: -2, max: 2}, 'Sentinel 2 - PCA');
3.4 数据导出
选择需要导出的主成分波段,这里导出的是前三个波段,因为前三个波段累计贡献率超过95%,完全够用了。
//选择导出的波段
var pcImage_output =pcImage.select(['pc1', 'pc2', 'pc3'])
//导出函数
Export.image.toDrive({image: pcImage_output,description: 'LeZhiXian_Sentinel_PAC',folder:'LeZhiXian',scale: 10,region:LeZhiXian,maxPixels: 1e10
});
点击Run进行数据下载,一个县的研究区大概10分钟就能得到预期影像。
将下载的影像,导入到arcgis或envi中,进行你所需要的分析。这里稍微提一下,在深度学习中,也可以用主成分分析法处理多波段影像,获得三个波段,用于训练与预测。
GIS实战应用案例100篇(一)-GEE主成分分析(含代码)相关推荐
- GIS实战应用案例100篇(十五)-CASS插件应用:如何控制点属性与点名统一
前言 图面上有100+控制点,图上点名注记和点的属性值不一致(下图所示),要怎么操作才能统一? 图上的点名注记是统一编号,手工修改的.也是最终确定的控制点点名.属性面板中看到"点名" ...
- GIS实战应用案例100篇(二十一)-全国分省、市、县净初级生产力NPP数据制作实战(附代码)
前言 净初级生产力(Net primary productivity, NPP)是研究陆地生态系统中物质和能量转换的重要指标,NPP的空间分布与区域气候.植被生长以及人类活动等因素息息相关,其变化能反 ...
- GIS实战应用案例100篇(十六)-CASS道路横断面线,如何折线变直线?
前言 CASS绘制的道路横断面线是一条垂直纵断面线的直线.而实地采集的断面点连线,是一条折线.应该采用折线还是直线?如何将折线变成直线? 怎么解决折线变曲线的操作步骤: 1.绘制纵断面线 在命令行输入 ...
- GIS实战应用案例100篇(八)-桩号相同,坐标不同,RTK怎么输入曲线要素?
前言 平曲线表输入RTK手簿前,我们需要先分析平曲线表,判断数据,该工程平曲线表适合用元素法还是交点法? 分析:该工程平曲线表中,JD4和JD5桩号相同,坐标不同:JD8和JD9,桩号也相同,坐标不同 ...
- GIS实战应用案例100篇(七)-基于GIS和ENVI的矢量化提取水体边界
一.影像准备 本期以威宁草海为例,用到的影像为2020年11月13日覆盖草海地区的一景高分一号宽幅(WFV4)影像,景序列号为5191489. 二.影像预处理 因本期内容不涉及到定量遥感,所以只需对该 ...
- GIS实战应用案例100篇(三)-基于NDVI指数的绿地信息提取
NDVI的计算 (1) 打开预处理后的影像 (2) band math工具 打开ENVI 5.3 band math工具,输入公式:float(b4-b3)/float(b4+b3) ,点击OK,定义 ...
- GIS实战应用案例100篇(二)-元胞自动机模拟城市扩张过程
前言 CA模型:CA(Cellular Automat)即元胞自动机模型,元胞自动机是一种具有时空计算特征的模型框架,从局部到整体的建模思想被广泛的应用于空间上离散.时间上也离散的复杂性系统模拟.标准 ...
- 机器学习实战应用案例100篇(二)-蚁狮优化算法从原理到实战应用案例
蚁狮优化算法(原理) 1 简介 蚁狮(Antlions,蚁蛉)属于蚁蛉科和神经翅目(网翅昆虫).蚁狮的生命周期包括两个主要阶段:幼虫和成虫. 自然的总寿命可达3年,主要发生在幼虫(成虫期只有3 - 5 ...
- 机器学习实战应用案例100篇(十四)-飞蛾扑火优化算法从原理到实战应用案例
飞蛾扑火优化算法(原理) 1 算法简介 飞蛾是一种奇特的昆虫,与蝴蝶家族非常相似.基本上,自然界有超过16万种不同种类的这种昆虫.它们一生中有两个主要的里程碑:幼虫和成虫.幼虫在茧中变成蛾. 关于飞蛾 ...
最新文章
- tsne pca 自编码器 绘图(CC2)——一定记得做无量纲化处理使用standardscaler,数据聚类更明显...
- 对数据库进行黑盒测试操作?
- 提高IT运维综合管理能力,实现业务服务管理
- flac格式转换mp3格式_MP3,FLAC和其他音频格式之间有什么区别?
- 在HTML中怎么去掉超链接的下划线?
- World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)
- 垃圾分类:人机搭配,干活不累
- JNI读取assets资源文件
- asp.net 获取当月的第一天和最后一天示例
- (Word论文插入高清图片)软件设置教程
- NLP中文句子类型判别和分类实现
- ERA5 total precipitation的单位
- 河南省第二类医疗器械首次注册
- This probably means that Tcl wasn‘t installed properly报错
- React——UI框架 Antd 、Element
- ccf-csp 2015春季真题题解
- cj20n sap 报错未知列的名称_sap ps模块全称 SAP,PS模块配置和操作手册
- 千寻位置 开发demo_专攻高精定位解决方案,「千寻位置」要解决自动驾驶车辆“我在哪儿”的问题...
- oracle查询导致 gc等待,如何诊断Oracle RAC系统中的等待事件gc cr multi block request?...
- 2012年2月12日汇报Axure RP Pro 6.5 Beta简体中文加强测试版进展
热门文章
- kotlin-unresolved reference daclaredFunctions
- 私有环网协议MR-ring介绍
- [渝粤教育] 西安交通大学 医学伦理学(2021秋) 参考 资料
- 【渝粤教育】 国家开放大学2020年春季 1190当代中国政治制度 参考试题
- lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
- linux读取.data文件,[20121227]v$datafile访问是从数据文件获取信息吗.txt
- java web 伪静态_【Java Web】使用URLRewrite实现网站伪静态
- 三星ml1660拆机图解_炫龙DD2拆机,高性能的背后是怎样的面容?
- MFC多线程处理界面假死之红外图像数据获取和excel写入
- 计算机怎么录制视频教程,怎么录制视频教程?查看电脑具体录屏方法