今天分享一下在GEE中如何计算干度分量(NDBSI),NDBSI指数的计算方法为:
IBI=(2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1))) / (2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1)))
SI=((SWIR1 + RED) - (NIR + BLUE)) / ((SWIR1 + RED) + (NIR + BLUE))
其中BLUE,GREEN ,RED,NIR ,SWIR1分别为影像的蓝波段、绿波段、红波段、近红波段、中红外波段 1
具体实现代码如下:
还是以山西省为研究区
//导入自己的研究区,将其定义为roi
var roi = ee.FeatureCollection("users/lilei655123/shanxi");
var star_date = '2020-06-01'//定义起始时间
var end_date = '2020-09-30'//定义终止时间
function rmL8Cloud(image) {
var cloudShadowBitMask = (1 << 3);
var cloudsBitMask = (1 << 5);
var qa = image.select('pixel_qa');
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return image.updateMask(mask)
.copyProperties(image)
.copyProperties(image, ["system:time_start",'system:time_end']);
}
var L8_ = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR").filterBounds(roi)
.filterDate(star_date, end_date)
.map(rmL8Cloud)
.mean()//中值合成
.clip(roi)
print(L8_)
var img = L8_.clip(roi)
function sts_minmax (image){
var minmax = image.reduceRegion({
reducer: ee.Reducer.minMax(),
geometry:roi,
scale: 30,
maxPixels: 1e13}).values();
return minmax;}
//NDBSI
var ibi = img.expression('(2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1))) / (2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1)))', {
'SWIR1': img.select('B6').multiply(0.0001),
'NIR': img.select('B5').multiply(0.0001),
'RED': img.select('B4').multiply(0.0001),
'GREEN': img.select('B3').multiply(0.0001)
})
var si = img.expression('((SWIR1 + RED) - (NIR + BLUE)) / ((SWIR1 + RED) + (NIR + BLUE))', {
'SWIR1': img.select('B6').multiply(0.0001),
'NIR': img.select('B5').multiply(0.0001),
'RED': img.select('B4').multiply(0.0001),
'BLUE': img.select('B2').multiply(0.0001)
})
var ndbsi1 = (ibi.add(si)).divide(2)
var minMax = sts_minmax(ndbsi1);
var ndbsi = ndbsi1.unitScale(minMax.get(1),minMax.get(0))
var mean = ndbsi.reduceRegion({
reducer: ee.Reducer.mean(),
geometry:roi,
scale: 30,
maxPixels: 1e13
});
print(mean,'平均值')
var rsei_std = ndbsi.reduceRegion({
reducer: ee.Reducer.stdDev(),
geometry:roi,
scale: 30,
maxPixels: 10e13
});
print(rsei_std,'标准差')//
var max = ndbsi.reduceRegion({
reducer: ee.Reducer.max(),//
geometry:roi,//
scale: 30,//
maxPixels: 10e13//
});
print(max,'max')
var min = ndbsi.reduceRegion({
reducer: ee.Reducer.min(),
geometry:roi,
scale: 30,
maxPixels: 10e13
});
print(min,'min')
Map.centerObject(roi,7)
var styling = {color:"red",fillColor:"00000000"};
Map.addLayer(roi.style(styling),{},"geometry")
Map.addLayer(ndbsi, {'min':0,'max':1,'palette':["eff3ff","bdd7e7","6baed6","2171b5","f7f7f7","d9d9d9","bdbdbd","969696","636363","252525"]}, 'ndbsi')
计算结果如下:
统计结果:
感谢关注,欢迎转发!
声明:仅供学习使用!