recognize the center and diameter of a circle
1 view (last 30 days)
Show older comments
I have a 2D scatter, it is a circle but the center and diameter is not given.
I need its center and diameter but as you can see in the figure, there are some noise points around. is there anyway to do this?
0 Comments
Accepted Answer
Akira Agata
on 5 Dec 2018
If you have Optimization Toolbox, you can solve this nonlinear least-square problem by simply using lsqnonlin function, like:
load('circle_coordinate.mat');
x = circle_coordinate(:,1);
y = circle_coordinate(:,2);
% Solve as nonlinear least-squares problem
f = @(a) (x-a(1)).^2 + (y-a(2)).^2 - a(3).^2;
a0 = [mean(x),mean(y),max(x)-mean(x)];
af = lsqnonlin(f,a0);
% Fittig circle
theta = linspace(0,2*pi);
xFit = af(1)+af(3)*cos(theta);
yFit = af(2)+af(3)*sin(theta);
% Visualize the result
figure
scatter(x,y,'.')
hold on
plot(af(1),af(2),'rx')
plot(xFit,yFit,'r-')
legend({'Data','Center','Fitting circle'})
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!