GEE| 对Landsat 8 影像进行主成分分析

对 Landsat 8 影像进行主成分分析并实现可视化

// 定义感兴趣区域 
var roi = ee.FeatureCollection('users/yongweicao11/Dongguan2022');

// 加载 Landsat 8 图像集合,并根据 ROI 和日期范围进行过滤
var imageL8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA")
    .filterBounds(roi) // 过滤出与 ROI 相交的图像
    .filterDate('2023-01-01', '2023-09-01') // 选择指定日期范围内的图像
    .filter(ee.Filter.lt('CLOUD_COVER', 10)); // 过滤掉云量大于 10% 的图像

// 计算图像集合的平均值,并根据 ROI 裁剪
imageL8 = imageL8.mean().clip(roi); 
// 打印图像中的波段名称
print('Band Names:', imageL8.bandNames());

// 定义真彩色图像的可视化参数
var trueColorL8 = { 
    bands: ['B4', 'B3', 'B2'], // 使用红色、绿色和蓝色波段
    min: 0, 
    max: 0.3 // 设置颜色的范围
}; 

// 将计算的 Landsat 8 图像添加到地图中
Map.addLayer(imageL8, trueColorL8, 'L8 true color'); 

// 定义用于 PCA 的波段
var PCAbands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11']; 

// 将选择的波段转换为数组形式,以便进行 PCA
var arrayImage = imageL8.select(PCAbands).toArray();
// 打印数组图像信息
print('Array Image:', arrayImage);

// 使用区域作为几何限制,计算波段的协方差矩阵
var covar = arrayImage.reduceRegion({ 
    reducer: ee.Reducer.covariance(), // 使用协方差减速器
    geometry: roi.geometry(), // 提供 ROI 的几何形状
    scale: 30, // 根据需要指定合适的比例尺(30 米为 Landsat 的空间分辨率)
    maxPixels: 1e9 // 允许的最大像素数量
}); 
// 打印协方差结果
print('Covariance:', covar);

// 从协方差字典中提取数组
var covarArray = ee.Array(covar.get('array')); 
// 打印协方差数组
print(covarArray);

// 计算特征值和特征向量
var eigens = covarArray.eigen(); 

// 提取特征向量(注意:特征向量通常在第二个索引)
var eigenVectors = eigens.slice(1, 1); 

// 使用特征向量对原始图像数组进行矩阵乘法,计算主成分
var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage.toArray(1));

// 将结果转换为图像,并重命名波段
var pcImage = principalComponents.arrayProject([0]).arrayFlatten([['pc1', 'pc2', 'pc3', 'pc4', 'pc5', 'pc6', 'pc7', 'pc8']]); 

var burnPalette = ['red', 'white', 'green']; 
// 将第一个主成分(pc1)添加到地图中进行可视化
Map.addLayer(pcImage.select('pc1'), {min: -422, max: -400, palette: burnPalette}, 'pc1'); 

第一主成分结果
在这里插入图片描述
原始真彩色影像
在这里插入图片描述

### 使用Google Earth Engine (GEE)对NDVI、NDBSI和EVI执行主成分分析 在Google Earth Engine (GEE)中,可以通过JavaScript API实现对多个遥感指数(如NDVI、NDBSI和EVI)的主成分分析(PCA)[^1]。以下是具体的方法: #### 数据准备 首先需要加载所需的卫星影像集合并计算NDVI、NDBSI和EVI三个指数。这些指数通常基于Landsat或Sentinel-2等传感器的波段数据。 ```javascript // 加载 Landsat 8 影像集 var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2020-01-01', '2020-12-31') // 时间范围过滤 .filterBounds(geometry); // 地理区域过滤 // 计算 NDVI, NDBSI 和 EVI function addIndices(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); var ndbsi = image.expression( '(SWIR - NIR) / (SWIR + NIR)', {SWIR: image.select('B6'), NIR: image.select('B5')} ).rename('NDBSI'); var evi = image.expression( '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {'NIR': image.select('B5'), 'RED': image.select('B4'), 'BLUE': image.select('B2')} ).rename('EVI'); return image.addBands(ndvi).addBands(ndbsi).addBands(evi); } var withIndices = dataset.map(addIndices); // 取平均值作为单张影像 var composite = withIndices.mean(); ``` #### 执行主成分分析 利用`ee.Reducer.pca()`函数来完成主成分分析操作。此过程涉及以下几个步骤:标准化输入数据、应用PCA转换器以及提取主要分量。 ```javascript // 提取感兴趣的波段 var bandsOfInterest = ['NDVI', 'NDBSI', 'EVI']; var trainingData = composite.select(bandsOfInterest).sample({ region: geometry, scale: 30, numPixels: 5000 }); // PCA 分析 var pcaReducer = ee.Reducer.pca().setOutputs(['pc1', 'pc2', 'pc3']); var result = trainingData.reduce(pcaReducer); // 获取主成分矩阵 var principalComponents = result.get('principalComponents'); print('Principal Components:', principalComponents); ``` 以上代码片段展示了如何定义一个样本点集合来进行训练,并调用PCA减少维度的功能[^2]。最终获得的结果将是各个主成分及其对应的贡献率。 #### 后续处理与可视化 为了更好地理解所得结果,还可以进一步绘制图表或者生成地图层以便直观展示每种因子的影响程度。 --- ### 注意事项 - **数据质量控制**:确保所使用的遥感图像已经过大气校正或其他预处理措施以提升精度。 - **地理边界设定**:合理划定目标研究区域能够有效降低噪声干扰。 - **采样数量调整**:依据实际需求适当增减参与统计分析像素数目从而平衡效率与准确性之间的关系。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值