Steepness derived from smoothed river profiles

Posted on

Today, I gave a talk in the weekly seminar of Manfred Strecker’s group at our institute. The talk had the title: Introduction to TopoToolbox and its application in tectonic geomorphology. Among other, I provided an example of how to calculate and plot the steepness of river networks (see the new function ksn) and how the new smoothing function crs (Schwanghart and Scherler 2017) is helpful here. I am providing the code here for the DEM of the Big Tujunga catchment, but you can easily adapt the code to your own needs.

First, load the DEM and derive flow directions and the stream network. In addition, calculate a flow accumulation grid that we need for calculating ksn.

DEM = GRIDobj('srtm_bigtujunga30m_utm11.tif');
FD = FLOWobj(DEM,'preprocess','carve');
A = flowacc(FD);

We then extract the stream network for a threshold upstream area of 1 sqkm.

S = STREAMobj(FD,'minarea',1e6,'unit','map');
S = klargestconncomps(S,1);

To hydrologically correct and smooth the river profile, we use the function crs:

zs = crs(S,DEM,'K',6,'tau',0.1);

And finally, we plot it all

imageschs(DEM,[],'colormap',[1 1 1],'colorbar',false,'ticklabels','nice');
hold on
hx = colorbar;
hx.Label.String = 'k_{sn}';
Map of ksn values in the Big Tujunga catchment.

Which parameter values should be used to smooth the stream profile? The values depend on the amount of scatter in the profiles, their spatial resolution, and the amount of smoothing. Visual cross-checking of the results is thus advisable. In this lecture, I presented the tool crsapp that let’s you identify a suitable set of parameter values. A screenshot of the tool can be seen below.

The crsapp GUI let’s you interactively choose the right parameters for smoothing river profiles.


Schwanghart, W., Scherler, D., 2017. Bumps in river profiles: the good, the bad, and the ugly. Earth Surface Dynamics Discussions 1–30. [DOI: 10.5194/esurf-2017-50]


7 thoughts on “Steepness derived from smoothed river profiles

    Rishav Mallick said:
    September 14, 2017 at 2:19 pm

    Hi WS,
    Thank you so much for all your inputs on this blog. I went from having no idea where to begin to doing quite a bit of fluvial geomorphology with TopoToolbox in a short span of time.

    I wonder what effect using large values of K (say >1000 ) in the crs function has on slope-area regression. While, it does seem to correct the stair-like profile that a lot of SRTM DEMs have, i’m curious if it also changes the theta value obtained from regression? Can you provide some insight into this?


    wschwanghart responded:
    September 15, 2017 at 9:23 am

    Hi Rishav,
    many thanks for your comment. I am particularly glad to hear that TopoToolbox and this blog has been helpful to you!
    Concerning your question how large values of K in the crs function affect the slope-area regression, I think it would be best to do a sensitivity study. As you increase the value of K to very high values, your channel profile will basically become a straight line. Large values of K would penalize curvature much more than a misfit to the data. Too small values of K, conversely, might produce plateaus (similar to those produced by quantile carving) that might neither be a good representation of the profile. An optimal value would reflect the true profile while removing the bumps that generate the large scatter in slope-area plots. Traditionally, slope-area plots have dealt with scatter using binning. It would definitely be interesting to see whether we can avoid binning using smoothing.
    In fact, your comment concerns an issue that has also been mentioned by reviewers of our discussion paper in ESURF and it gives me an idea how to address them (possibly also in a future blog post).
    Cheers, WS

    Rahul Devrani said:
    July 10, 2018 at 8:32 am

    Hi Wolfgang,

    Can we convert acquired Ksn values into a shapefile?


    wschwanghart responded:
    July 10, 2018 at 8:48 am

    Hi Rahul,
    two steps, if you have the node attribute list k returned by the function ksn.

    1. Create a mapping structure array using STREAMobj2mapstruct

    MS = STREAMobj2mapstruct(S,’seglength’,1000,’attributes’,{‘ksn’ k @mean});

    Vary the seglength to change the approximate length of features in the output shapefile. You can also change the aggregation function (here @mean) but in my experience, the mean works fine.

    2. Export as shapefile


    Cheers, Wolfgang

    Rahul Devrani said:
    July 10, 2018 at 8:52 am


    Rahul Devrani said:
    July 17, 2018 at 9:49 am

    Hi Wolfgang,

    Do we have give path for the shapefile or it has a default folder?


      wschwanghart responded:
      July 17, 2018 at 10:50 am

      The filename can be either an absolute or relative path. If you provide the name only, then shapewrite will write it to the working directory.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.