Open jdries opened 2 years ago
Notes:
The core of CCDC is the use of Lasso to estimate the coefficients of a timeseries model: https://github.com/repository-preservation/lcmap-pyccd/blob/2eaf9933d76b861fc243327b323b80fbcf301932/ccd/models/lasso.py#L52
The number of coefficients used depends on available inputs:
Previous studies suggest that for model estimation to be accurate and robust, the total number of clear observations should be more than three times the number of coefficients estimated in the time series model (Zhu & Woodcock, 2014b). Therefore, if the total number of clear observations is greater than or equal to 12 but less than 18, the simple model will be used for estimating surface reflectance. Otherwise, if the total number of clear reflectance is greater than or equal to 18 but less than 24, the advanced model will be used. If the total number of clear observation is greater than or equal to 24, the full model will be applied. The time span for each time series model can be any time larger than 1 year. Basically, for each pixel, the more clear observations that are available, the more complex time series model will be selected.
openEO has some prior work in the form of predict and fit curve: https://processes.openeo.org/#fit_curve
I managed to integrate the basic ccdc procedure, based on their library: https://code.usgs.gov/lcmap/pyccd It's kind of hacky because I had to override two methods with a very hard assumption that the shape of the input corresponds to a number of landsat bands. It's also mostly untested, except for a test that checks whether it runs without crashing.
FuseTS should support using ccdc for change detection, this is a potential library to use:
https://code.usgs.gov/lcmap/pyccd