I would like to assess terrain curvature, i.e. the 2nd derivative of a DEM, on different scales.

The most common approach to curvature seems to be the one suggested by Zevenberg (1987) where a fourth-order polynom is fitted to a 3x3 window around each grid cell, as it is implemented e.g. in ArcGis. The nice thing about it is that non-directional curvature can be computed as a convolution of the DEM with the kernel

    0.0  0.5  0.0
k = 0.5 -2.0  0.5  *  1/s^2
    0.0  0.5  0.0

with s the cell size. However, I'd like to derive curvature on larger scales, too, so that the result is less affected by small terrain features.

I can see two immediate ways to do so:

  1. Smooth or scale the underling DEM and re-use the same kernel, or
  2. to use a larger kernel.

To me, (1) feels pretty ragged and for (2) I'm not sure what kind of kernel to use.

Any suggestions to get me in the right way? Or is it rather a problem of defining "larger scale curvature"?


1 Answer 1


This is a wonderful question. I agree with you that option 1 is suboptimal because it modifies the elevations of the DEM. Rather than solely looking at the scaling effect, you'll also be comparing the impact of varying roughness. With option 2 there is no particularly obvious way to set-up the kernel and you might have to fit planar surfaces to elevations sampled from a distance, something that is happening implicitly in the Zevenberg algorithm. But I think you're overlooking one of the most attractive approaches: resample your DEM to a coarser resolution and then use the standard curvature kernel on the coarser DEM. Resampling the grid resolution is one of the most commonly used approaches to handling scaling issues with raster datasets. Depending on the scale difference, I'd probably use nearest-neighbour resampling in this case. Otherwise, bilinear or cubic convolution resampling will result in a slight smoothing of the surface in the same way that a low-pass filter (option 1) will, although likely to a lesser degree.

  • 1
    Many thanks for your answer. I agree that raster resampling likely is the way to go. However, shouldn't there exist a kernel that provides the same results as, e.g., a bilinearly interpolated resampled raster, but without the constraint of a larger cell size?
    – Leo
    Oct 27, 2014 at 10:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.