circle fitting to set of 2D data contain noise data

8 views (last 30 days)
Let's say: I want to fit the circle through the set of data points (17 point with x & y coordinate- Please see attachment test1.txt file).
I use the code provided by Nikolai Chernov:
And, I get the good result as follow:
Now, I assume that I add 1 more "noise point" to the old data to make a new data as follow:
My question: How can i fit the circle through all new data points? It is obviously hope that the new fitting circle is same as old fitting circle (not consider the noise points)?
  3 Comments
ha ha
ha ha on 21 Dec 2018
If I use the code provided by Nikolai Chernov:
The result will be like this (his code cover the noise data):
untitled.jpg
The result is NOT my expectation.
Image Analyst
Image Analyst on 22 Dec 2018
Like John said, why do you think that you can start tossing in additional data and get the exact same answer as if that data were not in there? That's just crazy thinking. Your expectation is just plain wrong.
The circle you got looks reasonable considering you said you want to " fit the circle through ALL new data points".
The only way it would be the same as before is if you used the same data as before, in other words, ignore the additional, noisy data. Hence the suggestions to use rmoutliers(), RANSAC, MAD, etc. to identify and remove the outliers. Once the're removed, you'll get the same data because you'll be using the same points.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 21 Dec 2018
How do you know it's a noise point? I mean if that point was moved over so that it was still really far away but on the circle, it wouldn't be a noise point, or would it?
I suggest you try rmoutliers() to remove outliers from your x and y data.
If that doesn't work, then you can just do the fit and find the residuals and throw out any point with a huge residual.
  2 Comments
ha ha
ha ha on 21 Dec 2018
I suggest you try rmoutliers() to remove outliers from your x and y data.
i can not find "rmoutliers" in matlab. Which version are you using?
Image Analyst
Image Analyst on 21 Dec 2018
R2018b, which is when it was introduced. Can you upgrade?
Otherwise you can use fitPolynomialRANSAC introduced in the Computer Vision System Toolbox in R2017a, or movmad() introduced in base MATLAB in R2017a.
Or you can compute your own MAD using directions in Wikipedia: Median_absolute_deviation

Sign in to comment.

More Answers (1)

Matt J
Matt J on 21 Dec 2018
Use RANSAC.
  4 Comments
Matt J
Matt J on 22 Dec 2018
The ransac command which I linked you to is for arbitrary models.
Image Analyst
Image Analyst on 22 Dec 2018
For some reason the ransac capability is in the Computer Vision System Toolbox, which is not too common, rather than the Statistics and Machine Learning Toolbox, which is more common. Do you have the Computer Vision System Toolbox? RANSAC will work with extraordinarily noisy data - much noisier than MAD - but if you don't have that toolbox and your data doesn't have that many noise points, then MAD should work pretty good.
800px-Fitted_line.svg.png

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!