MATLAB Answers

## how to filter points which are on a straight line

Asked by Itzik Ben Shabat

### Itzik Ben Shabat (view profile)

on 7 Mar 2013

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

## Products

No products are associated with this question.

## 2 Answers

### Image Analyst (view profile)

Answer by Image Analyst

### Image Analyst (view profile)

on 7 Mar 2013

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 (view profile)

Answer by Teja Muppirala

### Teja Muppirala (view profile)

on 7 Mar 2013
```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) ,:) = []
```

Teja Muppirala

### Teja Muppirala (view profile)

on 7 Mar 2013

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

#### Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today