概述
这段代码使用Google Earth Engine(GEE)平台处理Landsat 8影像,进行云和饱和像素的掩膜处理,并将处理后的影像裁剪到指定的感兴趣区域(ROI),并导出影像集到Google Drive。
数据集
代码使用的是Landsat 8 Level 2, Collection 2, Tier 1数据集(LANDSAT/LC08/C02/T1_L2
)。该数据集包括各种波段的光学和热红外影像,以及用于质量评估的波段。
代码流程和功能
-
定义ROI和样式设置:
- 代码首先定义了感兴趣区域(ROI)和样式设置,然后将其添加到地图上并居中显示。
-
掩膜函数
maskL8sr
:- 该函数对Landsat 8影像进行掩膜处理,以去除填充、云、云影等不良像素,并应用适当的缩放因子和归一化处理。
- 使用位运算和掩膜识别不良像素。
- 应用归一化处理,使得光学波段和热红外波段的值在适当的范围内。
-
影像集筛选与处理:
- 创建影像集,筛选指定日期范围内的影像,并应用掩膜函数进行处理。
- 将处理后的影像裁剪到ROI。
-
影像可视化:
- 定义可视化参数,并将处理后的影像集添加到地图进行显示。
-
影像集导出函数:
- 代码中还提供了一个导出影像集到Google Drive的函数。这个函数遍历影像集中的每个影像,并将其导出到指定的文件夹中。
运行结果
- 运行该代码后,地图上会显示指定日期范围内经过掩膜和裁剪处理的Landsat 8影像,使用红、绿、蓝波段进行可视化。
- 将处理后的影像集导出到Google Drive中。
总结
该代码展示了如何使用Google Earth Engine处理和可视化Landsat 8影像,进行掩膜处理和裁剪操作,并提供了一个导出影像集的示例函数。通过这些步骤,用户可以高效地处理遥感影像数据,并在地图上进行可视化展示。
运行示例图:
代码确实成功地在指定的ROI区域内显示了Landsat 8影像。然而,从图像中可以看出明显的影像质量问题:
-
影像中存在一些条纹和不规则区域,可能是由于云、阴影等因素影响了影像的质量,或者是不同影像拼接时的不一致性。
优化建议
1. 增加影像的过滤和质量控制
可以进一步改进影像过滤和质量控制,以确保仅选择质量较高的影像。
function maskL8sr(image) {
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
var saturationMask = image.select('QA_RADSAT').eq(0);
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(roi)
.filterDate('2019-09-16', '2021-09-28')
.map(maskL8sr)
.map(function(image){
return image.clip(roi)
});
2. 增加影像的合成(mosaic)和时间合并
可以将影像集中的影像进行合成,以减少单个影像中的条纹和不规则区域。
var composite = dataset.median();
3. 改进可视化参数
通过调整可视化参数,可以更好地展示影像细节。
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 0.3,
gamma: 1.4
};
Map.addLayer(composite, visualization, 'Composite Image');
Map.centerObject(roi, 9);
完整代码如下:
//优化代码
// 定义感兴趣区域(ROI)和样式设置
var roi = table; // 用户定义的ROI区域
var style_set = {color: "red", fillColor: "00000000"}; // 样式设置:红色边界和透明填充
Map.addLayer(roi.style(style_set), {}, "shape"); // 将ROI添加到地图并应用样式
Map.centerObject(roi, 9); // 将地图居中显示在ROI区域,缩放级别为9
// 定义掩膜函数以处理Landsat 8影像
function maskL8sr(image) {
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0); // 使用QA_PIXEL波段进行质量掩膜处理,去除填充、云、云影等不良像素
var saturationMask = image.select('QA_RADSAT').eq(0); // 使用QA_RADSAT波段进行饱和度掩膜处理,去除饱和像素
// 对光学波段进行归一化处理
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
// 对热红外波段进行归一化处理
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
// 返回处理后的影像,添加处理后的光学和热红外波段,并应用掩膜
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true)
.updateMask(qaMask)
.updateMask(saturationMask);
}
// 创建影像集,并应用掩膜和裁剪处理
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') // 使用Landsat 8 Level 2数据集
.filterBounds(roi) // 过滤影像集,使其仅包含覆盖ROI区域的影像
.filterDate('2019-09-16', '2021-09-28') // 过滤影像集,使其仅包含指定日期范围内的影像
.map(maskL8sr) // 对影像集中的每个影像应用掩膜处理
.map(function(image) {
return image.clip(roi); // 将处理后的影像裁剪到ROI区域
});
// 创建影像合成,使用影像集中位数值来减少条纹和不规则区域
var composite = dataset.median(); // 使用中位数合成影像集
// 定义影像可视化参数
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'], // 使用红、绿、蓝波段进行可视化
min: 0.0,
max: 0.3,
gamma: 1.4 // 调整gamma值以增强影像对比度
};
// 将合成影像添加到地图进行显示
Map.addLayer(composite, visualization, 'Composite Image');
Map.centerObject(roi, 9); // 将地图居中显示在ROI区域,缩放级别为9
// 影像集导出函数
function exportImageCollection(imgCol) {
// 获取影像集的索引列表
var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"])
.get("list");
indexList.evaluate(function(indexs) {
// 遍历影像集中的每个影像,并导出到Google Drive
for (var i = 0; i < indexs.length; i++) {
var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first();
image = image.toInt16();
Export.image.toDrive({
image: image,
description: indexs[i],
fileNamePrefix: indexs[i],
folder: 'Landsat8',
region: roi,
scale: 30,
crs: "EPSG:4326",
maxPixels: 1e13
});
}
});
}
// 调用导出函数以导出影像集
exportImageCollection(dataset);
运行结果图:
工作台输出: