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

Walter Roberson
Walter Roberson 2015년 10월 22일
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 2015년 10월 22일
It's hard. May be by thresholding.

댓글을 달려면 로그인하십시오.

 채택된 답변

Image Analyst
Image Analyst 2015년 10월 22일

1 개 추천

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

Hg
Hg 2015년 10월 22일
That's brilliant! Thanks again!
Hg
Hg 2015년 10월 24일
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);
Zhongzheng Wang
Zhongzheng Wang 2019년 3월 18일
Thanks a lot Hg.
Image Analyst
Image Analyst 2019년 3월 18일
I'm attaching my triangle thresholding function.
Firas Guechchati
Firas Guechchati 2020년 10월 15일
how do i use this function ?
Image Analyst
Image Analyst 2020년 10월 15일
편집: Image Analyst 2020년 10월 15일
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).
Firas Guechchati
Firas Guechchati 2020년 10월 19일
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 ?
Image Analyst
Image Analyst 2020년 10월 19일
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.
Firas Guechchati
Firas Guechchati 2020년 10월 20일
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Axis Labels에 대해 자세히 알아보기

질문:

Hg
2015년 10월 22일

댓글:

2020년 10월 20일

Community Treasure Hunt

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

Start Hunting!

Translated by