[GRASS-user] Extracting vegetation phenology from Landsat-based time series
Veronica Andreo
veroandreo at gmail.com
Mon Oct 31 03:30:11 PDT 2016
Hello Sajid!
I came across the same issue when i was working with Chlorophyll data. The
problem is to define what you mean by start and end of growing season
first, i.e.: a certain increasing or decreasing growth rate, a certain
level of accumulated biomass, only a threshold in VI values, etc. Thing is
that to get a "good" estimate of start and end, you have to control/check
what happens before/after the thresholds for start/end, otherwise how to
distinguish start from end?... By then, I didn't find a way to do that only
with GRASS commands, so, i did a bit of coding in R to get start date of
phytoplankton blooms. Though, as mentioned before, I believe to some extent
that t.rast.algebra might be the the way to go since it allows for temporal
indexing.
An probable solution might be to alternatively aggregate time series by
month, changing starting date (for example: first aggregate starting in
january, then in february, then in march and so on) and save the dates in
which the value of the time series crosses a threshold (or reaches the
maximum or minimum). Then, you may aggregate the output by year asking the
mode and range... that should give the date in which it is most common to
find the start of the season (or max or min) and the range of dates... But
this I haven't really tested (yet) :-)
Cheers,
Vero
2016-10-31 11:00 GMT+01:00 Sajid Pareeth <spareeth at gmail.com>:
> Hi all
>
> Thanks MarkusM and Vero for the detailed follow up.
>
> I also use r.hants a lot, and recently was trying to make use of amplitude
> and phase outputs to infer some of the phenological parameters from the
> annual cycle (still not sure, if it is a feasible approach).
>
> But it seems inadequate when it comes to determine the *start and end
> time of the growing season* in a year. I am looking for a solution along
> the line as given in this paper:
>
> https://www.researchgate.net/publication/238418948_Measuring_Phenological_
> Variability_From_Satellite_Imagery
>
> I think once we have the start and end of growing season, rest of the
> related parameters are easy to compute.
>
> May be, there already exists a way in GRASS to do it using TGRASS !!.
>
> Regards
>
> Sajid
>
>
>
>
>
>
>
> On Mon, Oct 31, 2016 at 10:40 AM, Veronica Andreo <veroandreo at gmail.com>
> wrote:
>
>> Hello Nikos and all :)
>>
>> Don't know exactly which parameters you would like to extract from your
>> time series, Nikos, but if helpful, what I did was to use a combination of
>> r.hants and temporal modules to get some phenological indicators such as,
>> number of cycles per year, yearly max and min values, dates of yearly max
>> and min values, period that the variable was above a certain threshold, max
>> rate of change (slope between every pair of maps and then aggregate per
>> year with method=maximum). Some of those examples are in the wiki [0]. I
>> believe that much more could be done with t.rast.algebra (it seems very
>> powerfull), but I haven't yet tested enough.
>>
>> @Sajid, I agree it would be great to have such functionalities as
>> "ready-to-use" module in GRASS, too. Therefore, we could avoid all the
>> steps of moving a time series into r and then back again into GRASS [1]
>>
>> @MarkusM, local weighted regression sounds cool. +1 for that! It would be
>> also very useful to have DINEOF [2] natively implemented. It is very nice
>> when you want to keep the variation of the series instead of smoothing it
>> out [1].
>>
>> Best,
>> Vero
>>
>> [0] https://grasswiki.osgeo.org/wiki/Temporal_data_processing
>> [1] https://grasswiki.osgeo.org/wiki/Temporal_data_processing/GR
>> ASS_R_raster_time_series_processing
>> [2] http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF
>>
>> 2016-10-31 10:06 GMT+01:00 Nikos Alexandris <nik at nikosalexandris.net>:
>>
>>> * Markus Metz <markus.metz.giswork at gmail.com> [2016-10-30 22:30:46
>>> +0100]:
>>>
>>>
>>> On Sun, Oct 30, 2016 at 12:37 PM, Nikos Alexandris
>>>> <nik at nikosalexandris.net> wrote:
>>>>
>>>>> Nikos Alexandris:
>>>>>
>>>>> is there a GRASS-native, of GRASS-friendly, practical tool or tutorial
>>>>>>> or implementation of models, as in the TIMESAT [0] software or
>>>>>>> SPIRITS
>>>>>>> [1], to exctract phenological parameters from NDVI (or, preferrably
>>>>>>> EVI2) times series?
>>>>>>>
>>>>>>> Thank you, Nikos
>>>>>>>
>>>>>>> [0] http://web.nateko.lu.se/timesat/timesat.asp
>>>>>>> [1] http://spirits.jrc.ec.europa.eu/download/software/
>>>>>>>
>>>>>>
>>>>>
>>>>> Sajid Pareeth:
>>>>>
>>>>>>
>>>>>> I was also looking for the same functionalities very recently. Closest
>>>>>> solution i could find is the 'greenbrown' package in R. Atleast we
>>>>>> could
>>>>>> make use of the GRASS-R interface to implement the work flow.
>>>>>>
>>>>>> Phenology function in this package has a good comprehensive list of
>>>>>> functions as in timestat and spirits.
>>>>>> See fig4 here: http://greenbrown.r-forge.r-project.org/phenology.php
>>>>>>
>>>>>> If you find anything else, please do post here.
>>>>>>
>>>>>> And above all, it would be really great to have these functionalities
>>>>>> in
>>>>>> GRASS ;)
>>>>>>
>>>>>
>>>>>
>>>>> Thank you Sajid.
>>>>>
>>>>> As I am not an expert in cropping cycles monitoring, I
>>>>> naively thought there would be more or less some ready to use tools in
>>>>> the GFOSS domain (TIMESAT requires Matlab, SPIRITS works only under
>>>>> Windows).
>>>>>
>>>>> R is good, but there is still the back-and-forth step. There is also a
>>>>> "french" tool for QGIS:
>>>>> https://plugins.qgis.org/plugins/VERSAO_VegaMonitor/
>>>>>
>>>>> At the moment I am looking for an over-simplified way to just
>>>>> hint/classify surfaces on which multiple cropping cycles per year take
>>>>> place (related to industrial agricultural surfaces). Something to get
>>>>> going.
>>>>>
>>>>> Given TGRASS, if we find a practical algorithm, it shouldn't be too
>>>>> hard
>>>>> to implement it GRASS-natively.
>>>>>
>>>>
>>> Markus M:
>>>
>>> [ currently trying to get a grip on MODIS version 6 time series ]
>>>>
>>>> In theory, extracting seasons such as cropping cycles is quite easy to
>>>> implement: whenever a parameter in a time series is above/below a
>>>> given threshold, start/stop the season. The question is how to store
>>>> the results for multiple cropping cycles: a separate raster for each
>>>> cycle and each start and stop date?
>>>>
>>>
>>> May Yann's addon i.lmf (Temporal Local Maximum Fitting of vegetation
>>> indices) be useful within the context? (can't test it, it
>>> segfaults and I have no time to debug these days).
>>>
>>> Nikos
>>>
>>> For preparation, I think that GRASS needs more tools to remove
>>>> outliers and fill gaps in time series. A commonly used tool is local
>>>> weighted regression, also known as LOESS or LOWESS.
>>>>
>>>> I would like to have a module like r.series.lwr (local weighted
>>>> regression) in GRASS with the options
>>>>
>>>> * order=1,2,3 with 1 = linear regression, 2 = second order polynomial
>>>> regression, 3 = third order polynomial regression
>>>> * dod = degree of over-determination because for e.g. linear
>>>> regression you need only 2 data points but that gives an exact fit and
>>>> does not remove outliers, so a number of additional points
>>>> (over-determination) is needed for smoothing. The number of additional
>>>> points should not be too large, otherwise local real fluctuations can
>>>> not be represented by the regression and are smoothed out.
>>>> * weighing function: default tricube, additional options uniform,
>>>> triangular, epanechnikov, quartic, triweight, cosine
>>>> * extreme: iteratively replace outliers with the estimate until a
>>>> given goodness of fit (e.g. coefficient of determination) is obtained
>>>>
>>>> Output: one output for each input map.
>>>>
>>>> Currently I am using r.hants a lot, but r.hants assumes more or less
>>>> regular cycles in the time series (e.g. NDVI) and fits a single
>>>> function to the complete time series, while a local weighted
>>>> regression can work with much less points and can still capture
>>>> short-term non-linear fluctuations.
>>>>
>>>> Markus M
>>>>
>>> _______________________________________________
>>> grass-user mailing list
>>> grass-user at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>>
>>
>>
>> _______________________________________________
>> grass-user mailing list
>> grass-user at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20161031/18c7685b/attachment-0001.html>
More information about the grass-user
mailing list