对 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');
第一主成分结果
原始真彩色影像