在GEE中实现哨兵2号(Sentinel-2)缨帽变换得到亮度(Brightness)、绿度(Greenness)、和湿度(Wetness)

缨帽变换(K-T变换),本质上是一种通过矩阵运算实现的图像增强,因其可以得到亮度(Brightness)、绿度(Greenness)、和湿度(Wetness),因而在植被检测、用地分类等方面中得到广泛应用。GEE教程中只有landsat8的,而网络上也没没有关于哨兵2号的GEE缨帽变换教程,随手写一个方便后来人。

哨兵2的缨帽变换参数是出自2107的一篇论文:《ORTHOGONAL TRANSFORMATION OF SEGMENTED IMAGES FROM THE SATELLITE SENTINEL-2》

下图为所用参数

 以下为GEE实现代码,****为自己的矢量边界

var aoi = ee.FeatureCollection("******");
function maskS2clouds(image) {
  var qa = image.select('QA60');

  // Bits 10 and 11 are clouds and cirrus, respectively.
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;

  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

  return image.updateMask(mask).divide(10000);
}
var coefficients = ee.Array([  
  [0.0356, 0.0822, 0.1360, 0.2611, 0.2964, 0.3338, 0.3877, 0.3895, 0.0949, 0.3882, 0.1366, 0.4750],  
  [-0.0635, -0.1128, -0.1680, -0.3480, -0.3303, 0.0852, 0.3302, 0.3165, 0.0467, -0.4578,  -0.4064, 0.3625],  
  [0.0649, 0.1363, 0.2802, 0.3072, 0.5288, 0.1379, -0.0001, -0.0807, -0.0302,-0.4064, -0.5602,-0.1389]
]);  
//影像转换为array  
var image =  ee.ImageCollection('COPERNICUS/S2_SR')
                  .filterDate('2021-01-01','2021-12-31')
                  .filterBounds(aoi)
                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))
                  .map(maskS2clouds)
                  .select(['B1','B2','B3','B4','B5','B6','B7','B8','B9','B11','B12','B8A']);  
 
              
var arrayImage1D = image.mean().toArray();  
//print("arrayImage1D",arrayImage1D)
Map.addLayer(arrayImage1D,{},"arrayImage1D")
 
 
var arrayImage2D = arrayImage1D.toArray(1);  
//print("arrayImage2D",arrayImage2D)
Map.addLayer(arrayImage2D,{},"arrayImage2D")
 
 
//相乘变换  
var componentsImage = ee.Image(coefficients)   
                        .matrixMultiply(arrayImage2D)   
                        .arrayProject([0])   
                        .arrayFlatten([[  
                          'brightness', 'greenness', 'wetness' 
                        ]]);  
var vizParams = {  
  "bands": ['brightness', 'greenness', 'wetness'],  
  "min": -0.1,   
  "max": [0.5, 0.1, 0.1]  
};  
Map.centerObject(image.mean(), 7);  
Map.centerObject(aoi)
Map.addLayer(componentsImage, vizParams, "componentsImage"); 
print("componentsImage",componentsImage)

  • 16
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值