目录
一、联合多源遥感影像的意义
联合多源遥感影像意味着将来自不同传感器、不同时间或不同空间分辨率的遥感数据融合在一起,来获取完整、准确的地表信息。这种融合可以提供比单一数据源更多、更丰富的信息,同时还能降低遥感数据中的噪声、缺失数据和歧义等因素的影响,从而提高地表信息的质量和可靠性。联合多源遥感影像的意义主要体现在以下几个方面:
1. 提高信息质量
利用多源遥感数据的互补性,可以提高地表信息的准确性、全面性和时效性,从而更好地满足决策和研究的需要。
2. 丰富数据内容
联合多源遥感影像可以提供更多的地表特征信息,如高程、植被、水体、土壤类型、岩石等,这样可以帮助更好地理解自然环境和人类活动。
3. 降低数据噪声
联合多源遥感影像还可以通过对不同数据源的重叠区域进行一些处理,去除重复信息和不一致信息,从而减少噪声和错误。
联合多源遥感影像的技术在生态环境监测、资源调查、城市规划、农业生产、灾害管理、国土安全等领域均有广泛的应用前景。接下来以Landsat-8和Sentinel-2的数据融合为例,详细讲解其处理过程的GEE实现。
二、GEE实现
本例以Sentinel-2数据为主,Landsat-8做为Sentinel-2没有数据区域的补充,GEE下载代码如下:
1、研究区域和下载年份的选择
// 指定研究区域
var geometry = 自己导入的FeatureCollection对象;
// 区域筛选,有需要就加上
geometry = geometry.filterMetadata(列名, 筛选条件, 筛选对象名称);
// 研究区域显示
Map.centerObject(geometry, 8);
// 选择下载年份,每次下载一年的数据,后面需要用前后两年数据补充
var the_year = ee.Number(2020);
var startYear = the_year.subtract(1);
var endYear = the_year.add(1);
2、定义数值转换函数
接下来先写好Landsat-8地表反射率产品和Sentinel-2 2A产品的数值转化函数,参考GEE相关产品的示例代码。虽然GEE上的这两个产品已经做好了大气校正,但数值不是地表反射率,还需做一个简单的线性变换:
// L8辐射定标 DN-->反射率
function L8_applyScaleFactors(image) {
image = ee.Image(image);
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
return image.addBands(opticalBands, null, true);
}
// S2辐射定标 DN-->反射率
function S2_applyScaleFactors(image) {
image = ee.Image(image);
var opticalBands = image.select('B.').divide(10000);
return image.addBands(opticalBands, null, true);
}
3、定义影像去云函数
再是去云函数的定义,可根据需求调整,具体数值含义参考产品中相应波段说明。其中Sentinel-2去云参考了‘SCL’和‘QA60'两个波段,因为经过尝试后笔者认为联合这两个波段去除效果最好,单独使用其中一个都有较严重的去不干净的问题。Sentinel-2的去云方法大家也多多参考其他博主的见解:
// L8去云、去雪
function maskL8sr(image){
var DilatedCloud = 1 << 1; //云层边缘
var Cloud = 1 << 3; //云层
var CloudShadowBitMask = 1 << 4; //云影
var SnowBitMask = 1 << 5; //积雪
var qa = image.select('QA_PIXEL');
var mask = qa.bitwiseAnd(DilatedCloud).eq(0)
.and(qa.bitwiseAnd(Cloud).eq(0))
.and(qa.bitwiseAnd(CloudShadowBitMask).eq(0))
.and(qa.bitwiseAnd(SnowBitMask).eq(0));
return image.updateMask(mask);
}
// S2去云、去雪
function maskS2clouds(image) {
var scl = image.select('SCL');
var Cloud_Shadows = 1 << 3;
var Clouds_Low_Probability = 1 << 7;
var Clouds_Medium_Probability = 1 << 8;
var Clouds_High_Probability = 1 << 9;
var Cirrus = 1 << 10;
var Snow_Ice = 1 << 11;
var qa = image.select('QA60');
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
var mask = scl.bitwiseAnd(Cloud_Shadows).eq(0)
.and(scl.bitwiseAnd(Clouds_Low_Probability).eq(0))
.and(scl.bitwiseAnd(Clouds_Medium_Probability).eq(0))
.and(scl.bitwiseAnd(Clouds_High_Probability).eq(0))
.and(scl.bitwiseAnd(Cirrus).eq(