0.背景

主成分分析作为数据降维的重要方法,目前中文网站上没有完整的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中,进行你所需要的分析。
这里稍微提一下,在深度学习中,也可以用主成分分析法处理多波段影像,获得三个波段,用于训练与预测。

4.测试链接

https://code.earthengine.google.com/8cdedf188b5e1660c65d84c38767b818

可以前往“地信遥感数据汇”(https://www.gisrsdata.com/)获取更多数据。

GEE主成分分析全解析相关推荐

  1. GEE绘制DEM全解析

    GEE绘制DEM全解析 关于 昨天阅读了一篇质量很高的python绘制地形图博客.有感而发,我便想到了GEE(Google earth engine)数据源众多.计算速度快.计算算子多的特点,使用GE ...

  2. Go modules基础精进,六大核心概念全解析(下)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  3. 第四章:Spring项目文件上传两种方式(全解析)

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  4. 阿里秋招面试全解析(含内推岗)

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  5. Apache Web服务器访问控制机制全解析

    Apache Web服务器访问控制机制全解析 原文请见: http://netsecurity.51cto.com/art/201102/245666.htm Linux下的Aapche服务器提供了强 ...

  6. 6.15 Unity引擎渲染效率全解析

    UWA新晋主播赵福恺从Unity渲染模块中的各种渲染效果性能.PBR渲染性能以及阴影的渲染性能三个角度分别进行了详细的分析总结.为响应各大听众的需求,小编奉上完整视频回顾,同时也向看完直播才下班的五好 ...

  7. python读取txt文件写入-Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python! hello world! ...

  8. jQuery Ajax 实例 全解析(转)

    jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...

  9. Fragment全解析系列

    文/YoKey(简书作者) 原文链接:http://www.jianshu.com/p/d9143a92ad94 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". F ...

  10. 万物之始正则表达式全解析三部曲(中篇)-正则表达式运算符优先级及匹配规则

    前言 各位小伙伴大家好,接下来几天时间,我会从多个角度对正则表达式进行系统阐述,让你了解正则表达式的前世今生. 该系列文章上篇 万物之始正则表达式全解析三部曲(上篇)-正则表达式基础知识及语法 以下是 ...

最新文章

  1. tftp怎么给服务器传文件,TFTP文件传输工具使用
  2. git 删除远程分支
  3. c++ ptree判断是否存在节点_新人报道献礼:关于boost property_tree的一些探讨
  4. fgets()与gets()的区别
  5. 从扁平到立体:Windows 10 图标的演化
  6. java web 树形管理_java web 后台树形菜单排序
  7. 洒脱书法!值得学习的帅气高级手写字体设计
  8. 如何在局域网中对网线全面测试
  9. 福大软工1816:Alpha(5/10)
  10. 联想第三季:PC+时代的航母启航?
  11. Devexpress 10.1.6 源代码重新编译成功(DXperience 10.1.6 重新编译)附所有需要用到的资源下载地址 (收藏)...
  12. 图论基础——启发式搜索
  13. 微信小程序优惠券制作方法
  14. pytorch BCEWithLogitsLoss pos_weight参数解疑
  15. Kali Linux入门
  16. WM_CONTEXTMENU percolate upward
  17. 无人驾驶13:PID控制器
  18. 轻微课靠谱吗?轻微课学员的真实评价!!!
  19. html可识别的字体,7款有用的工具来识别字体
  20. 《灵飞经》3·印神无双 第十一章 力挽狂澜

热门文章

  1. 计算机D盘无法读取,D盘目录或文件已损坏,无法读取解决方案
  2. 打开计算机桌面里面有其他图标,Win7电脑桌面上的快捷方式图标都变成相同且打不开...
  3. 打印机脱机了怎么恢复打印
  4. zooKeeper篇-zk的选举机制
  5. ubuntu设置桌面图标
  6. 主数据同步与分发实现
  7. 解决关闭xftp,总是跳出无法访问网络位置,请输入xftp 6.msi
  8. kali使用笔记本自带无线网卡_(小杨推荐)电脑无线上网+蓝牙解决方案
  9. 矩阵分析与应用-17-Moore-Penrose逆矩阵01
  10. 站内搜索引擎源代码 asp.net