MODIS (version 1.1.7)

smooth.spline.raster: Filter Time Series Imagery with a Cubic Spline

Description

This function uses the smooth.spline function to filter a vegetation index time serie of satellite data.

Usage

smooth.spline.raster(
  x,
  w = NULL,
  t = NULL,
  groupYears = TRUE,
  timeInfo = orgTime(x),
  df = 6,
  outDirPath = "./",
  ...
)

Arguments

x

RasterBrick (or RasterStack) or character vector of filenames, sorted 'Vegetation index'.

w

RasterBrick (or RasterStack) with weighting information, e.g. derived from makeWeights.

t

In case of MODIS composite, the corresponding 'composite_day_of_the_year' RasterBrick (or RasterStack).

groupYears

logical. If TRUE, output files are grouped by years.

timeInfo

Result from orgTime.

df

numeric, yearly degree of freedom value passed to smooth.spline. If set as character (i.e., df = "6"), it is not adapted to the time serie length but used as a fixed value (see Details).

outDirPath

Output path, defaults to the current working directory.

...

Arguments passed to writeRaster. Note that filename is created automatically.

Value

The filtered data and a text file with the dates of the output layers.

Details

numeric values of df (e.g., df = 6) are treated as yearly degrees of freedom. Here, the length of the input time series is not relevant since df is adapted to it with: df*('length of _input_ timeserie in days'/365). The input length can differ from the output because of the pillow argument in orgTime.

character values of df (e.g., df = "6"), on the other hand, are not adopted to the length of the input time series.

Currently tested on MODIS and Landsat data. Using M*D13 data, it is also possible to use the 'composite_day_of_the_year' layer and the 'VI_Quality' layer. This function is currently under heavy development and a lot of changes are expected to come soon.

See Also

whittaker.raster, raster.

Examples

Run this code
# NOT RUN {
# The full capacity of the following functions is currently avaliable only with M*D13 data.
# !! The function is very new, double check the result!!

# You need to extract the: 'vegetation index', 'VI_Quality layer', 
# and 'composite day of the year' layer.
# runGdal(product="MOD13A2",begin="2004340",extent="sicily",end="2006070",
# job="fullCapa",SDSstring="101000000010")
# Afterward extract it to: 
options("MODIS_outDirPath")

# the only obligatory dataset is "x" (vegetatino index), get the 'vi' data on the source directory: 
path <- paste0(options("MODIS_outDirPath"),"/fullCapa")
vi <- preStack(path=path, pattern="*_NDVI.tif$")

# "orgTime" detects timing information of the input data and generates based on the arguments
# the output date information. For spline functions (in general) the beginning and
# the end of the time series is always problematic. 
# So there is the argument "pillow" (default 75 days) that adds
# (if available) some more layers on the two endings.

timeInfo <- orgTime(vi,nDays=16,begin="2005001",end="2005365",pillow=40)

# now re-run "preStack" with two diferences, 'files' (output of the first 'preStack' call)
# and the 'timeInfo'.
# Here only the data needed for the filtering is extractet:
vi <- preStack(files=vi,timeInfo=timeInfo)

smooth.spline.raster(x=vi,timeInfo=timeInfo)

# Filter with weighting and time information:
# if the files are M*D13 you can use also Quality layers and the composite day of the year:
w <- stack(preStack(path=path, pattern="*_VI_Quality.tif$", timeInfo=timeInfo))
w <- makeWeights(w,bitShift=2,bitMask=15,threshold=6)
# you can also pass only the names
t <- preStack(path=path, pattern="*_composite_day_of_the_year.tif$", timeInfo=timeInfo)

smooth.spline.raster(x=vi,w=w,t=t,timeInfo=timeInfo)
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab