Abstract
This code aims for ellipse fitting but only contains the center’s calculation.
CODE
function [x0,y0] = fitellipseDirect(x,y)
n = size(x,1);
centerx = mean(x);
centery = mean(y);
A = zeros(n,6);
scale = double(0.01);
for i = 1:n
px = double((x(i) - centerx)*scale);
py = double((y(i) - centery)*scale);
A(i,1) = double(px^2);
A(i,2) = double(px*py);
A(i,3) = double(py^2);
A(i,4) = double(px);
A(i,5) = double(py);
A(i,6) = 1.0;
end
DM = double(A' * A);
DM = double(DM/n);
S1 = DM(1:3,1:3);
S2 = DM(1:3,4:6);
S2T = DM(4:6,1:3);
S3 = DM(4:6,4:6);
C1_inv = [0, 0, 0.5;
0, -1, 0;
0.5, 0.0, 0.0];
M = double(C1_inv*(S1 - S2*inv(S3)*S2T));
[v,D] = eig(M);
index = 1;
if D(1,1)>0
index = 1;
elseif D(2,2)>0
index = 2;
elseif D(3,3)>0
index = 3;
end
vec = [v(1,index);v(2,index);v(3,index)];
theta_1 = double(vec);
theta_2 = double(-inv(S3)*S2T*theta_1);
b2_4ac = double(theta_1(2)*theta_1(2) - 4*theta_1(1)*theta_1(3));
cd_be = double(2*theta_1(3)*theta_2(1) - theta_1(2)*theta_2(2));
ae_bd = double(2*theta_1(1)*theta_2(2) - theta_1(2)*theta_2(1));
x0 = double((cd_be/b2_4ac/scale) + centerx);
y0 = double((ae_bd/b2_4ac/scale) + centery);
theta = [theta_1(1),theta_1(2),theta_1(3),theta_2(1),theta_2(2),theta_2(3)];
end
使用:文章来源:https://www.toymoban.com/news/detail-854865.html
[x y] = fitellipseDirect(xcell,ycell);
xcell为x坐标数组,ycell为y坐标数组;文章来源地址https://www.toymoban.com/news/detail-854865.html
到了这里,关于MATLAB--椭圆拟合算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!