十三
5, 7 and 8 observations (Collection 2, Tier 1).
var filteredLandsat=utils.Inputs.getLandsat({
collection: 2
})
.filterBounds(studyRegion)
.filterDate(startDate, endDate)
.select(bands);
print(filteredLandsat.first());
准备好ImageCollection后,我们可以指定 CCDC 参数并运行算法。对于本练习,我们将使用默认参数,这些参数在大多数情况下都工作得相当好。我们将修改的唯一参数是断点带、日期格式和 lambda。我们将在字典中设置所有参数值,并将其传递给 CCDC 函数。对于断裂检测过程,我们使用除蓝色和表面温度带(分别为\''BLUE\''和\''TEMP\'' )之外的所有带。minObservations默认值6表示标记更改所需的连续观察数。chiSquareProbability 和minNumOfYearsScaler 默认参数0.99和1.33分别控制算法检测变化的灵敏度以及检测变化所需的迭代曲线拟合过程。
我们将日期格式设置为 =1,它对应于小数年份,并且往往更容易解释。例如,在2010年中午检测到的变化将作为2010.5存储在像素中。最后,我们使用lambda的默认值20,但我们对其进行缩放以匹配输入的比例(表面反射率单位),并指定 maxIterations值为10000,而不是默认值25000,这可能需要更长的时间完全的。这两个参数控制曲线拟合过程。
为了完成输入参数,我们指定要使用的ImageCollection ,这是我们在前面的代码部分中导出的。添加以下代码:
// Set CCD params to use.
var ccdParams={
breakpointBands: [\''GREEN\'', \''RED\'', \''NIR\'', \''SWIR1\'', \''SWIR2\''],
tmaskBands: [\''GREEN\'', \''SWIR2\''],
minObservations: 6,
chiSquareProbability: 0.99,
minNumOfYearsScaler: 1.33,
dateFormat: 1,
lambda: 0.002,
maxIterations: 10000,
collection: filteredLandsat
};
// Run CCD.
var ccdResults=ee.Algorithms.TemporalSegmentation.Ccdc(ccdParams);
print(ccdResults);
请注意,输出ccdResults 包含大量波段,其中一些对应于二维数组。我们将在下一节中更多地探讨这些频段。针对多个像素以交互方式运行算法的过程可能很快就会对系统造成很大的负担,从而导致内存错误。为了避免出现此类问题,我们通常首先将结果导出到 Earth Engine 资产,然后检查该资产。这种方法确保了 CCDC 成功完成运行,也让我们以后可以轻松访问结果。在本章的以下部分中,我们将使用预先计算的资产,而不是要求你自己导出资产。供你参考,导出CCDC结果所需的代码如下所示,将标志设置为 false 可以帮助你记住现在不要导出结果,而是在以下部分中使用预先计算的资源。
var exportResults=false
if (exportResults){
// Create a metadata dictionary with the parameters and arguments used.
var metadata=ccdParams;
metadata[\''breakpointBands\'']=
metadata[\''breakpointBands\''].toString();
metadata[\''tmaskBands\'']=metadata[\''tmask