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主成分分析(含代码)相关推荐

  1. GIS实战应用案例100篇(十五)-CASS插件应用:如何控制点属性与点名统一

    前言 图面上有100+控制点,图上点名注记和点的属性值不一致(下图所示),要怎么操作才能统一? 图上的点名注记是统一编号,手工修改的.也是最终确定的控制点点名.属性面板中看到"点名" ...

  2. GIS实战应用案例100篇(二十一)-全国分省、市、县净初级生产力NPP数据制作实战(附代码)

    前言 净初级生产力(Net primary productivity, NPP)是研究陆地生态系统中物质和能量转换的重要指标,NPP的空间分布与区域气候.植被生长以及人类活动等因素息息相关,其变化能反 ...

  3. GIS实战应用案例100篇(十六)-CASS道路横断面线,如何折线变直线?

    前言 CASS绘制的道路横断面线是一条垂直纵断面线的直线.而实地采集的断面点连线,是一条折线.应该采用折线还是直线?如何将折线变成直线? 怎么解决折线变曲线的操作步骤: 1.绘制纵断面线 在命令行输入 ...

  4. GIS实战应用案例100篇(八)-桩号相同,坐标不同,RTK怎么输入曲线要素?

    前言 平曲线表输入RTK手簿前,我们需要先分析平曲线表,判断数据,该工程平曲线表适合用元素法还是交点法? 分析:该工程平曲线表中,JD4和JD5桩号相同,坐标不同:JD8和JD9,桩号也相同,坐标不同 ...

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

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

  6. GIS实战应用案例100篇(三)-基于NDVI指数的绿地信息提取

    NDVI的计算 (1) 打开预处理后的影像 (2) band math工具 打开ENVI 5.3 band math工具,输入公式:float(b4-b3)/float(b4+b3) ,点击OK,定义 ...

  7. GIS实战应用案例100篇(二)-元胞自动机模拟城市扩张过程

    前言 CA模型:CA(Cellular Automat)即元胞自动机模型,元胞自动机是一种具有时空计算特征的模型框架,从局部到整体的建模思想被广泛的应用于空间上离散.时间上也离散的复杂性系统模拟.标准 ...

  8. 机器学习实战应用案例100篇(二)-蚁狮优化算法从原理到实战应用案例

    蚁狮优化算法(原理) 1 简介 蚁狮(Antlions,蚁蛉)属于蚁蛉科和神经翅目(网翅昆虫).蚁狮的生命周期包括两个主要阶段:幼虫和成虫. 自然的总寿命可达3年,主要发生在幼虫(成虫期只有3 - 5 ...

  9. 机器学习实战应用案例100篇(十四)-飞蛾扑火优化算法从原理到实战应用案例

    飞蛾扑火优化算法(原理) 1 算法简介 飞蛾是一种奇特的昆虫,与蝴蝶家族非常相似.基本上,自然界有超过16万种不同种类的这种昆虫.它们一生中有两个主要的里程碑:幼虫和成虫.幼虫在茧中变成蛾. 关于飞蛾 ...

最新文章

  1. tsne pca 自编码器 绘图(CC2)——一定记得做无量纲化处理使用standardscaler,数据聚类更明显...
  2. 对数据库进行黑盒测试操作?
  3. 提高IT运维综合管理能力,实现业务服务管理
  4. flac格式转换mp3格式_MP3,FLAC和其他音频格式之间有什么区别?
  5. 在HTML中怎么去掉超链接的下划线?
  6. World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)
  7. 垃圾分类:人机搭配,干活不累
  8. JNI读取assets资源文件
  9. asp.net 获取当月的第一天和最后一天示例
  10. (Word论文插入高清图片)软件设置教程
  11. NLP中文句子类型判别和分类实现
  12. ERA5 total precipitation的单位
  13. 河南省第二类医疗器械首次注册
  14. This probably means that Tcl wasn‘t installed properly报错
  15. React——UI框架 Antd 、Element
  16. ccf-csp 2015春季真题题解
  17. cj20n sap 报错未知列的名称_sap ps模块全称 SAP,PS模块配置和操作手册
  18. 千寻位置 开发demo_专攻高精定位解决方案,「千寻位置」要解决自动驾驶车辆“我在哪儿”的问题...
  19. oracle查询导致 gc等待,如何诊断Oracle RAC系统中的等待事件gc cr multi block request?...
  20. 2012年2月12日汇报Axure RP Pro 6.5 Beta简体中文加强测试版进展

热门文章

  1. kotlin-unresolved reference daclaredFunctions
  2. 私有环网协议MR-ring介绍
  3. [渝粤教育] 西安交通大学 医学伦理学(2021秋) 参考 资料
  4. 【渝粤教育】 国家开放大学2020年春季 1190当代中国政治制度 参考试题
  5. lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
  6. linux读取.data文件,[20121227]v$datafile访问是从数据文件获取信息吗.txt
  7. java web 伪静态_【Java Web】使用URLRewrite实现网站伪静态
  8. 三星ml1660拆机图解_炫龙DD2拆机,高性能的背后是怎样的面容?
  9. MFC多线程处理界面假死之红外图像数据获取和excel写入
  10. 计算机怎么录制视频教程,怎么录制视频教程?查看电脑具体录屏方法