# Interpolation

## Resampling methods and interpolation in GRASS GIS

### Reinterpolation of "filled" raster maps (continuous data) to a different resolution

#### Resampling of raster maps to finer resolution

- r.resample uses the built-in resampling (nearest neighbor in GRASS 6), so it should produce identical results as the on-the-fly resampling done via the raster import modules.
- r.resamp.interp Resampling with nearest neighbor, bilinear, and bicubic method: method=nearest uses the same algorithm as r.resample, but not the same code, so it may not produce identical results in cases which are decided by the rounding of floating-point numbers. For r.resamp.interp method=bilinear and method=bicubic, the raster values are treated as samples at each raster cell's centre, defining a piecewise-continuous surface. The resulting raster values are obtained by sampling the surface at each region cell's centre. As the algorithm only interpolates, and doesn't extrapolate, a margin of 0.5 (for bilinear) or 1.5 (for bicubic) cells is lost from the extent of the original raster. Any samples taken within this margin will be null.
- r.resamp.rst Regularized Spline with Tension (RST) interpolation 2D: Behaves similarly, i.e. it computes a surface assuming that the values are samples at each raster cell's centre, and samples the surface at each region cell's centre.
- r.resamp.bspline resamples with bicubic or bilinear spline interpolation with Tykhonov regularization.
- r.resamp.filter resamples raster map layers using an analytic kernel. It offers box, bartlett, gauss, normal, hermite, sinc, lanczos1, lanczos2, lanczos3, hann, hamming, and blackman kernels.

#### Resampling of raster maps to coarser resolution

- r.resamp.stats resamples raster map layers to a coarser grid using aggregation. Used without -w, the value of each region cell is the chosen aggregate of the values from all of the raster cells whose centres fall within the bounds of the region cell. With -w, the samples are weighted according to the proportion of the raster cell which falls within the bounds of the region cell, so the result is normally unaffected by rounding error (a miniscule difference in the position of the boundary results in the addition or subtraction of a sample weighted by a miniscule factor; also, The min and max aggregates can't use weights, so -w has no effect for those).

### Reinterpolation of "sparse" (scattered points or lines) maps

- Inverse distance weighted average (IDW) interpolation (v.surf.idw, r.surf.idw, and r.fill.stats)
- Interpolating from contour lines (r.surf.contour), see Contour lines to DEM
- Interpolating using Natural_neighbor method (r.surf.nnbathy)
- Interpolating from vector points with B-splines (v.surf.bspline)
- Interpolating from vector points with regularized splines with tension (v.surf.rst and v.vol.rst), see also RST Spline Surfaces
- Interpolating from vector points with Kriging (v.krige)
- Interpolating from vector points around barriers or cost surfaces (v.surf.icw)

### Heat maps (kernel density)

- Create raster maps from vector points with (v.kernel)
- Inverse distance weighted average (IDW) interpolation (v.surf.idw, r.surf.idw, and r.surf.idw2)

### Binning

While not being a real interpolation method, raster binning generates raster maps from vector points. Vector points in XYZ format (CSV or ASCII file) can be rasterized (binning into raster cells) using univariate statistics:

- see (r.in.xyz)

### Filling of holes

Sometimes no-data areas in raster maps (continuous surfaces) needs to be filled using interpolation:

- see r.fillnulls
- see r.fill.stats (IDW based, very fast)

Optionally extra raster sample points can be generated from an auxiliary raster maps using r.random, merged into the target raster maps with r.patch and then filled using interpolation with r.fillnulls.

## Comparing original and interpolated data

- Statistical assessment: Use r.mapcalc to calculate a differences map, then r.univar to calculates univariate statistics of the differences
- Graphical comparison g.gui.mapswipe - Interactively compares two maps by swiping a visibility bar.