# circle fitting to set of 2D data contain noise data

10 views (last 30 days)
ha ha on 21 Dec 2018
Commented: Image Analyst on 22 Dec 2018
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 CommentsShow 1 older commentHide 1 older comment
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):
The result is NOT my expectation.
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.

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.
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 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

Matt J on 21 Dec 2018
Use RANSAC.
Matt J on 22 Dec 2018
The ransac command which I linked you to is for arbitrary models.
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.