how to filter points which are on a straight line

4 次查看(过去 30 天)
hi, im looking for a function that will allow me to filter all points that are on a straight line and keep the points that represent that lines ends. for example if im given [1 1; 2 2; 3 3; 4 5; 5 5; 6 6; 7 7] than the output should be [1 1;3 3;4 5;5 5; 7 7] it filters 2 2 since its on the line between 1 1 and 3 3 and also filters 6 6 because its on the line between 5 5 and 7 7 can anyone help? thanks

回答(2 个)

Image Analyst
Image Analyst 2013-3-7
Depending on what you want to do and what your data look like, you may need to use RANSAC: http://en.wikipedia.org/wiki/Ransac It can find lines in a mess of points, like this:

Teja Muppirala
Teja Muppirala 2013-3-7
F = [1 1; 2 2; 3 3; 4 5; 5 5; 6 6; 7 7];
dydx = diff(F(:,2))./diff(F(:,1));
F(1 + find(diff(dydx)==0) ,:) = []
  1 个评论
Teja Muppirala
Teja Muppirala 2013-3-7
This assumes they are EXACTLY on a straight line. But floating-point math can sometimes mess that up, so you might want to do
abs(diff(dydx)) < some small tolerance
instead of just
diff(dydx) == 0

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Startup and Shutdown 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by