对 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');
第一主成分结果

原始真彩色影像

577

被折叠的 条评论
为什么被折叠?



