在GEE中实现哨兵2号(Sentinel-2)缨帽变换得到亮度(Brightness)、绿度(Greenness)、和湿度(Wetness)
缨帽变换(K-T变换),本质上是一种通过矩阵运算实现的图像增强,因其可以得到亮度(Brightness)、绿度(Greenness)、和湿度(Wetness),因而在植被检测、用地分类等方面中得到广泛应用。GEE教程中只有landsat8的,而网络上也没没有关于哨兵2号的GEE缨帽变换教程,随手写一个方便后来人。哨兵2的缨帽变换参数是出自2107的一篇论文:《ORTHOGONAL TRANSFOR
·
缨帽变换(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)
更多推荐
已为社区贡献1条内容
所有评论(0)