Curavture/Slope Filtering

5 Ansichten (letzte 30 Tage)
Ian Bunker
Ian Bunker am 14 Mai 2021
Kommentiert: Star Strider am 17 Mai 2021
I am currently making a program to process some data, part of this process is removing graphs that are sloped, such as the one below:
And retaining graphs that have curvature such as the one below:
I don't come from a strong applied mathematics background, one idea was to take a partial derivative and compare to a set threshold, the curvature formula is another possibility. Does anyone have any experience with this type of problem you would be willing to share?

Akzeptierte Antwort

Star Strider
Star Strider am 14 Mai 2021
One approach could be to look for changes in the slope (using the gradient function here) with respect to the number of elements in the vector, and reject those with the number of slope changes below a certain threshold.
To illustrate —
changefcn = @(y) numel(y) - nnz(gradient(y)<0);
x = linspace(0, 1); % Use The Same Independent Variable For simplicity
Curve1 = 1./(1+x);
Changes1 = changefcn(Curve1)
Changes1 = 0
figure
plot(x, Curve1)
text(mean(xlim),mean(ylim), sprintf('Changes = %2d',Changes1))
Curve2 = sin(15*pi*x)*0.1 - x;
Changes2 = changefcn(Curve2)
Changes2 = 44
figure
plot(x, Curve2)
text(mean(xlim),mean(ylim), sprintf('Changes = %2d',Changes2))
.
  2 Kommentare
Ian Bunker
Ian Bunker am 17 Mai 2021
This is a really versatile way of accomplishing this task, it also preserves the data more than a lengthy mathematical operation with multiple error ranges. Thanks!
Star Strider
Star Strider am 17 Mai 2021
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by