Google Earth Engine(GEE)——当我们遇到色差问题应该如何处理?
【摘要】
这里的这个代码是有问题的,本来代码的本意是想去除条带,可以他采取的做法却是利用mean或者median等方式来进行,这只是影像聚合的一种方式,并不是通过改变影像的DN值来改变影像的的色调,所以我们可以先看下面的代码,然后回给大家在文章末尾提供两个直方图匹配的修复方案!
代码:
var L8SR_collection = ee.Ima...
这里的这个代码是有问题的,本来代码的本意是想去除条带,可以他采取的做法却是利用mean或者median等方式来进行,这只是影像聚合的一种方式,并不是通过改变影像的DN值来改变影像的的色调,所以我们可以先看下面的代码,然后回给大家在文章末尾提供两个直方图匹配的修复方案!
代码:
-
var L8SR_collection = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2"),
-
roi =
-
/* color: #d63000 */
-
/* shown: false */
-
/* displayProperties: [
-
{
-
"type": "rectangle"
-
}
-
] */
-
ee.Geometry.Polygon(
-
[[[35.656721917962024, -9.845627851094253],
-
[35.656721917962024, -10.34249880734705],
-
[36.4353779238214, -10.34249880734705],
-
[36.4353779238214, -9.845627851094253]]], null, false),
-
geometry_1 = /* color: #d63000 */ee.Geometry.Point([35.78712134946283, -9.929366325427338]),
-
geometry_2 = /* color: #98ff00 */ee.Geometry.Point([36.311674920891406, -10.291949698399549]);
-
//**
-
Map.centerObject(roi,9.3)
-
var empty = ee.Image().byte()
-
var outline = empty.paint({featureCollection:roi, color:1, width:1})
-
Map.addLayer (outline,{palette:'red'},'Boundary')
-
-
//===============================================================================\\
-
/*
-
1. 影像集合和筛选 (TOA & SR)
-
*/
-
//================================================================================\\
-
//** Timeframe
-
var start = '2014-06-01'
-
var end = '2014-11-01'
-
var cloudcover = 30
-
var cloudProperty = 'CLOUD_COVER_LAND'
-
-
//** 1. Dry
-
var drystart = 6
-
var dryend = 9
-
-
//** 2. Wet
-
var wetstart = 1
-
var wetend = 5
-
-
//============================================================================\\
-
/*
-
2.数据预处理 (TOA & SR)
-
*/
-
//=============================================================================\\
-
// 对Landsat Collection 2 SR图像进行缩放,并将云层掩码添加为波段。
-
function maskL8sr(image) {
-
// 为不需要的像素制定蒙版(填充、云、云影)。
-
var qaMask1 = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0)
-
.rename('dilated');
-
var qaMask2 = image.select('QA_PIXEL').bitwiseAnd(parseInt('11101', 2)).eq(0)
-
.rename('not_dilated');
-
-
// 将缩放系数应用于适当的波段。
-
var getFactorImg = function(factorNames) {
-
var factorList = image.toDictionary().select(factorNames).values();
-
return ee.Image.constant(factorList);
-
};
-
var scaleImg = getFactorImg([
-
'REFLECTANCE_MULT_BAND_.|TEMPERATURE_MULT_BAND_ST_B10']);
-
var offsetImg = getFactorImg([
-
'REFLECTANCE_ADD_BAND_.|TEMPERATURE_ADD_BAND_ST_B10']);
-
var scaled = image.select('SR_B.|ST_B10').multiply(scaleImg).add(offsetImg);
-
-
// 用按比例的波段替换原来的波段,并添加mask。
-
return image.addBands(scaled, null, true).addBands([qaMask1, qaMask2]);
-
}
-
-
//** 波段选择
-
//** Surface Reflectance
-
var l8_bands_sr = ['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6','SR_B7'];
-
var L8SR_new_names = ['SR_ULTRABLUE','SR_BLUE','SR_GREEN','SR_RED','SR_NIR','SR_SWIR1','SR_SWIR2'];
-
-
//============================================================================\\
-
/*
-
3. 应用函数到影像 (TOA & SR)
-
*/
-
//=============================================================================\\
-
var L8SR_1 = L8SR_collection.filterDate(start,end)
-
.filter(ee.Filter.lte(cloudProperty,cloudcover))
-
.sort(cloudProperty)
-
.filterBounds(geometry_1)
-
.map(maskL8sr)
-
.select(l8_bands_sr,L8SR_new_names)
-
.first()
-
//.clip(roi)
-
-
var L8SR_2 = L8SR_collection.filterDate(start,end)
-
.filter(ee.Filter.lte(cloudProperty,cloudcover))
-
.sort(cloudProperty)
-
.filterBounds(geometry_2)
-
.map(maskL8sr)
-
.select(l8_bands_sr,L8SR_new_names)
-
.first()
-
//.clip(roi)
-
-
-
var collection = ee.ImageCollection([L8SR_1,L8SR_2])
-
var L8_SRMosaic = collection.median()
-
-
//============================================================================\\
-
/*
-
4. 可视化参数设定 (TOA & SR)
-
*/
-
//=============================================================================\\
-
-
//** Prefered band combination
-
var truecolor_SR = ['SR_RED','SR_GREEN','SR_BLUE']
-
var falsecolor_SR = ['SR_NIR','SR_SWIR1','SR_SWIR2']
-
-
var l8SR_visualization = {
-
bands: falsecolor_SR,
-
min: 0.05,
-
max: 0.39,
-
};
-
-
//============================================================================\\
-
/*
-
5. 添加图层到地图上
-
*/
-
//=============================================================================\\
-
Map.addLayer (L8_SRMosaic.clip(roi),l8SR_visualization,'L8 SR Mosaic'+start+'/'+end)
处理完后有很明显的条带信息

我们这里面并不是通过最大、最小或者中位数的不同合成来改变影像的色调,我们需要色彩平衡函数来完成,这里有两个博客链接提供给大家:
(1233条消息) GEE(Google Earth Engine)消除影像色差——直方图匹配算法_此星光明的博客-CSDN博客
(1233条消息) Google Earth Engine(GEE)——python影像色差匹配(直方图匹配算法)万字长文_此星光明的博客-CSDN博客_python 色差计算
文章来源: blog.csdn.net,作者:此星光明,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_31988139/article/details/127011695
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)