Find turning point in data

How to get data gradient and how to locate significant changes of the gradient? I'm trying to locate the first "turning point" of the plot below. Other turning points can be ignored.

2 Comments

How can you tell that it is a turning point? The part to the left of it is not linear so the part to the left of it has places where the slope changes: why are they not turning points?
Hg
Hg on 22 Oct 2015
It's hard. May be by thresholding.

Sign in to comment.

 Accepted Answer

Image Analyst
Image Analyst on 22 Oct 2015
Points like that are often found using a triangle thresholding method. I think there's one in the File Exchange. Basically it draws a line from the peak to the tail and then draws perpendicular lines from that hypotenuse line to the curve. The longest perpendicular line from the hypotenuse to the curve indicates the "corner" of the curve. Maybe that will work for you.

9 Comments

Hg
Hg on 22 Oct 2015
That's brilliant! Thanks again!
The one in the File Exchange is too complicated. I just made a simple one. To get the so called "turning point", I find the longest distance from the curve perpendicular to the line connecting the two endpoints of the curve.
% Two endpoints on the curve "data"
x = [1 size(data,1)];
y = [data(1) data(end)];
% The slope of the line connecting the two endpoints
m = ( y(2) - y(1) )/( x(2) - x(1) );
pm= - 1 / m;
% Point on the curve (xc,yc), point on the line (xl,yl)
perpDist = zeros(size(data,1),1);
for i = 1:size(data,1)
xc = i ; yc = data(i);
yl = ( (m * xc) + (m^2 * yc) - (m * x(1)) + y(1) )/(1+ m^2);
xl = xc - m*(yl - yc);
% distance^2
d2 = (xl - xc)^2 + (yl - yc)^2;
perpDist(i) = d2;
end
[val, idx] = max(perpDist);
Thanks a lot Hg.
I'm attaching my triangle thresholding function.
how do i use this function ?
In the help at the top of the file it says this:
% Sample call:
% binOfThreshold = triangle_threshold(pixelCount, 'R', true);
where pixelCount is your signal, and binOfThreshold would be the index (element number).
what would be my signal if i have only data and what would be my index
it doesnt really work for me
can i personal message you ?
Your data and your signal are the same thing in that case. The index is the element of the data where your threshold is. Why doesn't it work for you? You can't personally message me but I monitor this forum very closely.
Please start your own thread and attach your data or image, and code. Let's not keep bugging the original poster HG with emails about activity on this discussion.
sorry my last post
this is the thread
https://de.mathworks.com/matlabcentral/answers/613781-i-plotted-this-and-i-want-to-measure-the-length-and-analyze-the-section-of-this-plot

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!