Finding knickpoints in river profiles

Posted on Updated on

Did you know that TopoToolbox has a function to identify knickpoints in river profiles? Well, if you don’t know, now you know.

The function is called knickpointfinder. It uses an algorithm that adjusts a strictly concave upward profile to the actual profile. Offsets between the actual and the concave upward profile occur where the actual profile has convexities. Relaxing the concavity constraint where offsets attain a maximum will adjust the concave profile to the actual profile. knickpointfinder adjusts the profile iteratively until offsets fall below a specified tolerance value. Look at the animation below which probably explains more than a thousand words.

knickpointfinder
Animation of the example found in the knickpointfinder help.

Using knickpointfinder is easy. Just see the function help to run the example whose results are shown above.

knickpointfinder.png
Final result with adjusted network and identified knickpoints (red squares). The size of the squares relates to the offset between the actual profile and the strictly upward concave profile.

Let us know how well knickpointfinder suits your needs. Note that this algorithm is not yet published, so please give credits to our TopoToolbox paper if you are using this algorithm in your work.

Advertisements

16 thoughts on “Finding knickpoints in river profiles

    Toni Kroos said:
    July 8, 2018 at 3:16 pm

    I recently gained some free time, so I decided to learn TopoToolbox. What is the knickpointfinder output variable dz? I understand it is some measure of the vertical offset of the knickpoint, but how is it measured? I want to scale the tolerance properly. A tolerance of 20 [m?] (10 m DEM) led to 1000+ knickpoints (maybe more noise than signal).

      wschwanghart responded:
      July 8, 2018 at 7:54 pm

      Hi. I’ll try to explain that soon and in more detail in a future post. knickpointfinder fits a strictly concave upward profile to the elevation profile with the constraint that the fitted curve runs below the actual profile. dz is the maximum vertical distance between the actual and the modelled profile. knickpointfinder identifies these locations iteratively. If there is one with dz >= tol, then knickpointfinder will relax the curvature constraint, so that the fitted profile obtains a sharp convex knick. The thus obtained profile is then the input for the next iteration. This procedure is repeated until there are only vertical distances dz < tol.

      In fact, knickpointfinder is not just iterative, but divide-and-conquer. But more about this soon.

      Hope this helps.
      Cheers, W

    Ivan Rojas said:
    July 14, 2018 at 1:30 pm

    Hello,
    I am Ivan Rojas, student of master program water resources, in Chle. I am currently conducting an investigation to identify changes in the morphometry of the channels generated by tectonic processes, identifying knickpoints in river profiles. This tool that presents would be very useful in my research and I would like to know more about it, and even try it in my current research.
    Thanks!

    wschwanghart responded:
    July 15, 2018 at 1:27 pm

    Hi Ivan. Thanks for your note. I’ll try to provide some more information soon here on this blog.
    Cheers, Wolfgang

    Neha joshi said:
    August 31, 2018 at 5:20 am

    Hello
    I am Neha Joshi, working as a Senior research fellow from India.I currently used the knickpointfinder using the above link. I successfully did that, but I want to plot the locations of knickpoints (which are shown over longitudinal profile) over DEM. Please guide me with the MATLAB codes for plotting knickpoint posistion over DEM.
    Thanks!

      wschwanghart responded:
      September 12, 2018 at 1:44 pm

      Dear Joshi, take a look at the second output of knickpointfinder. The structure array kp contains two elements, kp.x and kp.y. scatter(kp.x,kp.y) does the job.
      Best, Wolfgang

        Neha joshi said:
        September 28, 2018 at 4:53 am

        Hello
        thanks a lot for your response. Now I could successfully plot the required points

    Julieta Carolina Nóbile said:
    October 9, 2018 at 5:25 pm

    I find the tool very useful and straightforward, could you please give me some advice to plot the knickpoints above a DEM but with circles sizes that reflect also the offset between the actual profile and the strictly upward concave profile? I used to plot:

    imageschs(DEM,[],’colormap’,’landcolor’,…
    ‘colorbar’,true,…
    ‘colorbarylabel’,’Elevation’)

    hold on
    scatter(kp.x,kp.y)
    hold off

    thanks!!!

      wschwanghart responded:
      October 9, 2018 at 8:34 pm

      Hi Julieta, scatter takes several input arguments.
      scatter(kp.x,kp.y,kp.dz)
      would change the size of the bubbles.
      scatter(kp.x,kp.y,20,kp.dz,'filled')
      would change their bubbles.
      Best, Wolfgang

        Julieta Carolina Nóbile said:
        October 11, 2018 at 5:28 pm

        Thanks, Wolfgang, I will try that. I finally plotted it with scatter(kp.x,kp.y, kp.dz, ‘MarkerFaceColor’,’r’)
        How can I save the kp results or export this data (structure array) to shapefile or table?

        Thanks again for your help!

    Yousef21 said:
    November 4, 2018 at 11:44 pm

    Error in STREAMobj/modify (line 96)
    p = InputParser;

    Error in Ornekolsun (line 10)
    S = modify(S,’distance’,10000)

    I have with this problem, Could you help me ?

      wschwanghart responded:
      November 5, 2018 at 8:51 am

      Dear Yousef21, STREAMobj/modify usually doesn’t return an error. Please provide the code that would enable me to understand the error message.
      Best, Wolfgang

        Yousef21 said:
        November 5, 2018 at 10:56 am

        Cannot find an exact (case-sensitive) match for ‘InputParser’

        The closest match is: inputParser in C:\Program
        Files\MATLAB\R2013a\toolbox\matlab\lang\@inputParser\inputParser.m

        Error in STREAMobj/modify (line 96)
        p = InputParser;

        Error in Yusuf2 (line 8)
        S = modify(S,’distance’,10000);

        Error in STREAMobj/modify (line 96) This one sir,

    Yousef21 said:
    November 5, 2018 at 10:55 am

    Cannot find an exact (case-sensitive) match for ‘InputParser’

    The closest match is: inputParser in C:\Program
    Files\MATLAB\R2013a\toolbox\matlab\lang\@inputParser\inputParser.m

    Error in STREAMobj/modify (line 96)
    p = InputParser;

    Error in Yusuf2 (line 8)
    S = modify(S,’distance’,10000);

    Error in STREAMobj/modify (line 96) This one sir,

      wschwanghart responded:
      November 5, 2018 at 1:04 pm

      It seems, you have an outdated version of TopoToolbox. This bug was removed many months ago. Please download the latest version: https://github.com/wschwanghart/topotoolbox/archive/master.zip
      In addition, if you run MATLAB R2013a, you will certainly face other errors, too. Consider updating MATLAB.
      Cheers, W

        Yousef21 said:
        November 5, 2018 at 5:36 pm

        Thank you very much. I will use Topotoolbox in my master thesis. And I want to generate Chi maps. İf I have some questions, Can I ask you ? Can you help me ?

Leave a Reply

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

WordPress.com Logo

You are commenting using your WordPress.com 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.